22.05.09 - 22.05.12 WIL JPA 기초 개념

Seunghan·2022년 5월 12일
0

WIL

목록 보기
2/2

Spring Frameworks를 활용한 데이터 레이어(RDB)의 접근 방법 4가지

  1. JDBC - JDBC API를 사용하여 데이터 계층과 통신
  2. JDBC Template - JDBC를 사용했을 떄의 반복적인 작업을 대신 해줌
  3. Mybatis(QueryMapper) - 자바 코드와 쿼리를 분리
  4. JPA(ORM) - 객체와 RDBMS의 불일치 해결, 생산성 향상

Java의 객체와 관계형 테이블의 패러다임이 불일치해서 개발자는 객체지향적으로 코드를 작성하기 위해 무수히 많은 SQL 쿼리를 짜 왔다.

JPA는 이러한 고충을 해결해주며 생산성을 향상시켜주고, 좀 더 객체지향적으로 개발을 진행 할 수 있도록 도와준다. 그만큼 처음 배울 때 어려우니 확실하게 알아놓고 사용하도록 하자

JPA(Java Persistence API)

JPA는 자바 진영의 ORM 기술 표준으로, 인터페이스의 모음이다.

ORM(Object-relational mapping) 기술
즉 객체는 객체대로 설계하고, 관계형 데이터베이스는 관계형 데이터베이스 대로 설계하도록 도와주는 기술

JPA의 구현체는 Hibernate, EclipseLink, DataNucleus 가 있다.

JPA의 장점

객체와 RDB 간의 패러다임 불일치 해결

  • 객체의 상속을 알아서 해결해줌
  • 객체의 참조를 통해 연관관계를 저장 가능
  • 객체 그래프 탐색 가능
  • 동일한 트랜잭션에서 조회한 엔티티는 같음을 보장

성능 최적화

  • 1차 캐시와 동일성(identity) 보장
  • 트랜잭션을 지원하는 쓰기 지원(transactional write-behind)
  • 지연 로딩(Lazy Loading)

연관관계 매핑

JPA를 공부할 때 가장 중요하게 봐야 할 것이 2가지가 있다

  1. 영속성 컨텍스트(Persistence Context)
  2. 연관관계 매핑

이번 글에서는 연관관계 매핑에 대해서 아주아주 간략하게 살펴보겠다.

다중성

연관관계에는 다음과 같은 다중성이 있다.

  • 다대일(N : 1)
  • 일대다(1 : N)
  • 일대일(1 : 1)
  • 다대다(N : N)

실무에서 다대다(N : N)을 사용하지 말아야 한다!

1 : N, M : 1 관계로 풀어서 테이블을 만들자

방향

테이블은 외래 키를 사용해 조인을 사용해서 양방향으로 조회가 가능하기 때문에, DB에는 방향의 개념이 없다.

그러나 객체의 경우, 참조용 필드를 가지고 있는 객체만 연관된 객체를 조회할 수 있으므로 방향의 개념이 존재하며, 객체 관계에서 한 쪽만 반대쪽을 참조하는 관계를 단방향, 양 쪽 모두 서로를 참조하는 관계를 양방향이라고 한다.

실무에서는 일단 단방향으로 관계를 설정 한 뒤 나중에 필요할 때 양방향 관계를 추가하도록 하자.

연관관계의 주인

객체에서 양방향 관계로 매핑하면 A -> B, B -> A, 두 곳에서 서로를 참조하므로 연관관계를 관리할 수 포인트는 두 곳이 된다.

하지만 위에서 확인한 것처럼 객체와 DB의 패러다임은 다르다. 데이터베이스는 외래 키(FK) 하나로 두 테이블이 연관관계를 맺는다.

따라서 JPA는 두 객체 중 하나를 정해서 외래 키를 관리하게 만든다. 여기서 외래 키를 관리하는 객체를 연관관계의 주인이라고 한다. 보통 DB에서는 1:N 의 관계일 때 N에 외래키를 두게 된다!

주의할 점은 외래 키를 관리하는 연관관계의 주인만이 외래 키를 변경할 수 있으며, 주인이 아닌 곳은 읽기만 가능하다.

객체와 DB가 다른 만큼 각각의 특성에 맞게 잘 매핑시켜주는 것은 매우 중요하다! 각각의 특징을 잘 이해하고 사용하도록 하자!

관련 Post

[JDBC] JDBC, JPA/Hibernate, Mybatis의 차이 - Heee's Development Blog

Reference

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

profile
주니어 백엔드 개발자입니다!

0개의 댓글