| 자바(Java) | 데이터베이스(DB) |
|---|---|
| 클래스(Class) | 테이블(Table) |
| 객체(Object) | row(행) |
| 필드(Field) | column(컬럼) |
| 참조(Reference) | 외래키(FK) |
| 컬렉션(List/Set) | one-to-many 관계 |
자바는 객체지향 언어이고,
DB는 관계형 구조라서 구조 자체가 완전히 다르다.
그래서 개발자가 이런 걸 직접 맞춰야 했다:
이걸 매번 수작업으로 하니까 복잡하고 버그도 많았음.
그래서 등장한 게 JPA의 “매핑” 기능.
👉 자바 객체(엔티티)를 관계형 DB 테이블과 매칭시키는 작업
즉, “이 자바 클래스는 DB의 어떤 테이블과 연결되고, 어떤 필드는 어떤 컬럼이다”
이걸 JPA에게 알려주는 것.
이걸 위해 사용하는 것이 바로 JPA 매핑 어노테이션.
JPA 매핑은 크게 4가지로 구성됨:
@Entity
@Table(name = "member")
public class Member { ... }
@Entity → JPA가 관리하는 객체@Table → 어떤 테이블과 매핑할지 지정@Column(name = "username")
private String username;
| 자바 | DB |
|---|---|
| String username | username VARCHAR |
주요 기능:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
JPA는 다양한 PK 생성 전략 제공:
DB에서 PK를 자동 증가(AUTO_INCREMENT)
시퀀스를 사용해 PK 생성
DB dialect에 따라 자동 결정
자바는 객체 참조하고,
DB는 외래키(FK)로 참조한다.
이 차이를 해결하는 것이 연관관계 매핑.
자바 방식
class Member {
Team team; // 객체 참조
}
DB 방식
member.team_id (foreign key)
이 불일치를 해결하려면 아래 어노테이션이 필요:
| 매핑 | 어노테이션 |
|---|---|
| 다대일 | @ManyToOne |
| 일대다 | @OneToMany |
| 일대일 | @OneToOne |
| 다대다 | @ManyToMany |
예:
@ManyToOne
@JoinColumn(name = "team_id")
private Team team;
→ 필요할 때 연관된 객체 자동 조회 (지연 로딩)
→ 연관 객체만 넣으면 JPA가 FK를 알아서 저장
→ INSERT/UPDATE/SELECT 자동 생성
→ 매핑으로 통합
DB 생각 안 하고 객체만 생각해도 됨.
개발자는 비즈니스 로직에 집중.
컬럼 이름 바꿔도 매핑만 수정하면 끝.
JOIN, FK 관리, N+1 문제 등 자동 최적화 가능.
DB를 MySQL → Oracle로 바꿔도 코드 거의 그대로 사용 가능.
JPA 매핑이란, 자바 객체와 DB 테이블의 구조(필드·컬럼·PK·연관관계)를 일대일로 연결하여, JPA가 SQL 생성·조회·관리까지 자동으로 처리하도록 하는 기술이다.