본문 바로가기

데이터 Story/데이터 상념(想念)

프리미엄 가이드 후기

돌이켜보면 언제 썼나 하는 생각이 듭니다.

 

출판은 2010 11월이었지만 책을 완성한 건 사실상 6월경이었으니까 1년이 넘었네요.

 

제가 2004년에 생애 처음으로 책을 냈습니다. SQL Server 책인데요.

아마 절판돼서 구하실 수가 없을 거에요. 다행이죠.

 

그때는 SQL Server를 열심히 했고, 멘토였던 정원혁씨보다 더 최고가 될 자신이 있었습니다. 저 혼자서만 라이벌로 생각하던 때였습니다.

 

그런데 1년도 안 돼 오라클로 넘어온 후로 다시 돌아가지 못했습니다.


SQL Server
는 책을 출판하게 만든 고마운 존재입니다.

 

그리고 작년에 두 번째 책을 냈습니다.

 

첫 번째 책은 경력에 보탬이 됐으면 하는 생각밖에 없던 책이었습니다. 멘토에 대응(?)할 생각은 전혀 없었고요.
내용도 별다른 건 없는 요약본이었고 출판 후 관리도 제대로 안 했습니다.

 

두 번째 책에는 몇 가지 의미를 담았습니다.

 

이 책으로 우리나라 최고의 모델러가 돼야겠다고 생각했고요. 당장이 아니라 10~20년 후에라도요.
2030
년에도 읽히도록 예제 연도를 그때쯤으로 썼습니다.

 

그리고 교육과 연관되는데요. 애를 키우다보니 많은 것들이 교육과 연결되네요.

 

주변에서 책을 싫어하고 무시하는 사람들을 보는데 애들이 이런 우를 범하지 않도록 하기 위해, 책을 읽는 아이가 되길 바라는 마음으로 썼습니다.

아빠가 쓴 책이 애들에게 영향을 미칠 거라 믿기 때문에요. 지금은 어리지만 커서라도.

 

금전적인 것은 경험을 해 봐서 기대를 안 했지만 이왕이면... ㅎㅎ

 

의도한 바가 앞으로 어떻게 될지는 알 수 없지만 긍정적으로 생각하고 있습니다.

 

80%는 만족하고 있습니다.

부족한 2%가 만족되면 다시 출판할 생각입니다.

 

사설이 길었네요.

 

보통 서문과 함께 각 장에 대한 간략한 설명, 책을 읽는 방법 등 독자가 읽기 쉽도록 가이드해주는 내용이 나오는데 책만 두껍게 하는 거 같아 생략했습니다.

 

사설이 긴 걸 좋아하지 않아서 뺐지만 도움이 될 수도 있어 블로그에 정리했습니다. 약간의 가이드가 될 것입니다.

 

책의 정식 제목은 『이론과 실무를 겸비한 전략서-관계형 데이터 모델링 프리미엄 가이드』입니다.

 

서문에 밝혔듯이 멋스럽지 않은 촌스러운 제목입니다.

 

하지만 이 책을 대표할 수 있는 단어로 정하는 게 좋을 거라 생각하고 정했습니다.

 

이론, 실무, 전략서, 관계형, 데이터 모델링, 최고의 가이드

 

맨 마지막 단어가 좀 걸리지만 희망할 수는 있으니까요. ㅎㅎ

 

 

01 데이터 모델링에 대한 상념(想念)

 1.1. 데이터 모델링이 왜 어려운가?

 1.2. 데이터 모델링의 매력

 1.3. 모델링은 상식적이다

 1.4. 모델러와 바둑 프로기사

 1.5. 좋은 모델은?

 1.6. 모델링이 왜 필요한가?

 1.7. 좋은 모델러란?

 1.8. 모델링 목표

 

1장은 모델링에 대해 평소에 하던 생각을 자유롭게 썼습니다.

 

바둑을 좋아하시는 분은 모델링이 바둑과 닮았다는 것에 동의하실 것입니다.

 

동네에선 나름 잘 둔다고 자부했는데, 선배에게 9점을 깔고 만방으로 지던 신입생 때가 가끔 생각납니다.

 

바둑은 인생과 닮았다고들 하는데 그럼 모델링이 인생과 닮은 건가요?

 

그건 아닌 거 같아요. 하지만 최소한 논리적으로 살아가는 데 조금은 도움이 될 거 같습니다.

창의력을 키우기엔 부족하지만 보편성과 논리성을 키우기엔 좋다고 생각합니다.

수학과 연관이 많습니다.

 

모델링이 예술과 유사하다는 것은 객관적이지 않은 사실이라 책에는 쓰지 않았지만 저는 그렇게 생각합니다.

 

영감, 통찰(Insight)이라는 게 크게 작용하는 분야입니다. 설명하기 힘든...

 

 

02 데이터 모델링 기본 개념

 2.1. 관계형 데이터 모델링(Relational Data Modeling)

 2.2. 무결성(Integrity)

 2.3. 데이터베이스 라이프 사이클

 2.4. 주제 영역(Subject Area)

 2.5. 데이터 표준화

 2.6. ERD(Entity Relationship Diagram)

 

2장은 모델링과 연관된 내용을 다뤘습니다.

 

관계형 데이터베이스 기반에서 운영되는 모델에 대한 책이라는 걸 강조했고요.

과연 관계형 데이터베이스가 지금 같은 지위를 계속 유지할까요?

 

주제 영역은 책 한 권이 될 정도의 내용인데 간략하게 적었습니다.

 

조만간 데이터 성격 위주의 영역으로 모델링을 할 것이며(현재는 업무 담당자, 즉 사람 위주로 하죠), 데이터 주제 영역 위주로 조직이 정비될 것입니다.

 

제가 조직에 대한 전문가는 아니지만 데이터와 조직은 연관성이 크고, 효과적인 조직은 경영 혁신의 시발점이기 때문입니다.

 

대학원 전공이 지식경영이었는데 제대로 공부하지 않은 걸 후회할 때가 많습니다.

데이터와 지식경영이 연관됐다고 판단하고 선택했는데 소홀히 했습니다.

 

표준화 관련해서는 메타 시스템에 대한 얘기를 많이 하고 싶었지만, 실무에서 모델링 영역과 메타 영역이 어느 정도 구별이 돼 있어 언급을 자제했습니다.

 

현재 대표적인 메타시스템들이 간결하지 않은 것은 언급하고 싶습니다.

 

모델러가 속성 표준화하는 사람이 아니라는 것도 여러 번 강조했습니다.

 

 

03 개념 모델 & 논리 모델 & 물리 모델

 3.1. 개념 모델(Conceptual Model)

 3.2. 논리 모델(Logical Model)

 3.3. 물리 모델(Physical Model)

 

만약 책의 분량이 한정돼 있어 어느 장인가 빼야 했다면 3장이었을 겁니다.

11장과 연관돼 있고, 실무에서 궁금한 부분 중 하나라 포함시켰지만요.

 

개념 모델과 논리 모델, 물리 모델은 상세화 정도가 다른 연결된 모델입니다.

전혀 다른 모델이라고 생각하면 혼란스러울 것입니다.

 

파일 자체를 달리 관리하는 케이스 툴이 있는데, 아마 모델 자체가 다르다고 생각해서인 거 같습니다.

하지만 관리 문제도 있어 하나의 파일로 상세화 정도만 달리해 관리하는 게 효과적이라고 생각합니다.

 

 

04 정규화(Normalization)

 4.1. 정규화(Normalization)?

 4.2. 정규화의 목적

 4.3. 아노말리(Anomaly)

 4.4. 함수 종속(Functional Dependency)

 4.5. 정규형의 종류

 4.6. 정규형과 성능

 

4장 정규화는 데이터 통합을 다룬 5장·6, 이력을 다룬 12, 방법론을 다룬 11장과 함께 제가 가장 신경 쓴 부분입니다.

 

모델링의 꽃은 데이터 통합(Generalization)과 정규화(Normalization)인데요.

그중에 정규화는 관계형 데이터 모델링의 이론 자체입니다.

 

기본이기 때문에 정규화를 모르고서는 관계형 데이터 모델링을 할 수 없습니다.

 

4장은 꼭 읽어볼 것을 권합니다.

 

 

05 데이터 통합(Generalization)

 5.1. 데이터 통합(Generalization)

 5.2. 데이터 통합의 장•단점

 5.3. 엔터티 통합 대상

 5.4. 데이터 오너십

 

5장 데이터 통합과 6장 슈퍼타입·서브타입은 밀접하게 연관돼 있습니다.

 

데이터를 통합하면 슈퍼타입·서브타입이 발생하죠.

행위와 그 결과라고 할까요.

 

정규화에 대해서는 이론에 대한 이견은 거의 없고, 다만 적용 여부에 대한 논란이 많은데요.

데이터 통합은 모델러마다 이견이 생길 수 있는 부분입니다.

모델러에 따라 차이가 많은 부분이기도 하고요.

 

데이터를 어떻게 통합했느냐에 따라 모델은 상당히 달라집니다.

 

물론 데이터 통합이 정규화를 기반으로 이루어져야 하는 것은 당연하고요.

 

정규화가 기반이 되지 않은 통합과, 통합을 위한 통합은 지양해야 합니다.

 

 

06 슈퍼타입(Supertypes)과 서브타입(Subtypes)

 6.1. 슈퍼타입 & 서브타입 정의

 6.2. 슈퍼타입과 서브타입의 사용 방법

 6.3. 서브타입의 종류

 6.4. 서브타입의 물리모델 변환

 

최근에 많은 사람들이 서브타입을 얘기하고 있습니다. 모델러라면 반드시 알아야 하는 내용이고요.

 

6.3장 서브타입의 종류는 많은 모델러가 제대로 모르는 부분입니다.

4가지 종류를 정확히 알아야 서브타입을 제대로 도출할 수 있습니다.

 

정규화와 함께 중요한 장입니다.

 

 

07 엔터티(Entity)

 7.1. 엔터티란?

 7.2. 자립(Independent) 엔터티 & 종속(Dependent) 엔터티

 7.3. 엔터티 종류

 7.4. 엔터티 도출 원칙

 7.5. 엔터티명

 7.6. 엔터티 검증

 

모델링의 3요소는 엔터티, 속성, 관계죠.

이중에 제일은 엔터티입니다.

 

저는 엔터티를 가장 중요하게 생각합니다.

이게 제대로 안 되면 뒷 단계는 한마디로 허당입니다.

 

실전에서 엔터티를 올바르게 도출했느냐는 대체로 표면 아래에 숨어 있습니다.

그래서 언급이 안 되고, 잘 보이는 관계에 치중하는데요.

 

관계는 많이 오해하고 있다는 점에서 오히려 중요하게 강조되고요.

엔터티는 모델링의 기초이며 시발점이고, 제대로 도출하기 힘들다는 점에서 중요합니다.

 

관계를 포함한 다른 요소들을 잘 설계하는 사람은 간혹 보는데, 엔터티를 정확하게 도출하는 사람은 상대적으로 드물게 봅니다.

 

모델러의 진정한 자신감은 엔터티 정의에서 출발합니다.

점점 더 차별화가 생기는 부분이라고 생각합니다.

 

 

08 식별자(Unique Identifier)

 8.1. 업무 식별자(Business Identifiers)?

 8.2. 식별자(UID)/(PK) 종류

 8.3. 주 식별자 선정 원칙

 8.4. 주 식별자 선정 절차

 8.5. 주 식별자 상속

 8.6. PK 제약과 유니크 인덱스

 8.7. 인조 식별자 채번

 8.8. 복잡한 주 식별자

 8.9. 식별자 검증

 

책 전반적으로 강조한 것은 식별자와 엔터티는 별개가 아니라는 겁니다.

식별자는 단지 속성의 한 종류가 아니라 엔터티를 정의하는 중요한 요소입니다.

 

업무 식별자는 확실히 분별할 수 있어야 합니다.

 

업무 식별자를 모든 엔터티에서 도출하기는 힘들 수 있습니다. 하지만 핵심 엔터티는 반드시 업무 식별자를 분석해야 합니다.

 

 

09 속성(Attributes)

 9.1. 속성이란?

 9.2. 속성 종류

 9.3. 도메인(Domain)

 9.4. 복합 속성 & 다가 속성

 9.5. 속성명

 9.6. 코드에 관해서

 9.7. (Null)에 관해서

 9.8. 데이터 타입

 9.9. 속성 검증

 

속성과 연관된 여러 요소들을 포함시켰습니다.

 

9.6장 코드는 별도로 읽어보시면 좋습니다.

 

더 나은 방법을 찾으려고 애쓰지 않고, 이전처럼 하려는 부분 중 하나가 코드 관리입니다.

여러 방법을 시도해 볼만한 가치가 있는 부분입니다.

 

 

10 관계(Relationships)

 10.1. 관계(Relationships)?

 10.2. 관계와 속성 그리고 엔터티

 10.3. 관계 구성 요소

 10.4. 관계 표현

 10.5. 관계 종류

 10.6. 참조 무결성(Referential Integrity)

 10.7. 관계 검증

 

관계는 모델링 시 가장 많이 언급되는 부분입니다.

모든 사람이 관계를 얘기하기 때문에 가장 중요해 보이기도 하고요.

 

하지만 잘못된 엔터티들 사이의 관계가 잘됐는지, 잘못됐는지를 논하는 것은 의미가 없습니다.

일단 엔터티가 올바른지를 논한 후에 관계를 논해야 합니다.

 

관계는 업무에서 필요한 RI 관계가 있는, 1촌 관계만을 도출해야 합니다.

 

두 엔터티 간에는 어떤 식으로든 관계가 있도록 할 수 있습니다. 조인하는 요건이 없더라도 관계를 관리하면 그만이니까요.

다대다 관계라도 대표 관계(인스턴스)만 관리하면 되니까요.

 

두 엔터티를 같이 보려는 요건이 있을 때 관계를 관리하고, 바로 위의 관계만을 관리해야 합니다.

 

 

11 모델링 방법론(Modeling Methodology)

 11.1. 하향식(Top-Down)과 상향식(Bottom-Up)

 11.2. 리버스(Reverse) 모델링

 11.3. 모델링 프로젝트 WBS(Work Breakdown Structure)

 

책의 제목을 결정한 계기로 삼은 장이 11장인데요. 이론과 실무를 겸비한 전략서 부분이요.

 

최근의 프로젝트 WBS 하에서 모델링을 잘 할 수 있는 방법을 설명했습니다.

 

만약에 요구사항 정의서에서 엔터티 후보부터 도출하는, 즉 과거에 많이 하던 정통 모델링 방법을 사용하는 프로젝트라면 리버스 모델링 방법을 적용하기 적절치 않을 수 있습니다.

 

저도 정통 모델링을 좋아하지만 제가 일한 경험으로는 현재 거의 모든 프로젝트에서 리버스 모델링을 사용하는 것이 가장 효율적입니다.

 

따라서 하향식(Top-Down) 방법에 대한 자세한 설명은 생략했습니다.

여러 책에, 문장에서 엔터티 후보를 도출하는 것으로 시작하는 설명이 있습니다.

 

단위 업무가 새로 생기면 문장으로부터 엔터티를 도출하고 관계를 도출해야 할 때가 있으므로 정통 모델링 방법도 연습해야 합니다.

 

아마 프로젝트가 지금처럼 계속 진행돼 상향식만 사용하다 보면 하항식으로는 모델링을 못하는 모델러가 많아질 것 같습니다.

 

 

12 이력관리

 12.1. 이력 데이터란?

 12.2. 선분 이력

 12.3. 이력 엔터티 선정 절차

 12.4. 이력 관리 모델 유형

 12.5. 이력 엔터티의 주 식별자

 12.6. 정정 데이터

 

이력은 제가 오랫동안 연구한 분야입니다.

 

정규화는 다른 사람의 이론을 정리한 것이지만, 이력 관리는 많이 고민하고 제 나름의 방법을 일부 찾은 분야입니다.

나름대로 확고하지만 여전히 아쉬운 분야라 더 연구할 생각입니다.

 

우선 발생하는 데이터인 내역 데이터와 변경되는 데이터인 이력 데이터를 구분하는 것이 중요합니다.

이걸 구분하지 못하면 헷갈리고 겉돌게 됩니다.

 

원천 데이터를 확고히 해야 이력 데이터를 설계할 수 있습니다.

즉 엔터티를 확실히 도출해야 그 변경 데이터에 대한 설계도 튼튼해질 수 있습니다.

 

흔히 목격할 수 있고, 당황스러운 것이 이력 엔터티를 얘기하는데 원천 엔터티 자체가 잘못됐을 때입니다. 어디서부터 얘기해야 될지 난감해집니다.

 

또 난감해지는 게 이력 데이터를 설계할 때 원천 엔터티가 흔들리는 것입니다.

이 역시 원천 엔터티 설계가 잘못됐다는 얘기입니다.

 

 

13 비정규화(Denormalization)

 13.1. 비정규화란?

 13.2. 비정규화 과정

 13.3. 비정규형의 단점

 13.4. 비정규화 방법

 

비정규형을 적재적소에 사용하면 최고의 모델이 될 수 있습니다.

 

실제 성능이 심각하게 문제되는 경우는 많지 않습니다.

오히려 습관적으로 성능 얘기를 할 때가 많은데요.

크게 고생한 과거의 1~2 요건 때문에 전체 요건에 대한 성능 문제로 확대된 경우가 많습니다.

 

성능 문제가 발생했을 때, 데이터 무결성 저해를 최소화하는 범위에서 비정규화를 해야 합니다.

이때 비정규화는 반드시 정규화를 한 후에 이루어져야 하고요.

 

정규화를 안 하고 비정규화 한다는 것은 마치 산의 정상에 올라가지 않고 하산하는 것과 같습니다.

그건 산을 오른 것이 아닌 거와 같이 모델링을 한 것이 아닌 것입니다.

 

비록 결과가 모델링 하기 전과 모델링 한 후가 같다고 할지라도 정상에 오르지 않고 정상에 갔다 왔다고 하는 것은 잘못입니다.

 

이런 문제 때문에 모델러의 도덕성 얘기가 나오게 되죠.

결과적으로 향후(tobe) 모델이 현행(asis) 모델과 유사할 때, 모델러가 얼마나 많은 고민을 하고 일을 했는지는 잘 모릅니다.

 

이런 면에서도 정규화가 모델링의 원칙이 돼야 합니다.

더 이상 삭제할 게 없을 때까지 삭제한 후(정상에 오른 후) 꼭 필요한 걸 추가해야 합니다(하산해야 합니다).

 

 

14 물리적(DBMS) 요소

 14.1. 테이블 타입

 14.2. 파티션

 14.3. 인덱스

 14.4.

 

14장은 별도로 책 한권으로 쓸 정도의 내용입니다.

 

13장까지 내용과는 달리 요약한 내용입니다.

 

13장까지 읽으면서 말이 많다고, 한 얘기 또 한다고 생각했던 분은 14장이 깔끔하다고 생각하실 것입니다.

 

사실 상세하게 쓸 정도가 못 돼서 개략적으로 쓴 것입니다.

 

모델러라면 알아야 할 내용입니다.

 

자세한 내용을 다룬 전문책으로 공부하셔야 될 내용입니다.