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

2021. 3. 25. 03:21 Spring Data/Spring Data 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



출처: https://engkimbs.tistory.com/821?category=772527 [새로비]