사이드프로젝트/설계

[WagWagT] DB 설계하기(feat.drawio)

나는리지훈 2023. 9. 23. 17:16

개발하기 전에는 철저한 설계가 먼저 선행되어야 한다!

그래서 우선 간단한 기능을 추가할 예정이기 때문에 ERD 부터 그리고 ClassDiagram을 통해 API를 설계할 예정이다.

 

그리고 내가 생각한 최소 기능에 대한 1차 기획안이다.

1.회원가입/회원탈퇴가 가능 해야한다.
      - ID,PW,이름,이메일 정보만 받는다.
      - 회원탈퇴시 재가입 가능하다.
2. 로그인/로그아웃이 가능 해야한다.
     -  로그인 후 10분동안 동작이 없으면 자동 로그아웃 된다.
3. 로그인한 사람만 게시물을 작성할 수 있다.
4. 게시물에 대한 좋아요기능 또한 로그인한 유저만 가능하다.
5. MBTI테스트는 로그인하지않아도 가능하다.
6. 메인화면에 인기 게시물 10개씩 보여준다.
7. 메인화면에 최신 게시물 10개씩 보여준다.
8. 메인화면에 MBTI결과 TOP3를 보여준다.

우선 이렇게 만들어볼 계획이다!

 

 

1. ERD 툴 선정

ERD 툴을 찾아보다가 무료이고 일할 때 써봤던 툴이었던 drawio를 사용하기로 결정! 

 

2. ERD 작성방법

  • PK, FK, 일반 칼럼들을 구분하며 알아보기 쉽도록 한글 의미명을 적고 실제 칼럼명을 적는 방식으로 작성한다.
  • 핵심은 Entity(개체)Relationship(관계), Attribute(속성) 이다.

 

3. 기획안을 통한 키워드 추출

  • 회원
    • ID
    • PW
    • 이메일
    • 이름
  • 게시물
    • 제목
    • 내용
    • 좋아요 수
    • 저장
    • 인기게시물
    • 최신게시물
  • MBTI
    • 결과

 

흠.. 키워드를 잘 뽑아냈나 싶다 ㅎ

 

4. 키워드를 행위와 데이터로 나눈다.

행위 = 행위엔티티

데이터 = 실체엔티티

 

실체 엔티티란?

말 그대로 실제로 보이는 것을 나타내는 데이터를 관리하는 엔티티.

쉽게 말해 만질 수 있는 데이터면 실체 엔티티이다!

 

근데 내가 추출한 키워드엔 만질 수 있는게 없는데....

 

실체 엔티는 모델 구조적으로 최상위에 존재하기 때문에 중요하다!!

실체 엔터티 설계를 잘하면 모델의 근간이 튼튼해진다.

데이터 모델링 과정에서 실체 엔터티를 설계하는 데 가장 많은 시간을 투자해야 한다.

 

내가 추출한 실체 엔티티는 우선 이렇다.

 요구사항 분석을 하다보면 다대다관계가 존재하는데 위에서도 다대다 관계를 생각해볼 수 있다.

  • 한명의 회원은 여러 게시물을 쓸 수 있다.
  • 한개의 게시글에는 여러개의 좋아요가 생길 수 있다.

이렇게 있는것 같다.

MBTI는 가입하지 않은 유저도 가능 하기때문에 종속되지 않게 설계하였다.

 

5. 관계를 매핑한다.

엔티티간의 관계를 매핑해야한다.

관계는 엔티티 내 속성일 뿐이다.

그래서 관계선이 없어도 다른 엔티티 내에 속성을 가지고 있다면 관계가 형성된다.

 

 

이렇게 유저ID 와 게시글ID가 그 관계의 속성이다.

 

 

 

6. 식별관계와 비식별관계

관계를 매핑할 때 식별관계와 비식별관계를 알아두어야한다.

 

식별관계 = 부모 테이블의 기본키를 자식 테이블의 기본키(PK)로 설정하는 방식.

비식별관계 = 부모 테이블의 기본키를 자식 테이블의 외래키(FK)로 설정하는 방식.

 

1차 설계..

내가 설계한 위 관계는 모두 비식별관계이다.

 

현업에서는 보통 식별관계보다 비식별관계를 선호한다.

그 이유로는 구조 변경에 용이하기 때문이다. 

식별관계는 자식 엔티티가 늘어날 수록 주 키가 계속 쌓이기 때문에 구조를 쉽게 변경할 수 없다.

 

 

결론

우선 설계를 먼저 하는 습관을 들여야겠다.

전에 다이어그램을 책을 보면서 공부를 했는데 다 까먹었다..

다시 설계와 구조를 먼저 생각하는 연습을 하고 익숙해져나가야지!

 

우선 내가 생각한 기초 사이드 프로젝트 db는 점점 늘려가야지!

계속 추가하고싶은 기능이 늘어나는데,, 이거 먼저 해놓고 추가해가는 방식으로 가야지!

욕심부리지 말자

 

 

 

 

⭐참고

https://yeongunheo.tistory.com/entry/DB-%EC%84%A4%EA%B3%84%ED%95%98%EB%8A%94-%EB%B2%95-feat-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8%EB%A7%81

'사이드프로젝트 > 설계' 카테고리의 다른 글

[DDD란?] Domain Driven Design  (0) 2023.10.18