[JPA] JPA란?

지니·2025년 3월 27일

JPA

목록 보기
1/4
post-thumbnail

1. JPA(Java Persistence API)란?


JPA라는 것은 자바 진영의 ORM(Object Relational Mapping) 기술 표준으로 ORM 기술을 사용하기 위한 표준 인터페이스의 모음이다.

ORM : 객체 지향 프로그래밍 언어를 사용해 호환되지 않는 유형의 시스템 간 데이터를 변환하는 프로그래밍 기술로 쉽게 말하면 객체와 관계형 DB의 데이터를 매핑하고 이를 토대로 SQL을 생성 및 실행하는 기술이다.

Persistence(영속성) : 데이터가 생성된 프로그램이 종료되어도 사라지지 않는 데이터의 특성


2. JPA의 특징


2-1. JPA의 특징

  • Persistence Context가 엔티티를 생명주기를 통해 관리한다.
  • native SQL을 통해 직접 SQL을 해당 DB에 맞게 작성할 수도 있다.
  • DBMS별로 dialect(방언)를 제공한다.

2-2. JPA의 장점

  • SQL 중심적인 개발에서 객체 중심으로 개발할 수 있게 해준다.
  • 개발자가 ⭐직접 SQL문을 성하지 않아도 알아서 SQL문을 작성해준다.
    • 이 때, DB의 종류에 맞게 SQL문을 작성해 준다.
    • 설정과 필드만 변경 하면 자동으로 SQL 문이 수정된다.
      => 개발 시간이 절약되고, 의존성이 제거된다(유지보수성 향상).
  • 객체 지향과 관계형 데이터 베이스 사이 패러다임 불일치를 해소 시켜준다.
  • 캐시를 활용한 성능 최적화로 트랜잭션을 처리하는 시간이 단축된다.
  • 위에서 알아본 것 처럼 RDBMS에 맞춰 dialect를 제공하기 때문에 편리하다.
  • 생산성과 유지보수성이 올라간다.

2-3. JPA의 단점

  • 복잡한 SQL을 작성하기에 적합하지 않다.
  • 동적 SQL을 작성하기 위해서는 라이브러리를 따로 추가해서 사용해야 한다.
  • JPA를 잘 이해하지 않고 작성하는 경우 성능이 저하된다.
    • JPA의 N+1 문제가 있다.

3. JPA의 원리


3-1. 기본 동작 방식

  • JDBC API가 내장되어 있어, 개발자가 따로 JDBC API를 가져와서 사용할 필요가 없다.
  • JPA는 Persistence Context(영속성 컨텍스트)를 통해 엔티티를 보관하고 관리한다.

이 동작 방식에서 조회가 어떠한 방식으로 일어나는지 그림으로 한 번 살펴보자.

3-2. Entity Manager란?

Entity Manager 엔터티(DB와 연결되는 객체)를 저장하는 메모리상의 데이터베이스이다. 엔터티 저장, 수정, 삭제, 조회 등 엔터티와 관련된 모든 일을 수행한다.

  • 그렇다면 우리는 Entity를 다루기 전에 EntityManager를 생성해야 한다.
  • 이러한 EntityMangerEntityManagerFactory를 통해 생성된다.
  • 밑에 그림을 통해 만들어지는 과정을 한 번 보자.

⚠️ 주의 사항
EntityManager은 스레드 세이프하지 않기 때문에 공유하면 안된다. 그리고, EntityManagerFactory의 경우 스레드 세이프하기 때문에 공유해서 재사용(비용 절감) 한다. 그렇기 때문에 싱글톤으로 객체를 생성해야 한다.

3-3.Persistence Context란?

Persistence Context 즉, 영속성 컨텍스트란 엔티티를 보관하고 관리하는 장소라고 생각하면 된다. 여기에서 Entity(엔티티) 라는 것은 DB와 mapping되는 객체이다.


이 그림은 영속성 컨텍스트 안에 있는 엔티티의 생명주기를 나타낸 그림이다. 생명주기와 관련된 부분은 따로 블로그를 작성할 예정이다.

0개의 댓글