Java의 객체와 관계형 테이블의 패러다임이 불일치해서 개발자는 객체지향적으로 코드를 작성하기 위해 무수히 많은 SQL 쿼리를 짜 왔다.
JPA는 이러한 고충을 해결해주며 생산성을 향상시켜주고, 좀 더 객체지향적으로 개발을 진행 할 수 있도록 도와준다. 그만큼 처음 배울 때 어려우니 확실하게 알아놓고 사용하도록 하자
JPA는 자바 진영의 ORM 기술 표준으로, 인터페이스의 모음이다.
ORM(Object-relational mapping) 기술
즉 객체는 객체대로 설계하고, 관계형 데이터베이스는 관계형 데이터베이스 대로 설계하도록 도와주는 기술
JPA의 구현체는 Hibernate, EclipseLink, DataNucleus 가 있다.
JPA를 공부할 때 가장 중요하게 봐야 할 것이 2가지가 있다
이번 글에서는 연관관계 매핑에 대해서 아주아주 간략하게 살펴보겠다.
연관관계에는 다음과 같은 다중성이 있다.
실무에서 다대다(N : N)을 사용하지 말아야 한다!
1 : N, M : 1 관계로 풀어서 테이블을 만들자
테이블은 외래 키를 사용해 조인을 사용해서 양방향으로 조회가 가능하기 때문에, DB에는 방향의 개념이 없다.
그러나 객체의 경우, 참조용 필드를 가지고 있는 객체만 연관된 객체를 조회할 수 있으므로 방향의 개념이 존재하며, 객체 관계에서 한 쪽만 반대쪽을 참조하는 관계를 단방향, 양 쪽 모두 서로를 참조하는 관계를 양방향이라고 한다.
실무에서는 일단 단방향으로 관계를 설정 한 뒤 나중에 필요할 때 양방향 관계를 추가하도록 하자.
객체에서 양방향 관계로 매핑하면 A -> B, B -> A, 두 곳에서 서로를 참조하므로 연관관계를 관리할 수 포인트는 두 곳이 된다.
하지만 위에서 확인한 것처럼 객체와 DB의 패러다임은 다르다. 데이터베이스는 외래 키(FK) 하나로 두 테이블이 연관관계를 맺는다.
따라서 JPA는 두 객체 중 하나를 정해서 외래 키를 관리하게 만든다. 여기서 외래 키를 관리하는 객체를 연관관계의 주인이라고 한다. 보통 DB에서는 1:N 의 관계일 때 N에 외래키를 두게 된다!
주의할 점은 외래 키를 관리하는 연관관계의 주인만이 외래 키를 변경할 수 있으며, 주인이 아닌 곳은 읽기만 가능하다.
객체와 DB가 다른 만큼 각각의 특성에 맞게 잘 매핑시켜주는 것은 매우 중요하다! 각각의 특징을 잘 이해하고 사용하도록 하자!
[JDBC] JDBC, JPA/Hibernate, Mybatis의 차이 - Heee's Development Blog