반응형

[Spring JPA #9] 스프링 데이터 JPA 원리 및 스프링 데이터 구성 요소

반응형

| 스프링 데이터 JPA 소개 및 원리


스프링 데이터 JPA에서는 다음과 같이 JpaRepository 인터페이스를 상속하는 인터페이스를 정의하면 이 인터페이스를 통해 RDBMS, NoSQL 등의 Repository와 데이터를 주고받을 수 있는 빈을 자동적으로 등록하는 기능을 제공합니다.

public interface PostRepository extends JpaRepository<Post, Long> {

}


위에서 정의한 인터페이스는 다음과 같이 @Autowird와 같은 빈을 주입하는 어노테이션을 추가함으로서 사용할 수 있습니다.

@Component
@Transactional
public class JpaRunner implements ApplicationRunner {

@Autowired
PostRepository postRepository;

@Override
public void run(ApplicationArguments args) throws Exception {
postRepository.findAll().forEach(System.out::println);
}
}

결과 화면

Post{id=1, title='Spring Data Title'}


| @EnableJpaRepositories


@EnableJpaRepositories 어노테이션은 JpaRepository 에 대한 설정정보를 자동적으로 로딩하고 이 정보를 토대로 Repository 빈을 등록하는 역할을 합니다.


@EnableJpaRepositories 어노테이션은 @SpringBootApplication 어노테이션 안에 이미 등록되어 있어 스프링 부트를 사용할 경우에는 따로 어노테이션을 추가할 필요가 없어집니다.

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {


| Repository 빈 자동 등록 메커니즘


스프링 부트에서 제공하는 Repository 빈 자동 메커니즘의 원리는 다음과 같습니다.


먼저 @EnableAutoConfiguration에 있는 @Import(JpaRepositoriesRegistrar.class)에서 JpaRepositoriesRegistrar를 임포트 시킵니다. 이 클래스는 Jpa Repository 들을 등록하는 역할을 합니다. 


JpaRepositoriesRegistrar는 추적해보면 ImportBeanDefinitionRegistrar 인터페이스의 구현체입니다. 이 ImportBeanDefinitionRegistrar의 인터페이스의 registerBeanDefinitions를 구현하면 어떤 클래스든지 그 클래스에 명시적으로 @Component와 같은 어노테이션을 붙이지 않더라도 빈에 등록할 수 있습니다.


| 스프링 데이터 구성 요소


스프링 데이터는 다음과 같은 구성 요소들로 이루어져 있습니다.





https://www.inflearn.com/course/스프링-데이터-jpa


반응형

이 글을 공유하기

댓글

Designed by JB FACTORY