Book과 BookDetail을 @OneToOne으로 연결하여 1:1 연관관계를 구현하고, CRUD + PUT/PATCH API를 완성했다.
- 기본 정보(
Book)와 상세 정보(BookDetail)를 분리하여 목록 조회 시 불필요한 데이터를 가져오지 않도록 했다. - 외래키는
BookDetail에 두어 관계의 주인으로 설정했고,Book쪽에CascadeType.ALL을 적용해 저장/삭제가 함께 처리되게 했다. - 조회 시 N+1 문제를 방지하기 위해 Fetch Join JPQL을 작성했다.
- 수정은 PUT(전체)과 PATCH(부분)를 나누고, DTO를 분리해서 순환 참조를 방지했다.
@JoinColumn이 있는 쪽이 관계의 주인이고,mappedBy는 참조만 한다는 개념을 이해했다.FetchType.LAZY와 Fetch Join의 차이, 그리고 N+1 문제가 왜 발생하는지 알게 되었다.- PUT과 PATCH의 차이를 실제로 구현하면서 체감할 수 있었다.
- DTO 분리가 순환 참조 방지와 유효성 검증에도 필요하다는 걸 배웠다.