-
데이터 접근 기술 - 스프링 데이터 JPASpring&SpringBoot 2025. 11. 20. 09:59
스프링 데이터 JPA 주요 기능
- 공통 인터페이스 기능
- 쿼리 메서드 기능
1. 공통 인터페이스 기능

스프링 데이터 JPA가 구현 클래스를 대신 생성

- JpaRepository 인터페이스만 상속받으면 스프링 데이터 JPA가 프록시 기술을 사용해서 구현 클래스를 만들어준다. 그리고 만든 구현 클래스의 인스턴스를 만들어서 스프링 빈으로 등록한다.
JpaRepository 사용법public interface ItemRepository extends JpaRepository<Item, Long> {}- JpaRepository 인터페이스를 인터페이스 상속 받고 제네릭에 관리할 <엔티티, 엔티티ID> 를 주면 된다
- JpaRepository가 제공하는 기본 CRUD 기능을 모두 사용할 수 있다
2. 쿼리 메서드 기능
// 순수 JPA 리포지토리 public List<Member> findByUsernameAndAgeGreaterThan(String username, int age) { return em.createQuery("select m from Member m where m.username = :username and m.age > :age") .setParameter("username", username) .setParameter("age", age) .getResultList(); } // 스프링 데이터 JPA public interface MemberRepository extends JpaRepository<Member, Long> { // 쿼리 메서드 기능 List<Member> findByUsernameAndAgeGreaterThan(String username, int age); // JPQL 직접 사용하기 @Query("select i from Item i where i.itemName like :itemName and i.price <= :price") List<Item> findItems(@Param("itemName") String itemName, @Param("price") Integer price); }- 스프링 데이터 JPA는 메서드 이름을 분석해서 필요한 JPQL을 만들고 실행해준다
- 스프링 데이터 JPA가 제공하는 쿼리 메소드 기능
- 조회 : find…By, read…By, query…By, get…By
- COUNT : count…By 반환타입 long
- EXISTS : exists…By 반환타입 boolean
- 삭제 : delete…By 반환타입 long
- DISTINCT : findDistinct, findMemberDistinctBy
- LIMIT : findFirst3, findFirst, findTop, findTop3
- 쿼리 메소드 필터 조건 - Spring Data JPA :: Spring Data JPA
- 직접 JPQL을 사용하고 싶을 때는 @Query와 함께 JPQL을 작성하면 된다
cf. JPA 예외 반환
@Repository @Transactional public class JpaItemRepositoryV1 implements ItemRepository { private final EntityManager em; @Override public Item save(Item item) { em.persist(item); return item; } }- EntityManager는 순수한 JPA 기술이고 스프링과는 관계가 없다 따라서 EntityManager는 예외가 발생하면 JPA 관려 예외를 발생한다

- JPA는 PersistenceException과 그 하위 예외를 발생시킨다
- JPA 예외를 스프링 예외 추상화(DataAccessException)로 변환하는 방법은 @Repository가 처리한다
- @Repository는 컴포넌트 스캔의 대상이 되며 예외 변환 AOP의 적용 대상이 된다
- 스프링과 JPA를 함께 사용하는 경우 스프링은 JPA 예외 변환기(PersistenceExceptionTranslator)를 등록한다
- 예외 변환 AOP 프록시는 JPA 관련 예외가 발생하면 JPA 예외 변환기를 통해 발생한 예외를 스프링 데이터 접근 예외로 변환한다

- 결국 리파지토리에 @repository 어노테이션만 있으면 스프링이 예외 변환을 처리하는 AOP를 만들어 준다
- 스프링 부트는 PersistenceExceptionTranslationPostProcessor를 자동으로 등록하는데 여기서 @Reppsitory를 AOP 프록시로 만드는 어드바이저가 등록된다
728x90'Spring&SpringBoot' 카테고리의 다른 글
스프링 트랜잭션 전파 (0) 2025.11.20 트랜잭션 커밋/롤백과 예외 (0) 2025.11.20 @Transaction (0) 2025.11.13 트랜잭션, DB 락 (0) 2025.11.12 JDBC (0) 2025.11.12