본문 바로가기

면접준비

JPA 엔티티 간 연관관계 매핑에 대해서 설명해 주세요.

JPA에서 엔티티 간 연관관계 매핑은 객체 지향적인 설계를 데이터베이스 구조에 반영하는 중요한 개념입니다.

가장 기본적인 연관관계로는 일대일(OneToOne), 일대다(OneToMany), 다대일(ManyToOne), 다대다(ManyToMany) 관계가 있습니다.

일대일 관계는 @OneToOne 어노테이션을 사용합니다. 예를 들어, 한 사람이 하나의 주민등록증만 가질 수 있는 경우 이 관계를 사용할 수 있습니다.

일대다 관계는 @OneToMany 어노테이션으로 표현합니다. 한 부서에 여러 직원이 속하는 경우가 이에 해당합니다. 이 때 반대쪽에는 보통 @ManyToOne을 사용하여 다대일 관계를 표현합니다.

다대다 관계는 @ManyToMany 어노테이션을 사용합니다. 학생과 과목의 관계처럼 양쪽 모두 여러 개의 관계를 가질 수 있는 경우에 사용합니다. 하지만 실제로는 중간 테이블을 이용한 두 개의 일대다 관계로 풀어내는 것이 일반적입니다.

연관관계의 주인을 정하는 것도 중요합니다. 양방향 관계에서는 외래 키를 관리하는 쪽이 주인이 되며, @JoinColumn 어노테이션을 사용합니다. 반대쪽에는 mappedBy 속성을 사용하여 주인을 지정합니다.

cascade 속성을 이용하면 연관된 엔티티의 상태 변화를 함께 전파할 수 있습니다. 예를 들어, CascadeType.ALL을 지정하면 부모 엔티티의 모든 작업이 자식 엔티티에도 적용됩니다.

fetch 전략도 중요한 개념입니다. EAGER는 연관된 엔티티를 함께 조회하고, LAZY는 실제 사용 시점에 조회합니다. 성능 최적화를 위해 적절한 전략을 선택해야 합니다.

@JoinColumn을 사용하여 외래 키 컬럼의 이름을 지정할 수 있으며, @JoinTable을 사용하면 다대다 관계에서 중간 테이블의 설정을 상세히 제어할 수 있습니다.

이러한 다양한 매핑 방법을 통해 객체 모델과 데이터베이스 모델 간의 차이를 효과적으로 해결할 수 있습니다. 상황에 맞는 적절한 연관관계 매핑을 선택하는 것이 중요합니다.