1. Annotation-based Configuration
- JPA를 사용하기 위한 주요 구성 요소를 정의합니다.
- DataSource, EntityManagerFactory, TransactionManager
@Configuration
@EnableJpaRepositories
@EnableTransactionManagement
class ApplicationConfig {
@Bean
public DataSource dataSource() {
EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
return builder.setType(EmbeddedDatabaseType.HSQL).build();
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setGenerateDdl(true);
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setJpaVendorAdapter(vendorAdapter);
factory.setPackagesToScan("com.acme.domain");
factory.setDataSource(dataSource());
return factory;
}
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
JpaTransactionManager txManager = new JpaTransactionManager();
txManager.setEntityManagerFactory(entityManagerFactory);
return txManager;
}
}
@EnableJpaRepositories
- Spring Data Repository들을 스캔하여 활성화합니다. (basePackage: 스캔할 패키지 정의)
- Repository 인터페이스에 대한 구현체를 프록시 형태로 제공합니다.
EntityManagerFactory
- EntityManager 인스턴스들을 생성하고 관리하는 역할을 합니다.
LocalContainerEntityManagerFactoryBean
- Spring과 JPA와의 통합에 사용됨
- EntityManagerFactory 설정 및 관리
- Spring의 예외 변환 매커니즘과 통합
- JPA 예외가 Spring의 DataAccessException로 변환 (일관된 예외 처리 가능)
EntityManagerFactory
- JPA 구현 생성 인터페이스입니다.
- JPA Provider 지원
- Hibernate: 세션 생성 및 관리
JpaTransactionManager
- JPA 트랜잭션 관리
- EntityManager 통합
2. Bootstrap Mode
- Spring Data JPA의 Repository 초기화를 어떻게 처리할 것인지에 대한 정의
Setting
bootstrapMode (@EnableJpaRepositories attribute)
- DEFAULT (기본값): 즉시 초기화 (애플리케이션 컨텍스트 시작 시점)
- LAZY: 지연 초기화 (프록시 생성)
- DEFERRED: ContextRefreshedEvent에 응답하여 리포지토리 초기화 (애플리케이션 컨텍스트 초기화 종료 시점)
DEFAULT
- Spring의 기본 빈(bean)으로 등록 (싱글턴 범위)
- 검증 및 메타데이터 분석을 진행합니다. (JPA EntityManager와 상호 작용을 통해)
DEFERRED
지연 초기화 (ContextRefreshedEvent)
- JPA EntityManagerFactory의 백그라운드 초기화 후 JPA Repository가 초기화 됨
- Repository는 EntityManagerFactory를 의존
- EntityManagerFactory가 완전히 초기화된 후 리포지토리가 초기화됨 (늦게 초기화 되도록)
JPA EntityManagerFactory의 백그라운드 초기화
- JPA EntityManagerFactory의 초기화는 무거운 작업 (DDL, DataSource, JPA Provider 분석 등)
- 백그라운드에서 동작 (멀티스레딩으로 처리하여 시작시간 최적화)
출처
'Spring > Spring Data JPA' 카테고리의 다른 글
[자바 ORM 표준 JPA 프로그래밍] 3. 영속성 관리 (0) | 2023.11.28 |
---|---|
[자바 ORM 표준 JPA 프로그래밍] 2. JPA 시작 (0) | 2023.11.28 |
[자바 ORM 표준 JPA 프로그래밍] 1. JPA 소개 (0) | 2023.11.28 |
[Spring Data JPA] 2-2. Transactionality (0) | 2023.10.18 |
[Spring Data JPA] 1. Core concepts (1) | 2023.10.17 |