1. 프로젝트 개요

책 읽는 즐거움을 공유하고, 지식과 감상을 나누는 책 덕후들의 커뮤니티 서비스 주요 기능 : 대시보드, 알림 관리, 사용자 관리, 도서 관리, 리뷰 관리, 댓글 관리


2. 담당한 작업

DB 관리 : ERD 통합 리뷰 관리 구현 : 도메인 설계 및 CRUD, API 구현, 고도화

정보

등록

수정

삭제

목록 조회

PPT 제작 팀원 2명 PR 리뷰 담당


3. 기술적 성과

사용한 기술 스택

주요 기술 기능


4. 문제점 및 해결 과정

MapStruct의 @InheritConfiguration를 사용해 매핑을 재사용하던 중 도서랑 유저 정보가 제대로 매핑이 되지 않는 문제가 발생했습니다. 매개변수가 2개 이상인 경우에는 MapStruct는 source parameter가 여러 개가 되므로 어떤 객체에서 값을 가져올지 지정하지 않아서 생긴 문제였습니다. 그래서 각 필드를 명시적으로 지정하는 방식으로 해결했습니다.

리뷰를 등록하고 삭제한 뒤 다시 리뷰를 작성이 안되는 문제가 발생했습니다. DDL 작성할 때 사용자는 책별 1개의 리뷰만 작성하도록 하기 위해서 책ID, 유저ID를 복합 유니키로 한 것이 문제였습니다. 물리 삭제일 경우 문제가 없지만 논리 삭제일 경우에는 관련 정보가 남아있어 DB에서 이미 있는 정보로 인식해서 재등록이 안되는 것이었습니다. 그래서 복합 유니키를 제거하고 복합키를 deleted_at이 null 인 경우만 적용이 되도록 조건부 인덱스를 적용했습니다. 로컬에서는 실행이 됐지만 테스트코드에서는 에러가 떴습니다. PostgreSQL에는 조건부 인덱스가 적용이 되지만 H2를 사용하는 테스트코드에서는 해당 기능을 지원하지 않아 생긴 문제였습니다. 그래서 복합 유니크 키를 제거하고 서비스에서 BookId, UserId의 deleteAt이 null일 때는 리뷰 생성을 막는 방법으로 바꿔서 해결했습니다.


5. 협업 및 피드백

구현한 코드를 설명하면서 생각하지 못한 부분들을 많이 알게 되었습니다. 또한 새로운 CodeRabbit, Flyway, Caffeine 등 다양한 기술과 도구를 사용해보면서 새로운 경험을 할 수 있었습니다. https://github.com/sb08-deokhugam-redhorse/sb08-deokhugam-teamRedHorse/pull/98 https://github.com/sb08-deokhugam-redhorse/sb08-deokhugam-teamRedHorse/pull/90