[웹 서비스 시작부터 끝까지] #1 모델링 (2) 데이터 모델링

Jaeyoo (유재형)·2022년 3월 10일
0
post-thumbnail
post-custom-banner

업무 파악 ➡️ 개념적 모델링 ➡️ 논리적 모델링 순으로 진행해보겠다.

물리적 모델링은 구현에서 해보고 필요하면 역정규화도 해볼 예정이다.


1. 업무 파악


  • 업무 파악을 그냥 글로만 적기에는 생각이 잘 안나서 UI를 먼저 그려보았다.

  • UI에서도 등록 부분을 보면 엔티티와 속성, 관계를 파악하기 쉽다.

    UI는 간단하게 OvenApp이라는것을 사용했다.
    OvenApp

1. 메인 화면
: 스타트업의 정보를 한눈에 볼 수 있는화면이다.

2. 기업 세부 화면
: 각 기업의 세부 사항들을 볼 수 있는 화면이다.

3. 기업 등록 화면
: 관리자가 스타트업을 등록하는 화면이다.

4. 기업 세부 정보 등록 화면
:관리자가 기업 세부 화면을 등록하는 화면이다.

➡️ 이렇게 UI를 작성하면 업무 파악하기가 수월하다.


2. 개념적 데이터 모델링


  • 위에 만든 UI에서 엔티티를 찾아서 E-R 다이어그램을 그리면된다.
  • 특히 생성 부분에서 엔티티가 잘 드러난다.
  • 엔티티는 사각형, 속성은 타원, 관계는 마름모로 표현하면된다.
  • 일대일, 일대다, 다대다 관계도 표현해준다.

    E-R 다이어그램 그리는건 draw.io 를 이용했다.
    https://www.draw.io/

ERD

[회원], [회사], [회사 세부], [회사 성장] 이라는 엔티티가 있다. 엔티티끼리는 관계를 맺고있다.

  • [회원]과 [회사]는 <관심>이라는 다대다 관계
  • [회사]와 [회사 성장]은 <성장성>이라는 일대일 관계
  • [회사]와 [회사 세부]는 <세부>라는 일대일 관계

이렇게만 해도 한눈에 프로젝트의 기능을 한눈에 볼 수 있다.


3. 논리적 데이터 모델링


프로젝트에서는 관계형 데이터베이스를 사용하려고한다.
논리적 데이터 모델링에서는 위에서 만든 ERD를 참고해 관계형 데이터 모델로 전환하면된다.

ERD에서 관계형 데이터 모델로 전환하는데는 매핑룰이 있다.

  • Entity → Table
  • Attribute → Column
  • Relation → PK, FK

관계형 데이터 모델을 그리는 툴은 ERD Cloud를 사용했다.
https://www.erdcloud.com

데이터 모델링을 이번에 처음 해봐서 테이블이 몇개 없는데도 어렵게 느껴졌다.
그래도 어떻게 하면 성능이 좋을지, 정규화가 되었는지 고민해보면서 모델링을 해보았다.

  • <관심> 관계는 다대다 관계이기 때문에 연결테이블이 필요하다.
  • INTEREST라는 테이블을 생성해 MEMBER 와 COMPANY를 연결해 주었다.
  • 기업 세부사항은 COMPANY_DETAIL 이라는 테이블을 생성했다.
    (이유는 세부사항은 정보가 많기 때문에 기업 조회시 한 테이블에 있으면 성능에 영향 줄 것 같아서..)
  • GROTH는 기업 세부 사항에서 기업의 성장세를 보여주기 위해 테이블을 생성했다.

4. 팀원과 비교 후 수정


모델링을 각자 하고나서 서로 공유해보았다.

팀원

내것과는 많이 달라보인다.
프로젝트에 대한 얘기를 중간중간에 많이 했는데도 서로 이해하고있는 부분이 달라서 놀랐다.
의사소통이 얼마나 중요한지 깨닫게된다.. 친구랑 해도 다르게 이해하는 부분이 생기는데 실제 업무를 하게되면 어떻게 될지 궁금하다

최종 모델링

  • 모든 테이블에는 인덱스 id를 넣기로 결정
  • 투자액수에 따른 투자 단계 테이블 생성하기로함

ERD Cloud에 팀원을 초대하는 기능이 있어서 앞으로는 이곳에 변경사항들을 같이 관리하기로했다.

모델링을 다하고 구현을 하던중에 아직은 투자 액수에따른 투자 라운드의 기준이 정확하지 않다는것을 알게되었다.
참고 : https://www.thebell.co.kr/free/content/ArticleView.asp?key=202104012122449200101021&lcode=00
Stage 테이블을 삭제하고 ENUM으로 대체하기로 했다.

profile
기록과 반복
post-custom-banner

0개의 댓글