🧩 Spring Data JPA

정의

Spring Data JPAJPA를 더 편하게 사용할 수 있도록 Repository 추상화와 편의 기능을 제공하는 Spring 모듈이다. 반복적인 CRUD 코드와 쿼리 생성을 줄여준다.

JPA의 공통 기능을 인터페이스 중심으로 제공해서 데이터 접근 코드를 간결하게 만들 수 있다.

🧩 역할

  • Repository 추상화를 제공한다
  • CRUD 작업을 간단하게 만든다
  • 메서드 이름 기반 쿼리를 지원한다
  • @Query, @Modifying, @EnableJpaRepositories 같은 기능과 함께 사용된다
  • Custom Repository 확장을 지원한다

🛠 핵심 메서드

메서드 기능
save(S entity) 엔티티를 저장하거나 수정한다
findById(ID id) 식별자로 조회한다
findAll() 전체 조회한다
count() 전체 개수를 조회한다
delete(T entity) 엔티티를 삭제한다
existsById(ID id) 존재 여부를 확인한다

🛠 주요 기능

메서드 이름으로 쿼리 생성

메서드 이름만으로도 일부 JPQL을 자동 생성할 수 있다.

예시:

  • findDistinctByLastnameAndFirstname
  • findByAgeLessThan
  • findByFirstnameContaining
  • findByActiveTrue

@Query 사용

@Query("SELECT u FROM User u WHERE u.status = 'ACTIVE'")
List<User> findActiveUsers();

Custom Repository 확장

public interface UserRepository extends JpaRepository<User, Long>, CustomUserRepository {
}

🛠 프로젝트 설정

@Configuration
@EnableJpaRepositories(basePackages = "<패키지명>.api.repository")
@EnableJpaAuditing
@EnableTransactionManagement
public class JpaConfiguration {

    @Bean
    public DataSource dataSourceForJPA() {
        return DataSourceInitializer.getDataSource(dataSourceType, jndiName);
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(
            @Qualifier("dataSourceForJPA") DataSource dataSource) {
        LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(dataSource);
        em.setPackagesToScan("org.infinity.server.entity");
        em.setPersistenceProviderClass(HibernatePersistenceProvider.class);
        return em;
    }

    @Bean
    public JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
        JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
        jpaTransactionManager.setEntityManagerFactory(entityManagerFactory);
        return jpaTransactionManager;
    }
}

⚠️ 주의사항

  • 엔티티가 스캔 대상 패키지에 포함되어 있어야 한다.
  • 메서드 이름 기반 쿼리는 편리하지만 복잡한 조건에는 한계가 있다.
  • @QueryCustom Repository를 적절히 나눠 쓰는 것이 좋다.
  • 트랜잭션과 엔티티 스캔 설정이 맞지 않으면 Repository 동작이 깨질 수 있다.

📌 정리

  • Spring Data JPA는 JPA 사용을 편하게 해주는 Spring 모듈이다.
  • Repository 추상화, 메서드 이름 기반 쿼리, @Query, Custom Repository 확장을 제공한다.
  • JPA 기반 프로젝트에서 데이터 접근 코드를 줄이고 유지보수를 쉽게 만든다.

연결문서

태그: ,

카테고리:

업데이트:

댓글남기기