백엔드 개발 · 중급
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의 영속성 컨텍스트(Persistence Context)란 무엇이며, 1차 캐시의 역할은 무엇인가요?
- JPA에서 지연 로딩(Lazy Loading)과 즉시 로딩(Eager Loading)의 차이점과 사용 시 주의사항은?
- JPA의 더티 체킹(Dirty Checking)이란 무엇이며, 어떻게 동작하나요?
- JPQL과 QueryDSL의 차이점과 각각의 장단점에 대해 설명해주세요.
- @Transactional의 readOnly 속성은 어떤 역할을 하며, 성능에 어떤 영향을 주나요?
- JPA에서 상속 관계 매핑 전략(SINGLE_TABLE, JOINED, TABLE_PER_CLASS)의 차이점과 선택 기준은?