프로젝트 구현/리얼 월드

2. ER 다이어그램 작성

LeeJerry 2022. 2. 20. 16:49

 프로젝트를 구현에 앞서 엔티티들은 어떤 속성들을 가지고 있는지, 어떤 연관 관계가 있는지 먼저 파악하는 것이 중요하다. 엔티티들의 구조와 관계를 명확히 설계하면 스프링 / DB 단에서 도메인 객체 / 컬럼과 직접적으로 매핑시킬 수 있으며 엔티티들을 일관성있게 사용할 수 있기 때문이다.

 

엔티티들의 관계(Entity Relationship)와 특성을 파악하기 위해, ER 다이어그램(Entity Relationship Diagram)을 그려보자.

 

앞서 추출된 엔티티는 총 6가지이며

- 사용자(User)

- 게시글(Article)

- 댓글(Comment)

- 선호(Favorite)

- 팔로우(Follow)

- 태그(Tag)

 

리얼 월드 response 포맷과 API 스펙을 바탕으로 각 엔티티들의 애트리뷰트를 추출할 수 있고, 이렇게 추출된 애트리뷰트 및 엔티티의 관계는 다음과 같이 간단히 표현할 수 있다.

 

 



여기서 엔티티 관계의 카디널리티를 조금 더 명확하게 표현하기 위해 크로우즈 핏 노테이션을 적용하고, 애트리뷰트에 데이터 타입, 식별자 등을 추가하면 ERD가 완성된다.

 

 

 

+ Favorite 엔티티의 status 필드 같은 경우는, response 포맷에는 명시되어 있지는 않았지만 delete 시 성능을 올리기 위해 추가하였다. 좋아요 취소하는 작업은 빈번히 일어날 것 같아서, 단순히 favorite 테이블의 row를 삭제하는 식으로만 구현해 버리면 잦은 delete 쿼리로 인한 fragment 문제를 일으킬 수 있어(https://developpaper.com/does-mysql-delete-and-update-affect-performance/), status 필드를 추가하고 좋아요 취소된 row는 deleted 표시를 해 주는 방식을 사용할 것이다.

+ 데이터 타입으로 CHAR과 VARCHAR를 혼합하여 사용하고 있는데, 유저 이름 / 이메일 등 길이가 어느정도 고정되어 있고 한번 지정하면 거의 변하지 않는 타입을 CHAR 타입으로 지정하였다.