요약
- 2장 데이터 모델에 대한 내용과 질의 언어에 대한 내용을 살펴봄
- 관계형 모델과 문서 모델에 대한 내용의 차이를 이해하게 됨.
- 관계형 모델은 에드가 코드에 의해 제안됨.
- NoSQL의 탄생
- 객체와 관계형의 불일치
- JSON → 일대다
- 관계형 → 다대일, 다대다
발췌
- 데이터 모델은 소프트웨어 개발에서 제일 중요한 부분이다. (p27)
- 해결하려는 문제를 어떻게 생각해야 하는지에 대해 지대한 영향을 미치기 때문
메모
2장. 데이터 모델과 질의 언어
- 대부분 애플리케이션은 하나의 데이터 모델을 다른 데이터 모델 위에 계층을 둬서 만듦.
- 각 계층의 핵심 문제는, 다음 하위 계층 관점에서의 데이터 모델을 표현하는 방법임. (p28)
- 각 계층은 명확한 데이터 모델을 제공함으로써 하위 계층의 복잡성을 숨김
- ex) 데이터베이스 벤더의 엔지니어 ↔ 데이터베이스를 사용하는 애플리케이션 개발자 : 서로 효율적으로 함께 일할 수 있음.
- 하나의 데이터 모델을 완전히 익히는 데도 많은 노력이 필요함.
- 애플리케이션에 적합한 데이터 모델을 선택하는 작업은 상당히 중요함.
관계형 모델과 문서 모델
- 에드가 코드(Edgar Codd)의 관계형 모델
- 데이터는(SQL의 테이블) 관계(releation) 으로 구성되고, 각 관계는 순서 없는 튜플(SQL의 로우) 모음이다
- 1980, RDBM과 SQL은 정규화된 구조로 데이터를 저장, 질의할 필요가 있는 사람들 대부분이 선택하는 도구가 됨.
- 관계형 데이터베이스 근원
- 오늘날의 대부분의 서비스는 여전히 관계형 데이터베이스를 통해 제공
NoSQL의 탄생
- 관계형 모델의 우위를 뒤집으려는 가장 최신 시도 (2010)
- NoSQL → Not Only SQL 로 해석됨.
- NOSQL 데이터베이스의 채택에는 다음의 이유가 있음.
- 대규모 데이터셋, 매우 높은 쓰기 처리량을 RDB 보다 쉽게 할 수 있고, 뛰어난 확장성을 가짐
- 상용 데이터베이스보다 무료 오픈소프트웨어에 대한 선호도 확산
- RDB 에서 지원하지 않는 특수 질의 동작 지원
- RDB 스키마 제한에 대한 불만과 동시에, 더욱 동적이고 표현력이 풍부한 데이터 모델에 대한 바람
- 애플리케이션은 요구사항이 다 다르기에, 최적의 기술 선택은 상황에 따라 다름.
- 가까운 미래에 관계형 데이터베이스와 비관계형 데이터 스토어가 함께 사용될 것임
- 이를,
다중 저장소 지속성(polyglot persistence)
라고함.
객체 관계형 불일치
- 객체지향 프로그래밍 언어 ≠ 관계형 데이터베이스 테이블
- 이를
임피던스 불일치(impedance mismatch)
라고 부름
- ex) 유저 프로필에 여러 경력을 넣을 경우 (one-to-many)
- 데이터 정규화를 통해 경력 테이블에 값을 저장하고, 유저 테이블을 참조한다.
- SQL 표준 마지막 구조화 데이터 타입과 XML 데이터에 대한 지원한다.
- 이를 통해, 단일 로우에 다중 값 저장 및 질의, 색인 가능
- 유저의 경력 정보를 JSON이나 XML 문서로 부호화하여 데이터베이스 텍스트 칼럼에 저장 후, 애플리케이션 구조와 내용을 해석하게 하는 방식.
- 이 방법은 부호화된 칼럼의 값을 질의할 때는 데이터베이스를 사용할 수 없음
- 이력서의 경우, 모든 내용을 갖춘 문서로 볼 수 있고, JSON 표현에 매우 적합함.
- 몽고DB, 리싱크 DB, 카우치DB, 에스프레소와 같은 문서지향 데이터베이스(document-oriented)는 JSON 데이터 모델을 지원함.
- JSON 모델은 데이터 부호화 형식으로 문제가 있음. (4장에 나옴)
- JSON 표현은 다중 테이블 스키마보다 더 나은 지역성(locality)을 갖는다.
- 다중 테이블은 다중 조인을 수행해야 하지만, JSON 표현은 질의 하나로 충분함.
다대일과 다대다 관계
- ID 를 사용하는 이유는 텍스트 문자열의 저장 여부에 따른 중복 문제임
- ID는 그 자체로 아무 의미가 없기에 변경할 필요가 없음.
- 이를 통해, 중복이 발생하지 않고, 데이터베이스의 정규화 이면에 놓인 핵심 개념임.
- 여기서, 중복된 데이터를 정규화하려면 다대일 관계가 필요함.
- 이는, 문서 모델에 적합하지 않음.
- 관계형 데이터베이스는 조인이 쉽기에 ID로 다른 테이블의 로우를 참조하는 방식이 일반적임.
- 데이터베이스가 조인을 지원하지 않으면, 다중 질의를 만들어서 애플리케이션 코드에서 조인을 흉내내야함..
- 추천서와 같은 기능의 경우 다대다 관계임(추천서-추천인)
- 데이터를 문서로 묶는 것이 가능은하지만, 결국, 질의를 위한 조인이 필요함.
댓글