Jiny
250130 본문
1월 동안 스프링부트 프로젝트를 3개 정도 개발을 해봤는데,
그냥 막 적으니까 아무래도 이대로는 안 되겠다는 생각이 들더라고...
보통 프로젝트를 할 때 백엔드 아키텍처, 데이터베이스 테이블을 먼저 설계하고 개발을 시작한다고 하는데
나는 냅다 인텔리제이를 켜고 무작정 개발을 시작했으니...
코드가 늘어날 수록 복잡해지고 꼬이는 기분이라서 이번에는 처음부터 천천히 설계를 다 하고 개발을 하기로 했다.
그런데 문제는 데이터 베이스 설계 방법을 모른다!
그것만 모르는 게 아니라 프로젝트가 어떻게 돌아가야 정상적인 건지도 모른다. ㅋㅋㅋㅋㅋㅜㅜ
그렇지만 이제부터라도 공부하면 되는 거니까~
ERM(Entity-Relationship Model)은 데이터베이스를 설계할 때 엔티티(Entity), 관계(Relationship), 속성(Attribute) 간의 구조를 시각적으로 표현하는 모델이다.
ERM의 주요 개념은 엔티티, 속성, 관계, 카디널리티가 있는데
이 중에서 카디널리티란 엔티티 간에 몇 개의 인스턴스가 서로 연결되는 지에 대한 표현이다.
One to One, One To Many, Many To Many 등이 있는데,
One to One은 1:1로 연결되는 개념으로
One To Many는 1:N으로 연결되는 개념으로 하나의 유저가 여러 개의 포스트를 작성한다.
Many To Many는 유저가 여러 개의 그룹에 속할 수도 있고, 하나의 그룹에 여러 명의 유저가 속한다.
일단 해봐야 이해할 수 있을 것 같아서
독서 모임 서비스 기획 내용을 기반으로 ERD 설계라는 걸 해보려고 했다.
찾아보니까 사이트도 여러 개가 있긴 한데, 사용하기 편리하고 무료인 ERD Cloud를 선택했다.
ERDCloud
Draw ERD with your team members. All states are shared in real time. And it's FREE. Database modeling tool.
www.erdcloud.com

일단 이게 오늘 만들어 본 ERM이다.
스프링 부트 프로젝트에서 Domain 폴더 안에 들어가는 Entity 클래스들의 구성 요소만 집어넣고 화살표를 그리면 끝나는 줄 알았는데
생각보다 어렵더라고... 이게 맞는지도 모르겠다.
틀렸으면 앞으로 천천히 공부하면서 고쳐보겠음!
유저는 여러 개의 그룹을 가질 수 있고, 그룹은 여러 명의 유저를 가질 수 있으므로
이 관계는 중간에 맵핑 테이블을 하나 만들어서 각각의 식별자를 외래키로 가져올 수 있도록 했다.
세션은 차시 별 독서 토론을 할 수 있도록 구분하는 단위이다. 세션 1은 첫 번째 독서 모임이라는 뜻이다.
그룹 당 여러 번의 독서 토론을 할 수 있어야 하므로 OneToMany의 관계이고,
세션 당 한 권의 책에 대해 토론하게 되므로 OneToOne의 관계이다.
*그런데 방금 생각해보니까 등록한 책을 여러 그룹에서 사용하게 된다면 OneToOne이 아닐 수도....? 일단 더 고민해봐야지...
세션에서 그룹의 멤버들이 여러 개의 발제문을 작성하게 될 것이고,
힌 개의 발제문에 대한 의견도 여러 개가 달릴 것이다.
댓글은 의견에도 달릴 수 있고, 대댓글의 형태로 댓글에도 달릴 수 있다.
그리고 발제문과 의견, 댓글은 유저가 작성하는 것이므로 user_id를 외래 키로 가져온다.
일단 오늘은 여기까지... 차차 공부하면서 더 수정하고 추가해보도록 해야겠다.