JPA와 영속성 컨텍스트
JPA는 자바 객체와 DB 테이블을 매핑하는 ORM 기술 표준이다. 그 중심에는 영속성 컨텍스트라는 논리적 영역이 존재한다.
영속성 컨텍스트의 주요 기능
- 1차 캐시: DB 조회 전 컨텍스트 내부에 객체가 있는지 확인하여 성능을 최적화한다.
- 쓰기 지연 (Write-Behind): 트랜잭션 커밋 시점에 SQL을 모아서 한꺼번에 실행한다.
- 변경 감지 (Dirty Checking): 영속 상태 엔티티의 값이 변경되면 종료 시점에 자동으로 UPDATE 쿼리를 실행한다.
Entity 설계와 매핑
JPA가 관리하는 객체를 Entity라 하며, 어노테이션을 통해 DB와 매핑한다.
- @Entity: JPA가 관리할 클래스임을 선언한다.
- @Table: 매핑할 테이블 이름을 지정한다.
- @Id / @GeneratedValue: 기본 키(PK)와 그 생성 전략을 설정한다.
- @Column: 필드와 컬럼을 매핑하며 제약사항(길이, Null 여부 등)을 설정한다.
Spring Data JPA 및 활용
JpaRepository
인터페이스 선언만으로 기본적인 CRUD 기능을 사용할 수 있게 해주는 모듈이다. JpaRepository<Entity, ID>를 상속받아 구현한다.
Query Methods
메서드 이름 규칙만으로 SQL을 자동 생성한다.
- findByTitle(String title): 제목으로 조회
- findAllByOrderByCreatedAtDesc(): 생성일 기준 내림차순 정렬
JPA Auditing
데이터의 생성 시간과 수정 시간을 자동으로 기록하는 기능이다.
- Timestamped 클래스: @MappedSuperclass를 사용하여 공통 필드(createdAt, modifiedAt)를 정의한다.
- EntityListeners: @EntityListeners(AuditingEntityListener.class)를 붙여 변경 사항을 감시한다.
- 활성화: 메인 클래스에 @EnableJpaAuditing을 추가하여 기능을 켠다.