2023. 2. 18. 09:40ㆍ프로젝트/8주차 실전 프로젝트
4줄 요약
문제 확인 : 여러 테이블의 중간 테이블(연결 테이블)의 사용으로 데이터 삭제시 문제 발생(외래키 참조)
문제 해결
- 중간 테이블의 데이터를 먼저 삭제하고 다음 해당 테이블의 데이터 삭제
- 유저 탈퇴의 경우, 유저의 경험에 문제가 생길 수 있다는 문제가 제기됨
- 따라서 데이터를 삭제하기 보다는, 탈퇴된 유저 및 Null 처리를 통해 데이터를 변경하는 쪽으로 합의!
ERD 설계 도중 발견한 이슈로 M:N 관계를 표현하는 연관 테이블에 관한 내용이다.
M:N 관계라는 것은 양쪽 엔티티 모두에서 1:N 관계를 가지는 것으로,
두 테이블의 대표키를 컬럼으로 갖는 연결 테이블을 생성해서 관리하는 것으로 구현한다.
구현 예시 - UserGoals

Users / Goals / Accounts / Balance Table의 중간 테이블인 UserGoals를 통해 구현했다.
UserGoals는 유저가 참가한 목표에 대한 리스트와 직접 입력 계좌에 관한 데이터를 관리하는 역할을 담당하는 Table이다.
Users / Goals의 중간 테이블인 Reports Table 또한 존재한다.
위 테이블은 유저가 목표를 신고하는 기능을 구현하는 데 사용한 Table이다.
이러한 디자인 초이스로 User / Goals / Accounts / Balance Table의 데이터를 삭제할 수 없는 문제가 발생하였다.
(UserGoals Table이 Foreign Key로 참조하고 있기 때문에)
다음의 문제는 직접 로직을 통해 해결했다.
목표 탈퇴 UserGoals의 row 삭제 -> Goals의 상태 변화(참가자 수)
그러나 직접적인 문제가 생긴 것은 회원 탈퇴, 계좌 삭제 시 생겼다.
회원 탈퇴를 하게된다면, 해당 유저가 참가한, 혹은 참가했던 모든 데이터에 대해서 삭제가 필요했다.
물론 위의 해결 방법 처럼 UserGoals의 데이터를 삭제하고 각각의 Accounts, Balances Table을 삭제하는 것으로도 구현이 가능했으나, 목표가 진행 중이거나 완료했던 데이터에 대해 결원이 생기고 서비스를 경험하는 것에 문제가 생길 수 있다고 판단 되었다.
(ex. 처음에는 20명으로 시작한 목표가 점점 유저 탈퇴로 인해 5명이되면 처음부터 참가한 사람이 적어 보이는 문제로 서비스 경험에 도움이 안될 것이다. 물론 극단적인 예시이다.)
따라서 데이터를 삭제하기 보다는 해당 유저의 데이터 값을 Null, 혹은 탈퇴한 유저입니다 처리를 통해 데이터를 남기는 것으로 결정했다.
'프로젝트 > 8주차 실전 프로젝트' 카테고리의 다른 글
| 2. 트러블 슈팅 -DTO Data & Data Type Transform- (0) | 2023.02.18 |
|---|---|
| 2. 트러블 슈팅 -소셜 로그인 OAuth 2.0- (0) | 2023.02.18 |
| 1. 기술 스택 선정에 대한 고찰 -5편 그 외 기술, 구현되지 못한 기술- (0) | 2023.02.18 |
| 1. 기술 스택 선정에 대한 고찰 -4편 유저 인증- (0) | 2023.02.18 |
| 1. 기술 스택 선정에 대한 고찰 -3편 웹 서버- (0) | 2023.02.18 |