K-해커톤 본선 제출을 마무리하고 며칠동안 나사가 빠져서 공부를 잘 안했다... 반성해....!!!
남은 2주정도의 방학동안 알차게 달릴 예정이다!! 화이팅!!!
📌2주차의 목표
[Database의 모델링 방법 및 쿼리 작성법 스터디 및 실습]
❓키워드
- Database Modeling
- RDB Modeling
- NoSQL Modeling
데이터베이스 모델링에 대해 설명하기 전, 단어의 의미를 짚고 시작하려한다.
스키마(schema) : 데이터베이스의 구조와 제약조건(속성, 개체, 관계)에 관해 전반적인 명세를 기술한 것. 즉, DB내에 어떤 구조로 데이터가 저장되는가를 나타내는 데이터베이스 구조
엔터티(Entity) : 실체, 객체라는 의미로 즉, 업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 집합적인 것
데이터베이스 모델링 (Database Modeling)
데이터베이스 모델링 (Database Modeling)이란?
데이터베이스 모델링이란 주어진 개념으로부터 논리적인 데이터 모델을 구성하는 작업을 말한다.
논리적인 데이터 모델링을 구성하기 위해 데이터베이스의 골격을 이해하고 그 이해를 바탕으로 모델의 기능과 성능적인 측면에서 효율적인 작성이 필요하다. 이는 물리적인 데이터베이스 모델로 환원하여 고객의 요구에 따라 특정 정보 시스템의 데이터베이스에 반영하는 작업을 포함한다.
데이터베이스 모델링의 주요 목적
정보시스템 구축의 대상이 되는 업무 내용을 정확하게 분석
분석된 모델을 가지고 실제 데이터베이스를 생성하여 개발 및 데이터 관리에 사용
데이터베이스 모델링의 중요성
파급효과 (Leverage)
데이터 모델링이 초기에 제대로 이루어지지 않는다면, 시스템이 구현되고 테스트하는 과정 중 그 문제점이 나타날 수 있다. 일반적으로 단위 테스트, 통합 테스트 등 다양한 단계의 테스트를 진행하는데 데이터 모델링의 문제가 발생 해 데이터 모델을 변경해야 하는 상황이 온다면 데이터 모델, 구조 변경에 따른 표준 영향 분석, 응용 변경 영향 분석 등 다양한 분석이 필요해진다. 또한 그 후의 실질적 구조 변경 작업이 진행되어야 한다.
복잡한 정보 요구 사항의 간결한 표현 (Conciseness)
데이터 모델은 구축할 시스템의 정보 요구사항과 한계를 가장 명확하고 간결하게 표현할 수 있는 도구이다.
정보 요구 사항이 정확하고 간결하게 표현되어야 해당 데이터 모델과 관련된 시스템을 구축하는 많은 사람들이 설계자의 생각대로 정보 요구사항을 이해할 수 있을 것이고, 이를 운용할 수 있는 서비스/어플리케이션을 개발하며 데이터 정합성을 유지할 수 있다.
데이터 품질 (Data Quality)
데이터베이스에 담겨 있는 데이터는 기업/단체의 중요한 자산이기 때문에 높은 정확성의 데이터가 저장되어 있어야 한다. 데이터 품질의 문제가 야기되는 이유 중 하나가 데이터 구조인데, 중복 데이터의 미정의, 데이터 구조의 비즈니스 정의의 불충분, 동일한 성격의 데이터를 통합하지 않고 분리함으로써 나타나는 데이터의 불일치 등의 문제가 발생하지 않도록 주의하여야 한다.
데이터베이스 모델링의 유의점
중복 (Duplication)
데이터 모델은 같은 데이터를 사용하는 사람, 시간, 그리고 장소를 파악하는데 도움을 준다. 이러한 지식 응용은 데이터가 여러 장소에 같은 정보를 저장하는 잘못을 하지 말아야 한다.
비유연성 (Inflexibility)
데이터 모델을 어떻게 설계했느냐에 따라 사소한 업무 변화에도 데이터 모델이 수시로 변경됨으로써 유지보수의 어려움을 가중시킬 수 있다. 데이터의 정의를 데이터 사용 프로세스와 분리함으로써 데이터 모델링은 데이터 혹은 프로세스의 작은 변화가 애플리케이션과 데이터베이스에 중대한 변화를 일으킬 수 있는 가능성을 줄인다.
비일관성 (Inconsistency)
데이터의 중복이 없더라도 비일관성은 발생할 수 있다. 예를 들어 신용 상태에 대한 갱신 없이 고객의 납부 이력 정보를 갱신하는 것이다. 개발자가 다른 데이터와 모순된다는 고려 없이 일련의 데이터를 수정할 수 있기 때문이다. 데이터 모델링을 할 때 데이터와 데이터간 상호 연관 관계에 대한 명확한 정의는 이러한 위험을 사전에 예방할 수 있도록 해준다.
관계형 모델링 (RDB Modeling)
관계형 모델링이란?
지난 게시글에서도 설명했듯이 관계형 데이터베이스는 키(key)와 값(value)들의 간단한 관계를 테이블화 시킨 매우 간단한 원칙의 전산정보 데이터베이스다.
관계형 모델은 data를 column과 row를 이루는 하나 이상의 table(혹은 relation)으로 정리하며, primary key가 각 row를 식별한다. (row는 tuple이나 record로 부른다.)
일반적으로 하나의 table(relation)은 하나의 entity를 대표한다. column은 entity의 속성(이름, 나이, 성별, ...)을 나타내며, row는 entity의 인스턴스(홍길동, 30, male, ...)를 나타낸다.
2021.08.11 - [Database] - [Study] 백엔드 스터디 1주차 - Database 기본과 Query문의 이해
데이터 모델링의 3단계
데이터 모델링에는 업무 파악 후 다음과 같은 개념적-논리적-물리적의 3가지의 단계가 있다.
업무파악은 데이터가 어떤 일에 어떤 형태로 사용될 지 의뢰인과 의논하여 업무를 파악하고,
의뢰인이 어떤 것을 생각하고 있는지 파악하는것을 토대로 기획서를 작성하는 것이다.
개념적 데이터 모델링 (Conceptual Data Modeling)
처음 현실세계에서 추상화 수준의 높은 수준을 형상화하기 위해 개념적 데이터 모델링을 한다.
조직, 사용자의 데이터 요구 사항을 찾고 분석하는 데서 시작하며, 특정 자료의 중요도와 유지 여부를 결정한다.
이 단계에 있어서 핵심은 엔터티(Entity)와 그들 간의 관계를 발견하고, 그것을 표현하기 위해 엔터티-관계 다이어그램(E-R Diagram)을 생성하는 것이다.
또, DBMS에 독립적인 개념 스키마와 트랜잭션 인터페이스를 설계한다.
개념적 데이터 모델링을 통해 조직의 데이터 요구를 공식화 하는 것은 두 가지의 중요한 기능을 지원한다.
- 개념적 데이터 모델은 사용자와 시스템 개발자가 데이터 요구 사항을 발견할 수 있도록 지원한다.
- 개념 데이터 모델은 현 시스템이 어떻게 변형되어야 하는가를 이해하는데 유용하다.
논리적 데이터 모델링 (Logical Data Modeling)
시스템으로 구축하고자 하는 업무에 대해 Key, 속성, 관계 등을 정확하게 표현하는 단계의 모델링이다. 재사용성이 높은 특징을 갖는다.
이러한 논리적 데이터 모델링은 비즈니스 정보의 논리적인 구조와 규칙을 명확하게 표현하는 과정이다. 데이터 모델링 과정에서 가장 핵심이 되는 부분이기도 하다.
논리적 데이터 모델링에서 진행되는 중요한 과정 중에 하나는 정규화(Normalization)이다. 정규화는 논리적 데이터 모델 상세화 과정의 대표적인 활동으로, 논리적 데이터 모델의 일관성을 확보하고 중복을 제거하여 속성들이 가장 적절한 엔터티에 배치되도록 함으로써 보다 신뢰성있는 데이터 구조를 얻는데 목적이 있다.
논리적 데이터 모델의 상세화는 식별자 확정, 정규화, M:M 관계 해소, 참조 무결성 규칙 정의 등을 들 수 있으며, 추가적으로 이력 관리에 대한 전략을 정의한다.
물리적 데이터 모델링 (Physical Data Modeling)
물리적 데이터 모델링은 논리 데이터 모델이 데이터 저장소로서 어떻게 컴퓨터 하드웨어에 표현될 것인가를 다룬다. 데이터베이스가 물리적으로 컴퓨터에 어떻게 저장될 것인가에 대한 정의를 물리적 스키마라고 한다.
물리적 데이터 모델링 단계에서는 트랜잭션 세부사항을 설계하고, 테이블, 칼럼 등으로 표현되는 물리적인 저장 구조와 사용될 저장 장치, 자료를 추출하기 위해 사용될 접근 방법 등을 정한다.
3단계의 데이터 모델링을 표로 정리하였다. 위에 있을 수록 추상적이고, 아래로 갈 수록 구체적이다.
Steps | Modeling | 설명 |
1 | 개념적 데이터 모델링 | 업무중심적이며 포괄적인, 추상적 모델링 |
2 | 논리적 데이터 모델링 | 구축하고자 하는 업무에 대해 (Key, Attribute, Relation 등을 정확하게 표현. (재사용성이 높음) |
3 | 물리적 데이터 모델링 | 실제로 DB에 이식할 수 있도록 성능, 저장 등 물리적인 성격까지 고려하여 설계 |
NoSQL 모델링 (NoSQL Modeling)
NoSQL 모델링은 관계형 데이터베이스 모델링과 달리 비정규화(Denormalization)을 기본으로 가져간다.
NoSQL 모델링 패턴
Denormalization (비정규화)
비정규화 = 데이터 중복 허용이라고 말할 수 있다.
RDB에서의 정규화는 데이터의 중복을 없애고 데이터의 정합성과 성질을 모아놨다고 한다면 비정규화는 그와 반대로 데이터의 중복을 허용하는 것을 의미한다. 어떻게 질의할 것이냐가 아닌 어떻게 응답할 것인가, 어떤 데이터를 줄 것인가에 중점을 두기 때문에 비정규화를 통해 데이터를 모델링한다.
정리하자면 이렇다.
- 같은 데이터를 중복해서 저장하는 방식
- 비정규화를 하면 테이블간의 Join을 없앨 수 있다.
- NoSQL에서 두 테이블을 Join하여 데이터를 가져오는 로직을 구현하려면, 각각의 테이블에서 데이터를 가져와 합쳐야하기 때문에 2번의 IO가 발생한다. 이 때, 비정규화를 적용하여 하나의 테이블에 Join될 데이터를 중복 저장하게 되면 1번의 IO로도 데이터를 가져올 수 있다.
장점
- 쿼리 당 IO횟수 감소
- 쿼리 데이터 사이즈 감소
- 쿼리 수행 복잡도 감소
단점
- 전체 데이터 사이즈 증가
- 데이터 일관성 문제 발생 가능
Aggregation(집합)
- NoSQL의 특성 중의 하나인 Scheme-less / Soft Scheme라는 특성을 이용하여 1:N같은 복잡한 entity들의 관계를 손쉽게 하나의 테이블로 바꿀 수 있음
- join 연산을 줄임 > 수행시간 단축, 저렴한 비용의 대용량 데이터 지원 가능
- RDBMS는 데이터를 넣을 때, 테이블의 구조에 맞도록 넣어야하기 때문에 컬럼수와 이름도 지켜야하고 데이터 타입도 준수해야한다. 하지만 NoSQL의 경우 Key만 똑같으면 각 Row는 제멋대로라도 상관없기 때문에 아래와 같이 하나의 테이블로 합칠 수 있다.
Application Side Join
- 어쩔 수 없이 Join기능을 구현해야 하는 경우, NoSQL을 사용하는 client application단에서 Join로직을 처리해야함
- Join이 필요한 테이블의 수 만큼 NoSQL로의 Request/Response IO가 발생하긴 하지만, Denormalization등에 비해서 스토리지 사용량은 감소
RDB, NoSQL 모델링 방법의 차이점
위에서 아주 잠깐 언급했는데 RDB 모델링과 NoSQL 모델링 방법은 다르기 때문에 접근 방법을 바꿔 데이터 모델을 설계해야한다. 보기 쉽게 설명해 보겠다.
RDB Modeling 절차
도메인 분석 -> 테이블 디자인 -> 쿼리 디자인 -> 결과
RDB 모델링은 먼저 저장하고자 하는 도메인 모델을 분석한다. 이를 통해 개체 간의 관계를 식별하여 테이블을 설계한다. RDB는 다양하고 복잡한 쿼리를 지원하기 때문에 테이블을 디자인한 후에 필요한 데이터를 가져올 수 있도록 쿼리를 작성한다. 테이블 설계시 테이블간 데이터 중복을 최소한으로 하는 정규화된 테이블을 설계한다.\
NoSQL Modeling 절차
도메인 분석 -> 쿼리 디자인 -> 테이블 디자인 -> 결과
어플리케이션의 특징적인 데이터 접근 패턴에 따라 데이터 모델링을 실시한다.
NoSQL은 매우 단순한 쿼리만을 지원하기 때문에 어떤 쿼리 결과가 필요한 지 먼저 정의한 다음, 그 결과를 얻을 수 있도록 테이블을 디자인해야 한다. 테이블(데이터 저장 모델) 설계 시 데이터가 두 개 이상의 테이블에 중복되게 저장하는
비정규화된 테이블을 설계해야한다.
[참고링크]
https://blog.naver.com/PostView.nhn?blogId=qbxlvnf11&logNo=221225469375
https://doorbw.tistory.com/229
https://bitnine.tistory.com/446
https://chartworld.tistory.com/6
https://armful-log.tistory.com/56
https://cyberx.tistory.com/166
'# Study > DB' 카테고리의 다른 글
[Study] 백엔드 스터디 1주차 - Database 기본과 Query문의 이해 (3) | 2021.08.11 |
---|