1. 문제점
기존의 게시판을 만들 때는 ERD를 매우 간단하게 작성할 수 있었다. 그러나 와디즈 사이트를 분석하면서 문제가 발생했다. 와디즈는 크라우드 펀딩 사이트로, 회원 가입 시 사용자에게 펀딩 모금자인 Maker와 펀딩 후원자인 Supporter라는 두 가지 역할이 기본적으로 부여된다. 이를 쇼핑몰에 비유하면, 회원이 별도의 설정 없이 구매자와 판매자 역할을 동시에 수행할 수 있는 구조다.
여기서 문제가 발생하는 이유를 자세히 설명하자면, 사용자가 펀딩 게시글을 생성하는 것이 구조적으로는 맞지만, 이렇게 할 경우 Maker와 Supporter의 역할이 명확하지 않아 구분하는 의미가 없어진다. Supporter는 단순히 펀딩 후원과 관련된 정보만을 가지고 있어야 하고, 해당 정보만을 보여줘야 한다. 그러나 위 ERD 구조대로라면, Supporter가 본인의 역할과는 무관하게 펀딩 모금 게시판까지 가지고 있는 형태가 되어버린다. 이로 인해 Maker와 Supporter에 애매르송한 문제가 발생한다.
2. 문제 원인
이 문제의 원인은 **사용자(User)**와 **역할(Role)**을 명확하게 분리하지 않은 DB 설계에 있다. 즉, User 테이블에서 Supporter와 Maker의 역할을 구분하지 않고, 모든 사용자에게 동일한 권한을 부여하면서 발생한 것이다. 역할을 구분하지 않으면, Supporter는 단순 후원자임에도 불구하고 Maker처럼 펀딩 게시글을 생성할 수 있는 권한을 가지게 된다.
3. 문제 해결 방안
이 문제를 해결하기 위해서는 User 테이블을 중심으로 Supporter와 Maker의 역할을 1:1 관계로 분리하는 설계가 필요하다. 즉, User 테이블은 모든 사용자에 대한 기본 정보를 저장하고, Supporter와 Maker 테이블은 각각의 역할에 따른 세부 정보를 관리하는 구조로 변경하는 방식이다. 따라서 펀딩 주최자, 후원자의 구분이 명확해진다.
위 ERD에서는 Supporter와 Maker의 역할을 User 테이블과 분리하여 각각 1:1 관계로 설정했다. 이를 통해 역할에 따른 권한을 명확하게 구분할 수 있다. 프로젝트 생성 시에는 user_id가 아니라 maker_id를 사용하여, 프로젝트와 Maker 역할을 구체적으로 연결함으로써 프로젝트 생성은 기본 사용자가 아니라 Maker 사용자가 펀딩 게시판 작성을 하고 데이터를 갖고 있을 수 있다.
만약 틀린 부분이 있으면 댓글 달아주세요.
4. 문제 해결 방안 수정(24/10/29)
오늘 팀원과 논의한 결과, 펀딩 사이트를 이용하는 사용자가 기본적으로 Supporter 역할을 갖도록 결정했다. 이에 따라 Supporter 테이블을 제거하기로 했다. 펀딩 사이트에서 Supporter가 차지하는 비중이 크고, Maker는 특정 사용자에게만 해당되기 때문에, 이 DB가 더 마음에 든다.
[결론] : DB 설계 이게 시작이고 배울 것이 많다. 모르면 외워.
'DB' 카테고리의 다른 글
[DB] erdcloud, Identifying/Non-Identifying + JPA, 주식별자 비식별자 (1) | 2024.10.30 |
---|---|
[Oracle] 테이블, 뷰, 프로시저, 함수 전체 삭제하기 (0) | 2024.10.27 |