본문 바로가기
IT/Java

JPA 소개

by Cyber_ 2025. 1. 2.

JPA

자바 애플리케이션에서 관계형 데이터베이스를 다룰 수 있는 표준 스팩이며, SQL 작성 없이 데이터 베이스와 매핑하고, 데이터의 저장, 조회, 갱신, 삭제를 처리합니다.

JPA는 인터페이스로만 구성되어 있으며, Hibernate, EclipseLink, OpenJPA 등 구현체가 필요합니다.

 

JPA 주요개념

Entity

DB 테이블에 매핑되는 클래스로서 @Entity 어노테이션을 사용합니다.

Persistence Context

엔티티 객체를 관리하는 컨텍스트, 엔티티의 생명 주기를 관리하며 1차 캐시 역할을 합니다.

EntityManager

엔티티를 생성, 조회, 갱신, 삭제하는 인터페이스이며, JPA의 핵심 API로, @PersistanceContext로 주입받습니다.

JPQL(Java Persistence Query Language)

SQL과 유사하지만 엔티티 객체를 대상으로 작성하는 쿼리입니다.

Transaction

DB 작업은 반드시 트랜잭션 안에서 실행됩니다. @Transactional 어노테이션을 통해 트랜잭션을 관리합니다.

 

JPA 생명주기

  1. 비영속(Transient)
    엔티티가 EntityManager(1차 캐시)에 의해 관리되지 않는 상태, 예를 들어 new 키워드로 생성된 객체
  2. 영속(Persistent)
    EntityManager에 의해 관리되고 있는 상태, 데이터베이스와 동기화 됨.
  3. 준영속(Detached)
    EntityManager가 더 이상 객체를 관리하지 않는 상태. 예를 들어 entityManager.clear() 호출 후
  4. 삭제(Removed)
    데이터베이스에서 삭제된 상태. 예를 들어 entityManager.remove(user) 수행 이후

 

JPA 장점

생산성 향상, 유지보수 용이, 표준화

 

Spring Data JPA

Spring Boot 환경에서는 Spring Data JPA를 통해 JPA를 더욱 쉽게 사용할 수 있습니다.

  1. 기본 repository interface
    JpaRepository 인터페이스를 확장하여 CRUD 메서드 제공
public interface UserRepository extends JpaRepository<User, Long>{
    List<User> findByName(String name);
}
  1. @Query 어노테이션
    JPQL이나 네이티브 쿼리를 직접 작성 가능
@Query("SELECT u FROM User u WHERE u.email = :email")
User findByEmail(@Param("email") String email);