패스잇
백엔드 개발 · 중급

JPA의 @ManyToOne, @OneToMany 관계에서 양방향 매핑 시 주의사항은 무엇인가요?

힌트 · 연관관계의 주인, 편의 메서드, 무한 루프 방지를 생각해보세요.

순환참조StackOverflowErrorJSON 직렬화영속성 컨텍스트cascade

모범답안

JPA에서 @ManyToOne, @OneToMany 양방향 매핑 시 주의할 점은 연관관계의 주인 설정입니다. 한쪽은 주인이 되어야 하고, 주인만이 데이터베이스에 반영됩니다. 주인이 아닌 쪽은 mappedBy 속성을 사용해 주인을 지정해야 합니다.

또 다른 주의사항은 순환 참조 문제입니다. A가 B를 참조하고, B가 다시 A를 참조하면 toString(), equals(), hashCode() 구현 시 StackOverflowError가 발생하거나 JSON 직렬화 시 무한 루프에 빠질 수 있습니다. 이를 방지하기 위해 한쪽에서만 참조하거나, @JsonIgnore 등을 사용해야 합니다.

마지막으로, 객체 그래프의 일관성을 유지하기 위해 편의 메서드를 사용하는 것이 좋습니다. 예를 들어, Order에 Product를 추가하는 메서드를 만들어서 양쪽 연관관계를 한 번에 관리하는 것이죠. 영속성 컨텍스트와 데이터베이스의 불일치를 막을 수 있습니다.

읽었다면, 이제 직접 답해볼 차례예요

패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.

함께 보는 JPA / ORM 면접 질문

← JPA / ORM 면접 질문 전체 보기