JPA와 영속성 컨텍스트

마라탕천재 ㅣ 2024. 8. 19. 14:30

0. ORM 이란?

ORM은 데이터베이스의 테이블과 자바 객체를 연결해주는 기술이다.

👉 ORM의 정의 글 보러가기

 

 

1. JPA란?

JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준이다. ORM이 객체와 관계형 데이터베이스의 매핑을 위한 일반적인 개념이라면, JPA는 이를 자바 애플리케이션에서 구현하기 위한 구체적인 명세를 제공한다.

JPA 자체는 실제 구현체가 아닌, ORM을 구현하는 방법과 원칙을 정의한 인터페이스의 모음이다. 

JPA는 내부적으로 JDBC를 사용하지만, 개발자가 직접 SQL을 작성할 필요가 없게 해준다. 개발자가 JDBC를 직접 사용할 경우, SQL에 의존적인 코드를 작성하게 되어 개발 효율성이 떨어지는 문제가 있다. JPA는 이러한 문제를 해결하기 위해:

  1. 객체 중심의 개발을 가능하게 하고,
  2. 적절한 SQL을 자동으로 생성하며,
  3. 데이터베이스 조작을 추상화하고,
  4. 객체와 테이블을 자동으로 매핑한다.

 

 

2. 하이버네이트

JPA 기반의 구현체는 대표적으로 3가지가 있는데, 그 중 가장 많이 사용되는 것이 하이버네이트 이다.

하이버네이트는 JPA의 대표적인 구현체 중 하나로, 가장 널리 사용되는 자바 ORM 프레임워크이다.

높은 성능과 안정성을 제공하며, 다양한 데이터베이스를 지원한다. 하이버네이트는 효율적인 캐싱 메커니즘과 지연 로딩 기능을 통해 애플리케이션의 성능을 최적화한다.

 

 

3. 영속성 컨텍스트

영속성 컨텍스트(Persistence Context)는 어플리케이션과 데이터베이스 사이에서 엔터티와 레코드의 괴리를 해소하는 기능과 객체를 보관하는 기능을 수행한다.

쉽게 말해, JPA가 관리하는 '엔터티들의 임시 저장소'이다. 이는 마치 프로그램과 데이터베이스 사이에 있는 중간 저장소라고 생각하면 된다. 이 저장소는 데이터베이스에 저장될 객체들을 임시로 보관하고 관리한다.

영속성 컨텍스트의 주요 역할은 다음과 같다:

  1. 객체를 임시로 저장한다.
  2. 객체의 변경을 감지하고 필요할 때 데이터베이스에 반영한다.
  3. 같은 데이터를 여러 번 불러올 때 성능을 높여준다.

 

 

4. 엔터티의 생명주기

영속성 컨켁스트는 세션 단위 생명주기를 가진다. 데이터베이스에 접근하기 위한 세션이 생성되면, 영속성 컨텍스트가 만들어지고, 세션이 종료되면 영속성 컨텍스트도 사라진다.

  1. 비영속 (New/Transient): 객체를 생성했지만 아직 영속성 컨텍스트에 저장하지 않은 상태이다. JPA가 객체를 관리하지 않는다.
  2. 영속 (Managed): 객체가 영속성 컨텍스트에 의해 관리되는 상태이다. 데이터베이스에 저장되거나 조회된 상태를 의미한다.
  3. 준영속 (Detached): 영속성 컨텍스트에 저장되었다가 분리된 상태이다. 영속성 컨텍스트가 제공하는 기능을 사용할 수 없다.
  4. 삭제 (Removed): 영속성 컨텍스트와 데이터베이스에서 객체를 삭제한 상태이다.

이 생명주기는 엔터티 매니저를 통해 관리된다. 엔터티 매니저의 메서드를 사용하여 객체의 상태를 변경할 수 있다.

persist()로 비영속 상태의 객체를 영속 상태로 만들고, detach()로 영속 상태의 객체를 준영속 상태로 만들 수 있다.