본문 바로가기

CS 과목(CS科目)/데이터 베이스(データベース)

Associational Relation의 주인(Owner)에 대해 확실히 이해하자! Player, Team(多:1)라는 2개의 Table이 있다고 하자. DB는 Foreign Key(FK) 하나로만 Table들의 연관 관계를 만든다.(FK로 JOIN연산을 통해서) 그러나 클라이언트 코드에서는 2개의 객체 사이의 연관 관계를 맺기 위해서는 Player 객체에 Team객체를 가리키는 참조 변수와 Team 객체에 Player 객체를 가리키는 참조 변수(List players), 즉 2개의 참조변수가 선언돼서, 서로가 서로를 가리키도록 해줘야 한다. ========================================================== DB의 Table : Foreign Key(FK) 하나로만 Table들의 연관 관계를 만든다 객체 : 2개의 참조변수가 선언돼서, 서로가 서로.. 더보기
ORM 프레임워크를 사용하는 이유(ex. JPA..) ORM(Object - realtional mapping) -> 객체는 객체대로 설계를 하고, DB는 Relational하게 설계를 하면서, 이 2개의 패러다임의 차이로 생기는 [SQL 중심적인 개발]이라는 문제를 [JPA와 같은 ORM 프레임워크]가 중간에서 매핑함으로써 해결해 준다. Object와 RDB의 차이 [1. 상속 관계의 유무] -> RDB에도 [Super Type], [Sub Type]이 존재하지만, OPP에서의 그것들과는 다른 의미이다. Album 저장 1. 객체 분해 : RDB는 Album이라는 상속 관계에 의한 Table을 만들 수가 없으므로, 아래와 같이 SQL을 크게 2개로 나누어 서 작성을 해 줘야 한다. ( 만약 Album 객체의 부모 클래스가 100개 있다면??? -> 100.. 더보기
28. NoSQL( MongoDB, Redis, etc ) RDBMS의 단점 1. Column을 추가할 때마다, 스키마를 변경해야 한다( 경직된 스키마 ) 2. 너무 많은 JOIN 연산을 하게 된다.( DB 서버의 CPU,메모리 과부하 ) 데이터가 중복으로 저장되는 것을 막기 위하여 3NF, BCNF를 통해 아래와 같이 원본 테이블을 분할을 하였다. 그런데 만약 원본 테이블의 tuple을 조회하고 싶을 때, 위 4개의 table들에 대해 JOIN 연산을 해야 한다. 이렇게 되면, DB 서버는 JOIN 연산을 실행하기 위하여, CPU와 메모리를 상당 부분 사용하게 될 것이다. 3번째 단점을 살펴보기에 앞서 , scale - up과 scale out에 대한 알고 가자. scale - up : 컴퓨터의 cpu, 메모리 등을 더 좋은 성능의 것으로 바꾸어서 퍼포먼스를 .. 더보기
27.DBCP(DB Connection Pool) 보통의 경우, Logic 서버와 DB 서버의 통신은 TCP 기반으로 이루어 진다. 이 2 개의 서버 사이에서 쿼리를 던지고 전, 그리고 쿼리에 대해 응답을 한 후에는 각각 Connection(3-way)을 미리 맺고 쿼리 수행이 다 끝나게 되면, 그 Connection을 닫아 준다(4-way). 이러한 과정은 높은 데이터 신뢰성을 보장하는 반면에, 시간 비용이 많이 든다는 단점이 존재한다. ( Logic 서버는 계속해서 쿼리를 요청하게 될 것이고, API 마다 한 번의 쿼리가 아니라, 여러 번의 쿼리를 날리게 되는 경우 가 있다. 이러한 경우 시간 비용은 매우 매우 큰 단점이다.) 위와 같은 단점을 해결하기 위해 나온 것이 DBCP이다. DBCP의 동작 방식 Logic 서버에서 API 요청을 하기 이전에.. 더보기
Holder 기법!!!! 동기화(Synchronization)을 위하여, 우리는 데이터를 매개변수로 일일이 넘겨 주곤 하였다. 그러나 이와 같은 방식은 코드를 번잡하게 만들며, 개발자들의 실수를 유도한다. 그래서, Holder 기법을 이용하는 것이 현명하다. 예를 들어, TraceId를 일일이 메서드에 매개변수로 전달시키는 것이 아니라 하나의 클래스에 TraceId traceHolder라는 필드를 선언을 해 주고, 이 필드에 TraceId 객체를 저장하여, 필요할 때마다 꺼내서 쓰게 하면 된다. ( advanced 파일의 FiledLog.java 코드 참고!! ) 더보기
26.partitioning ,sharding, replication partitioning(vertical partitioning , horizontal partitioning) database table을 더 작은 table들로 나누는 것. vertical partion vertical partion의 사용예시 1. 정규화 2. 민감한 정보에는 제한을 더 걸어서 보호하기 위하여 vertical partion을 할 수가 있다. 3. 자주 사용되는 attribute들만 모아서 partion을 만들 수가 있고, 자주 사용되지 않는 attribute만 모아서 partion을 만들 수 있다. -> vertical partion은 꼭 정규화에만 사용되는 것이 아니라 또 1,2,3 때에만 사용되는 것이 아니라 여러 상황에서 사용된다. 정규화 과정은 결국에는 vertical part.. 더보기
25. DB INDEX DB 쿼리 속도를 높이는데 너무나도 중요한 것이 바로 index입니다 그래서 실무에서 매우 매우 자주 사용되는데요, 이번 시간에는 인덱스가 왜 중요한지, 어떻게 사용되는지, 동작 원리는 무엇인지 핵심만 모아서 아주 알차게 설명합니다. 그럼 오늘도 고고씽!!! 오늘날 대부분의 DBMS는 B-tree 기반의 index로 원하는 정보를 빨리 찾는다. (MySQL의 경우 B-tree 이외에도 hash index도 제공을 한다.) SELECT,DELETE,UPDATE 그리고 JOIN에서의 조건(condition)을 만족하는 tuple들을 빠르게 찾기 위해서 index를 사용한다. 아래에서 이미 table에 tuple들이 저장돼 있을 때, 어떻게 index를 생성하는지에 대해 알아 보자. name은 중복된 값을 허.. 더보기
24. DB 정규화(normalization) - Part 2 3Normal Form(3NF) EMPLOYEE_ACCOUNT Table의 FD를 시각화한 것이다. 그런데 테이블의 {empl_id,empl_name}을 보면 중복된 데이터가 너무 많은 것을 알 수가 있다. 왜 저 부분에서 중복된 데이터가 발생할 수밖에 없는지, 원인을 살펴보자. 우선, empl_id -> empl_name이라는 FD 관계에 있다. 그리고 account_id(key) -> empl_id이다. 위 2가지 FD를 좀 더 그림으로 이해해 보자. Key가 {bank_name.account_num}일 때에도 위와 같은 이유로 중복이 발생을 한다. 모든 non prime attribute는 여기서는 {class,ratio, empl_id, empl_name}에 해당 key는 {bank_name,ac.. 더보기