25.01.16 TIL JPA

신성훈·2025년 1월 16일

TIL

목록 보기
120/162

1. JPA(Java Persistence API)란?

JPA자바 객체와 데이터베이스 간의 매핑(ORM)을 지원하는 자바 표준 인터페이스입니다.
SQL을 직접 작성하지 않고도 데이터베이스 작업이 가능하며 객체 중심의 프로그래밍과 관계형 데이터베이스 간의 불일치를 해결하는 데 중점을 둡니다.

특징

  • ORM(Object-Relational Mapping) 기반
  • 자바 표준으로 Hibernate, EclipseLink와 같은 구현체들이 존재
  • 데이터를 객체화하여 유지보수성과 생산성을 높임

2. JPA 주요 개념

2.1 엔티티(Entity)

  • 데이터베이스 테이블과 매핑되는 클래스
  • @Entity 어노테이션을 통해 선언
@Entity
public class User {
    @Id
    @GeneratedValue
    private Long id;

    private String name;

    // Getter, Setter
}

2.2 엔티티 매니저(EntityManager)

  • JPA의 핵심으로 엔티티를 데이터베이스와 동기화하고 관리
  • CRUD 작업 수행

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

  • 엔티티를 관리하는 캐시 같은 역할
  • 데이터베이스와의 중복 조회를 줄여 성능 최적화
  • 1차 캐시로 엔티티를 관리하며, 동일한 트랜잭션 내에서는 항상 동일한 객체를 반환

3. 주요 어노테이션

  1. @Entity
    • 클래스가 데이터베이스 테이블과 매핑됨을 선언
  2. @Id
    • 테이블의 기본 키를 나타냄
  3. @GeneratedValue
    • 기본 키의 자동 생성 전략 설정
  4. @Column
    • 필드와 테이블 컬럼 간의 매핑 설정
  5. @OneToMany, @ManyToOne, @OneToOne, @ManyToMany
    • 엔티티 간의 연관 관계 매핑

4. JPA 작동 흐름

  1. 엔티티 객체 생성

    • 데이터를 저장할 객체 생성
  2. EntityManager를 통한 데이터 저장

    EntityManager em = ...;
    em.persist(user); // 데이터 저장
  3. 영속성 컨텍스트 관리

    • 엔티티가 1차 캐시에 저장됨
  4. 변경 감지(Dirty Checking)

    • 트랜잭션이 끝나기 전에 엔티티의 변경 사항을 자동으로 감지하고 데이터베이스에 반영
  5. 데이터베이스와 동기화

    • 쿼리가 자동 생성되고 실행됨

5. JPA와 SQL

  • JPA는 SQL을 직접 작성하지 않고도 작업 가능
  • JPQL(Java Persistence Query Language)을 사용해 객체 중심의 쿼리를 작성

JPQL 예시

TypedQuery<User> query = em.createQuery("SELECT u FROM User u WHERE u.name = :name", User.class);
query.setParameter("name", "Alice");
List<User> results = query.getResultList();

6. JPA의 장점과 단점

장점

  • 생산성 증가: 반복적인 SQL 작성 없이 객체 중심 개발 가능
  • 유지보수 용이: 데이터베이스 스키마 변경 시 영향 최소화
  • 캐싱: 영속성 컨텍스트를 통한 성능 최적화

단점

  • 학습 곡선이 존재
  • 대규모 시스템에서 성능 최적화를 위해 깊은 이해 필요
  • ORM 사용이 적합하지 않은 특정 경우 존재

7. 마무리

JPA는 데이터베이스 작업을 단순화하면서 객체 중심 설계를 가능하게 합니다. 프로젝트에서 JPA를 적용하면서 직접 SQL을 작성하던 방식에서 벗어나 객체 중심으로 데이터를 처리하는 편리함을 느낄 수 있었습니다.
영속성 컨텍스트의 1차 캐시를 통해 데이터베이스 접근을 줄이고 변경 감지로 코드의 간결성을 유지하는 것이 인상 깊었습니다.
그러나 복잡한 쿼리나 성능 최적화가 중요한 경우에는 JPA의 동작 원리를 깊이 이해해야 한다는 점도 배우게 되었습니다.

profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글