Write it/Spring Boot

Spring Boot) JPA의 개념 , 특징

develop_mii 2025. 9. 8. 23:02

 

■ JPA(Java Persistence API) 의 개념 및 정리

 

1. ORM(Object Relational Mapping) 이란?

ORM은 객체(Object)와 관계형 데이터베이스(Relational Database)를 매핑(Mapping) 해주는 기술
즉, 자바 클래스(객체)를 데이터베이스의 테이블과 연결시켜서 SQL을 직접 작성하지 않고도 DB와 상호작용할 수 있게 도와준다

  • 예시
    • 자바 객체: User { id, name, email }
    • 데이터베이스 테이블: USER (id, name, email)
    • ORM은 객체의 필드를 테이블 컬럼과 매핑해서 자동으로 SQL을 만들어 실행해줍니다.

 ORM은 “개념”일 뿐, 실제로 동작하려면 구현체가 필요 → JPA 필요

 


2. JPA란 ?

JPA는 자바 진영의 ORM 표준 인터페이스

  • 정식 명칭: Java Persistence API
  • ORM을 자바에서 표준화한 인터페이스이기 때문에, JPA 자체가 동작하는 게 아니라 구현체가 필요

대표적인 JPA 구현체:

  • Hibernate (가장 널리 쓰임)
  • EclipseLink
  • OpenJPA

 


 

3. 왜 JPA를 써야 할까?

 

  SQL 작성 부담 감소

JPA를 쓰면 엔티티(Entity) 객체를 저장하거나 수정하면 JPA가 알아서 SQL을 만들어 실행

// 전통적인 JDBC 방식
String sql = "INSERT INTO user (id, name, email) VALUES (?, ?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setLong(1, user.getId());
pstmt.setString(2, user.getName());
pstmt.setString(3, user.getEmail());
pstmt.executeUpdate();

// JPA 방식
entityManager.persist(user); // 끝

 

② 객체지향적인 코드 유지

SQL 중심 개발 → 객체지향적 코드와 괴리 발생
JPA → 자바 클래스 중심 개발 → 유지보수성과 생산성 ↑

 

③ 데이터베이스 독립성 확보

JPA는 데이터베이스 방언(Dialect)을 제공하기 때문에, 같은 코드로 MySQL, Oracle, PostgreSQL 등 다양한 DB를 지원
DB를 교체해도 코드 대부분을 수정할 필요가 없음

 

④ 캐시 및 성능 최적화

JPA는 1차 캐시, 지연 로딩(Lazy Loading), 쓰기 지연(Write-behind) 같은 다양한 최적화 기능을 제공

 


 

4. JPA의 주요 개념

 

① 엔티티(Entity)

  • DB 테이블과 매핑되는 클래스
  • @Entity 어노테이션 사용

┌──────────────┐             ┌───────────────┐
│   User (객체)                │             │   USER (테이블)             │    
├──────────────┤             ├───────────   ───┤
│ id: Long                       │◀ ──▶│ id (PK)                           │
│ name: String               │◀─ ─▶│ name (VARCHAR)         │
│ email: String                │◀──▶│ email (VARCHAR)         │
└───────────────┘         └────────────────┘

@Entity
public class User {
    @Id
    @GeneratedValue
    private Long id;

    private String name;
    private String email;
}

 

 

② 엔티티 매니저(EntityManager)

  • JPA에서 DB 작업을 담당하는 핵심 객체
  • 엔티티 저장, 수정, 삭제, 조회 기능 제공
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();

User user = new User("홍길동", "hong@test.com");
em.persist(user); // 저장

em.getTransaction().commit();

 

③ 영속성 컨텍스트(Persistence Context)

  • 엔티티를 관리하는 JPA의 내부 메모리
  • 1차 캐시 역할 → 같은 트랜잭션 내에서 동일한 엔티티는 동일한 객체로 관리됨
  • 변경 감지(Dirty Checking) → 엔티티 값만 수정해도 JPA가 알아서 UPDATE SQL 실행

④ JPQL(Java Persistence Query Language)

  • SQL과 유사하지만, 테이블이 아닌 엔티티 객체를 대상으로 질의하는 언어
  • DB 독립성 보장
List<User> users = em.createQuery("SELECT u FROM User u WHERE u.name = :name", User.class)
                     .setParameter("name", "홍길동")
                     .getResultList();

 

 


5. 요약

  • ORM은 객체와 테이블을 매핑하는 개념
  • JPA는 자바 진영의 ORM 표준
  • Hibernate는 JPA 구현체
  • JPA를 사용하면 SQL 작성 부담을 줄이고, 객체지향적으로 DB를 다룰 수 있으며, DB 독립성까지 확보 가능
  • 단, 성능 문제와 러닝 커브를 이해하고 올바르게 써야 함

     "JPA는 객체지향 프로그래밍과 데이터베이스 사이의 다리 역할을 하는 자바 ORM 표준"