지금 간편하게 로그인하고 전문성 있는 정보를 확인해보세요.
데이터 분석가들이 직접 쓰는 다른 로그인 전용 글들도 무제한으로 이용할 수 있습니다.
데이터 모델링은 건축 설계와 비슷합니다
ERD 읽어보기 글에서 ‘데이터 모델링을 건축 설계에 비유하자면, ERD는 설계 도면과 같다’고 얘기를 했어요. 이 얘기를 조금 더 하면서 이번 글을 시작해 볼게요.
저희 데이터리안 사무실 앞에 새로운 아파트가 한창 지어지고 있어요 🏗️ 땅을 파는 것, 건물이 지어지는 것은 봤는데, 이 앞 단계에서는 어떤 일을 하나 궁금하더라고요. 건축 설계 과정을 찾아보니 데이터 모델링과 비슷한 부분이 많았습니다. 첫 번째 기획 업무에서는 지적도, 도시계획도, 측량도와 같은 자료를 기초로 기본적인 정보들을 확인할 수 있는 도면을 작성합니다. 기획 설계에서 결정된 내용을 도면화하는 계획 설계, 계획 설계를 더 심화하는 중간 설계를 거치면, 모든 건축 요소를 결정하여 도면으로 작성하는 실시 설계 과정에 도달한다고 해요.
![notion image](https://attachments.datarian.io/production-ec52e8eb-2514-4706-b3a5-15617870cfb2-w_jvg_Gtc5e2LvmwUqwGfjpebZR81C2xa0GJ9jcIZW4.png)
![notion image](https://attachments.datarian.io/production-20f0bf72-cf60-4c9d-848e-0082da0677bf-595bygeox26p4en9ylwt5lwAHDFCNnfXUqe-kDwyI9c.png)
이와 비슷하게 데이터 모델링도 논리 모델링, 개념 모델링, 물리 모델링의 단계를 거쳐 구체화 됩니다. 앞에서 열심히 배운 엔티티, 속성, 관계를 점차 구체화해 나가는 거죠. 이번 글에서는 저와 함께 데이터 모델링의 단계를 알아보고 ERD를 직접 그려봅시다 🖌️
데이터 모델링 3단계
데이터 모델링은 추상화 단계에 따라 개념 모델링, 논리 모델링, 물리 모델링으로 구분할 수 있어요. 세 종류 모두 엔티티와 그 관계를 나타내고 있지만, 제작 목적과 보는 대상에 따라 차이가 있습니다. 이번 글을 읽으면서 ‘데이터 모델링이 이런 흐름으로 진행되는구나’ 하고 이해하는 걸 목표로 해봅시다🏃♀️
1. 개념 모델링
첫 번째 개념 모델링은 데이터의 주제 영역과 핵심 엔티티, 관계를 정의하는 단계입니다. 건물을 지을 때 그 건물의 용도는 무엇인지, 어떤 형태로 지을 것인지, 몇 층으로 지을 것인지 등을 먼저 논의하는 것처럼, 개념 모델링도 가장 기초가 되는 뼈대를 잡는 과정입니다. 우리가 ‘무엇을’ 만들지를 정하는 거죠.
이때 정해진 뼈대를 바탕으로 논리 모델링, 물리 모델링을 진행합니다. 만약 물리 모델링 단계까지 왔는데 이 뼈대를 수정해야 한다면, 작업에 큰 영향을 주겠죠! 그래서 개념 모델링 단계에서 많은 논의를 하고 수정 사항을 반영하는 것이 중요합니다.
![notion image](https://attachments.datarian.io/production-ede256d2-23fc-4fa8-9395-6dcf65409695-YxnsTW8P_HwdF5oxqnuC-EjQHOJFZ8fzNgE7gfwpDvQ.png)
2. 논리 모델링
데이터 모델링에서 가장 핵심이 되는 단계가 바로 논리 모델링입니다. 논리 모델링은 개념 모델이라는 뼈대에 살을 덧붙여가는 과정이에요. 개념 모델링이 ‘무엇을’ 만들지 정하는 과정이었다면, 논리 모델링은 ‘어떻게’ 디테일을 채워나갈지 결정하는 과정입니다. 여기에서 각 엔티티 간의 관계와 엔티티 내의 속성을 구체화하고 식별자를 정의해요.
논리 모델링은 아직 실제 데이터베이스를 만들기 위한 단계는 아닙니다. 필요한 데이터 구조를 표현하기 위한 단계이기 때문에, MySQL, PostgreSQL 같은 각 데이터베이스의 네이밍 규칙 등을 고려할 필요는 없어요. 실무에서 사용하는 대로 엔티티와 속성의 이름을 사용해도 됩니다.
![notion image](https://attachments.datarian.io/production-a8e03cec-6f50-46af-9a33-7ce17d7ac6f9-WEyS55CHTouL8XXJLLl24HIB7fjlm7wnBTWaFr5WOTA.png)
3. 물리 모델링
마지막으로 물리 모델링은 논리 모델을 실제 데이터베이스로 사용할 수 있도록 정교화하는 과정이에요. 개념 모델링과 논리 모델링에서는 실제 비즈니스를 모델에 잘 반영하는 데에 집중했다면, 물리 모델링은 실제 데이터베이스 제작을 목적으로 하므로 기술적인 측면에 더 집중합니다. 실제로 이걸 어떻게 만들 것이냐! 하는 거죠. 이 단계에서 엔티티는 테이블로, 속성은 컬럼으로 변환합니다. 그리고 테이블과 컬럼의 이름, 각 컬럼에 들어가는 데이터의 타입과 길이를 정합니다. 사용하는 DBMS의 규칙과 제약을 꼼꼼히 확인해야 해요.
![notion image](https://attachments.datarian.io/production-4fc48846-3543-4b9f-9543-03df44405e0d-eFDZaTghOKZ8MqXEo1769gGMr_eeG5P0wpJWIR3Jtho.png)
물리 모델링을 할 때는 성능도 고려해야 합니다. 대량의 데이터를 처리하다 보면 처리 속도가 느려지는 등의 문제가 발생할 수 있어요. SQL 튜닝만으로 처리 속도를 빠르게 할 수 있다면 다행이지만, 그렇게 해결할 수 없는 경우도 많습니다. 데이터 구조 자체에 문제가 있는 것이죠. 데이터베이스를 구현해서 이미 사용하고 있다면 데이터 구조를 변경하는 것이 쉽지 않습니다. 달리는 열차의 바퀴가 고장 났는데, 기차를 멈추지 않고 바퀴를 바꿔야 한다면 얼마나 어려울까요? 그래서 실제 데이터베이스를 만들기 전에, 물리 모델링 과정에서 성능을 고려하여 설계하는 것이 중요합니다.
이렇게 물리 모델링에서 정의된 내용은 DDL(Data Definition Language)을 이용해 실제 데이터베이스로 구현되므로, 구현에 필요한 정보는 모두 상세하게 정의해야 합니다.
ERD 그려보기
지금까지 본 것처럼 데이터 모델링의 모든 단계에서 ERD를 그립니다. 이번에는 ERD를 그리는 방법을 알려드릴 텐데요. ERD 읽어보기에서 함께 읽어봤던 논리 모델의 ERD를 함께 그려볼게요. ERD를 그릴 수 있는 여러 플랫폼 중, draw.io 라는 플랫폼에서 그려보겠습니다.
![notion image](https://attachments.datarian.io/production-0adec501-e30c-4644-b5d6-a1a2becebbb2-YSeOmzMVpEfmukA3WtzhydE_STF2lsxPmkBFeFVof9E.png)
왜 draw.io 인가요?
![notion image](https://attachments.datarian.io/production-5a4bc19a-a1f6-42a3-a8a1-1f4e39183541-Mu3nHFwy1cWOJm6e3-4_-SWvOMr6lzgAFkvM_C5dXbQ.png)
사용량에 따라 과금이 필요한 플랫폼도 있지만, draw.io는 무료로 사용할 수 있어요. 별도의 로그인이나 앱 설치가 없이 웹사이트에서 바로 제작할 수 있다는 장점도 있습니다. 작업 파일은 구글 드라이브, 드롭박스 등의 클라우드에 저장할 수 있고, 사용자 기기에도 저장해둘 수 있어요. 그리고 해외 플랫폼이지만 한국어도 제공되기 때문에 쉽게 사용할 수 있습니다. 영어가 어려운 분들도 걱정하지 마세요!
[TIP] draw.io를 Jira 또는 Confluence와 함께 사용하기
혹시 실무에서 Jira나 Confluence를 사용하고 계신가요? 이 생산성 프로그램을 개발한 곳이 Atlassian 이라는 회사인데요. draw.io는 Atlassian에도 서비스를 제공하고 있어서 Jira와 Confluence와 연동하여 편집이 가능합니다. 자세한 내용이 궁금하시다면 아래 가이드 문서를 참고해 주세요.
0. draw.io 시작하기
- draw.io 에 접속합니다.
- ‘다이어그램 저장위치’를 설정합니다. 하단의 ‘나중에 결정’을 눌러 다음에 설정할 수도 있어요.
![notion image](https://attachments.datarian.io/production-eb82625a-ab22-4969-8d0b-56c30799bb07-Z_r-n37Jioaa9G8YY6af_RX86YGiUzzCI-GDOY4ONRM.png)
- 아래 화면이 보인다면 ERD 그릴 준비 완료!
![notion image](https://attachments.datarian.io/production-dc384b46-8cbc-4bce-b401-b6f04f90303f-QQpbkEBZ0uiHw_FdcKeFo9d8yafaPbyhpv-A7lG1y74.jpg)
1. 엔티티 그리기
- 왼쪽 패널의 도형 중 ‘ER’ 섹션 좌측의 삼각형 모양을 클릭합니다.
![notion image](https://attachments.datarian.io/production-c4a5fc47-f06b-4105-b6bf-09d95dc2a56e-Ms7XZjbXo02HHmhREfnW-vxcIgTQZFBmZ5MvFh2riHg.png)
- 엔티티, 또는 테이블을 그리기 위한 도형을 선택합니다.
ERD를 그리는 단계에 따라 선택하는 도형은 달라질 수 있어요. 저는 식별자 표기가 가능한 첫 번째 도형(Table 1)을 선택해 볼게요.
![notion image](https://attachments.datarian.io/production-891a3653-e964-40b9-ae00-e3674e01bc5b-xNjWtbgZcWxhzOpsZTBYdy7yEIuxRrfeeB9IguCmxsw.png)
- 이렇게 엔티티를 추가했다면, 상단의 ‘Table’ 텍스트를 더블 클릭하여 엔티티 이름을 적어주면 됩니다.
![notion image](https://attachments.datarian.io/production-b7156749-8db0-4c2e-8976-dc3739c7c10f-uAw2Rhb3F-_11Rt8Rj0EKsPMhNV1QeWl8gzXrSVGnEk.png)
2. 속성 그리기
- 속성은 가장 중요한 정보를 위에 표시해야 합니다. PK, FK, 그 외 속성 순서대로 적어주세요.
- 비슷한 특성은 서로 가까운 위치에 표시하는 것이 좋습니다. (ex. 연령, 성별과 같은 인구 통계학 정보)
- 보통 PK는 볼드체를 쓰고 밑줄을 그어 표시합니다. 우리가 위에서 선택한 도형(Table 1)에는 이 설정이 자동으로 적용되어 있어요.
[TIP] 속성 팁
![notion image](https://attachments.datarian.io/production-fb3a48ab-af43-4c8c-ab81-6576273ccf71-0BlMqhTyTRyNksj-p_PDAIg9DDN9eTR-sXoEz7abr6A.png)
- 속성의 순서를 변경하고 싶다면, 속성 오른쪽의
=
표시를 클릭 후 드래그하면 위치 이동이 가능해요.
![notion image](https://attachments.datarian.io/production-c818a5d2-6067-4075-ac53-86e387b75d77-zBCNKIT-mTdEdnrD2YP484uSsWLBG8OBAmGN0RhetXk.jpg)
- 속성을 추가하고 싶다면, 속성을 클릭 후
Ctrl(또는 Cmd) + D
를 눌러주세요. 엔티티 최하단으로 속성이 추가 되면서 자연스럽게 엔티티의 크기가 늘어납니다.
![notion image](https://attachments.datarian.io/production-10507cda-386e-480e-953e-55cd46ef80bb-btpTvM6x99mnKliWCpMJKApcPr9U0XuuMtw0HnQndqI.png)
- 속성을 삭제하고 싶다면, 속성을 클릭 후
Del
를 눌러주세요. 마찬가지로 속성이 삭제되면서 자연스럽게 엔티티 크기가 줄어들어요.
![notion image](https://attachments.datarian.io/production-a0ef255b-9e9c-4d56-8f31-8ad63f04b4c3-fwSkq4JBUGcBxfoiguyCFZc3yJ8hsX2T9W7q8z9sWHc.jpg)
- FK를 표기하고 싶다면, 앞의 공간을 더블 클릭 후 ‘FK’를 적어주세요.
![notion image](https://attachments.datarian.io/production-57b9204a-1ab5-4078-818e-142e463b0d79-QMJHw3yzC0ZJcEV5_gaxEFp5yggfEj29PDbascNkQj8.jpg)
3. 관계 그리기
- 관계를 그릴 엔티티 한 쪽 끝에 마우스를 올려주세요. 어디서 그려도 상관없지만, 초록색 원이 그려지는 곳에서 시작하면 더 편하게 그릴 수 있어요.
![notion image](https://attachments.datarian.io/production-4acd0acd-488f-44f5-af9d-1ddd78eab177-ApoN9YDjHOQpaWp4qN2Ot9bDUuwRdrqjvWCyf4jb1HM.jpg)
- 관계선을 연결할 엔티티로 드래그 합니다. 초록색 원이 그려지는 곳으로 드래그하면 더 편하게 그릴 수 있어요.
[TIP] 관계선의 모양
관계선을 그릴 때는 가급적 수직/수평의 직선을 사용해 주세요. 그리고 엔티티(테이블)이 많아질수록 관계선도 많아지기 때문에, 최대한 관계선이 서로 교차하지 않도록 그려주어야 가독성이 좋습니다.
![notion image](https://attachments.datarian.io/production-7e34fed6-0670-4ce6-9d32-1a75fe65bc49-VKOrkwimTnsPpsS3KzJN1NOxRZO1Gnt3ZunMfofYRWY.jpg)
- 관계선 클릭 후, 오른쪽의 서식 패널을 열어 관계선 모양을 수정할 수 있어요. 관계수와 선택성을 알맞게 표시해주세요.
![notion image](https://attachments.datarian.io/production-a1ce875e-3fda-432b-a0d5-dd7cb93be6eb-AM_purUvNsYu-8e-PV0U3MvwRatIXoumxso8KaSEPOs.jpg)
- 이렇게 각 엔티티 간의 관계를 모두 그려주면 ERD 완성입니다!
![notion image](https://attachments.datarian.io/production-0ce46b39-3bc3-4a8d-94ed-eb6f7554d631-XgTkaExbwItBRh2Z4RGGnY26zHBIftBMgHfzftRqGbE.png)
마무리
이렇게 ERD를 직접 그려보는 것까지 함께 해보았습니다. ‘알아두면 쓸데있는 데이터 모델링’ 시리즈 어떠셨나요? 시리즈 첫 글에서 선미님이 얘기한 것처럼, 이 시리즈는 관계형 데이터 모델링에 입문하시는 분들을 위해 쓰였어요. 데이터 모델링이 처음인 분들이 데이터 모델링을 쉽게 이해하는 데에 도움이 되었길 바랍니다.
데이터 분석가로서 일하면서, ‘내가 어떤 데이터를 분석하고 있는지 아는 것이 중요하구나’ 하는 걸 많이 배웠습니다. ‘이런 데이터겠지~’ 대충 생각하고 넘어갔다가 생각과 다른 데이터라는 걸 알고 다시 분석한 경우도 있었거든요. 올바른 분석 결과를 내기 위해서는 먼저 데이터를 정확히 이해하는 것이 중요합니다. 이번 시리즈에서 다룬 내용들을 알고 있으면, 내가 분석하는 데이터를 이해하는 데에 많은 도움이 될 거예요 :)
추천 자료
- 핵심 데이터 모델링 - 유동오