➡️ 1:1 단방향 연관관계
🖼️ 그림으로 이해

Tutor(1) ────▶ Address(1)
@OneToOne으로 연결되어 한쪽에서만 상대방을 참조하는 관계💻 코드 예시
@Entity
@Table(name = "tutor")
public class Tutor {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToOne
@JoinColumn(name = "address_id", unique = true) // UNIQUE 제약조건
private Address address;
}
Tutor가 Address를 참조Tutor 테이블에 address_id FK 컬럼이 생성됨⚠️ 주의
Address)에 FK를 두고 관리하는 건 JPA에서 지원하지 않음 ↔️ 1:1 양방향 연관관계
🖼️ 그림으로 이해

Tutor(1) ◀───▶ Address(1)
N:1 양방향과 비슷함Tutor가 가짐 (주인)Address는 mappedBy를 통해 읽기 전용으로 Tutor를 참조💻 코드 예시
@Entity
@Table(name = "address")
public class Address {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToOne(mappedBy = "address") // 읽기 전용
private Tutor tutor;
}
📚 대상 테이블에 외래 키 양방향

👉 즉, Tutor가 FK를 관리하고 Address는 단순히 참조만 함
💡 외래 키 위치 선택
1:1관계에서는 외래 키를 어느 쪽에 두어도 되지만,
선택에 따라 장단점이 달라짐
🔹 주 테이블(FK 보유)
→ 예: Tutor 테이블이 address_id를 FK로 가짐
✅ 장점
Tutor만 조회해도 Address 바로 접근 가능JOIN 줄어듦)❌ 단점
null 들어감 → 무결성 깨짐🔹 대상 테이블(FK 보유)
→ 예: Address 테이블이 tutor_id를 FK로 가짐
✅ 장점
Address 없으면 Tutor도 FK가 없음)❌ 단점
JOIN 필요)지연 로딩으로 설정해도 즉시 로딩됨 (중요 ✔️)📄 요구 사항 변경 시
→ 예: 한 Tutor가 여러 Address를 가질 수 있게 바뀐다면?
1:1 → UNIQUE 제약 조건만 제거하면 N:1 관계로 자연스럽게 변경 가능🧠 요약 정리
| 구분 | 단방향 1:1 | 양방향 1:1 |
|---|---|---|
| 🔗 참조 방향 | 한쪽만 참조 | 양쪽 모두 참조 |
| 🔑 연관관계 주인 | FK 보유한 쪽 | FK 보유한 쪽(Tutor) |
| 📂 FK 위치 | 주 테이블 or 대상 테이블 선택 가능 | FK는 주인이 관리, 반대쪽은 mappedBy |
| ✅ 장점 | 단순하고 직관적 | 양방향 탐색 가능, 유연성 ↑ |
| ❌ 단점 | 반대쪽 탐색 불가 | 관리 복잡, FK 위치 선택 중요 |
| ⚡ 실무 팁 | 보통 주 테이블에 FK 두는 방식 선호 | FK 주인은 반드시 한쪽으로만 관리 |