-
[회의] BackEnd 4차 회의Project/Extra 2024. 7. 24. 12:07
개요
일시 2024.07.21 (일) 주제 역할 분담 및 ERD 작성 3차 회의는 2차 회의 숙제 정리본 & 기획 Q&A라서 생략
Problems
1. 역할 보여주기
- (8/10)처럼 (현재 지원한 인원/모집 인원)을 보여줘야 한다
- 방법
- [Get] : 역할을 볼 때마다 지원 요청 개인 & 하청에서 role_id가 있는 record를 count 한다
- transactional read only
- [Post] : 지원 요청 | 취소 api가 들어올 때마다 count를 수정한다
- 지원수 증가 → count++
- 지원수 감소 → count--
- 동시에 신청 시 동기화 문제 발생
- [Get] : 역할을 볼 때마다 지원 요청 개인 & 하청에서 role_id가 있는 record를 count 한다
2. 타투 저장 방식
(얘는 조금 말이 많았다. 어떤 방식이 적합한지 모르겠어서..)
조건 : 한 회원이 여러 개의 문신을 할 수 있고, 문신한 위치 정보까지 기록되어야 한다.
기존에는 단지 문신 여부만 Boolean으로 결정하고 있었고, 문신 여부뿐 아니라 문신의 위치까지 저장해야 하기 때문에, List로 받거나 다른 테이블로 만드는 등 다른 방식이 필요할 것이라고 생각했다.
(1) Tattoo 테이블을 따로 만들고, MemberTattoo 테이블에 외래키로 참조하자
- Tattoo 테이블을 따로 만든다.
- Tattoo 테이블의 기본키(tattoo_id)를 MemberTattoo에서 일대다로 받는다.
- 장점
- 불필요한 데이터나 Null값 없이 필요한 데이터만 저장된다.
- 새로운 타투 위치가 생길 경우 Tattoo 테이블에 추가 및 수정만 해주면 되기 때문에 관리가 편하다.
- 단점
- 타투는 신체 부위에 하는 것이기 때문에 수정 가능성이 높지 않고, 그래서 2번째 장점(관리 원활)을 잘 살리기가 어려울 것이다.
- 연산 - 단순한 테이블보다 연산이 복잡함
- 저장
- 얼굴에 타투를 했다는 post request
- name : 얼굴을 findByName으로 Tattoo 탐색 & user_id를 통해 findById로 User 탐색
- MemberTattoo에 Tattoo와 User를 매핑
- MemberTattoo save
- 탐색
- 얼굴에 타투한 user 찾기
- findByName(얼굴)으로 Tattoo 탐색 & tattoo_id가 1인 MemberTattoo만 탐색
- MemberTattoo에서 getUser한 다음 얘를 List로 만듦
- return UserList
- 저장
- 기타 발생 → Tattoo에 새로운 레코드 추가하고 외래키 참고
(2) Tattoo 테이블을 따로 만들고, 신체 부위를 전부 attribute로 만든 다음 Boolean으로 다룬다.
- Tattoo 테이블을 따로 만든다.
- Tattoo 테이블이 User 테이블과 일대일 매핑
- 장점
- 테이블 개수가 하나로 합쳐지면서 join 연산이 불필요해 진다.
- 단점
- False는 필요 없는 데이터기 때문에 저장 공간 낭비가 심하다.
- 연산 - (탐색 1번)
- 저장
- 얼굴에 타투를 했다는 post request
- user_id를 통해 findById로 User탐색
- Tattoo 생성자를 만들 때 얼굴 field에 True 저장
- Tattoo save
- 탐색
- 얼굴에 타투한 user 찾기
- Tattoo 테이블에서 findByFace(True)인 것만 탐색해서 User 가져오기
- return UserList
- 저장
- 기타 발생 → 기타 attribute를 만들고, 그 안에 string으로 입력한 위치 저장
결론
- 타투는 신체기 때문에 우후죽순 늘어나지 않음, 그 외의 것도 string으로 받아서 저장 → 스키마 변경 가능성 낮음
- 일반적으로 MemberTattoo 레코드 수보다 Tattoo 레코드 수가 적을 것
- ex) user A - 얼굴, 가슴, 팔, 다리 타투
- MemberTattoo → record 4개
- Tattoo → record 1개
- 우선 (2) 방식대로 하기로 하고, 추후 문제 발생 또는 성능 비교 후 다시 결정
과제
- jwt 로그인에서 redis + refresh token + black list 사용 이유 조사
- 알람 기능 DB 조사
- table 수 vs record 수
'Project > Extra' 카테고리의 다른 글
[📋] dev_deploy 작성 flow (0) 2024.08.07 [📋] Jwt Token 저장 위치 - http header vs cookie (0) 2024.07.27 [📋] WebSocket(1) (0) 2024.07.17 [📋] MariaDB 연동 시도 (1) 2024.07.17 [📋] QR 구현 방안 생각해보기 (0) 2024.07.17