[궁금증] spring-data-jpa 사용시 @Repository 어노테이션 필요?

myeonji·2022년 5월 3일
0

스프링 컨테이너

스프링 어플리케이션 동작시 @ComponentScan 어노테이션을 통해 @Component을 읽어 싱글톤 패턴으로 컨테이너에 빈 등록을 한다.
즉 ComponentScan은 @Component 어노테이션이 있으면 스프링 빈으로 자동 등록됨을 말한다.

가독성을 위해 @Component 대신 @Controller, @Service, @Repository 어노테이션을 사용하고 이들은 모두 @Component를 포함하고 있기 때문에 이 세 개의 어노테이션도 스프링 빈으로 자동 등록 되게 된다.


항상 Repository에 @Repository 어노테이션을 당연하게 달았는데, 어노테이션이 없어도 Repository가 정상적으로 동작하는 것을 보고 해당 어노테이션이 꼭 필요한지 고민해보게 되었다.

💡 결론은 @Repository 어노테이션을 사용할 필요 없다!! (spring-data-jpa의 JpaRepository를 상속받아 사용할 시)


그럼 어디에서 빈이 등록???

@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> 

위의 @NoRepositoryBean 어노테이션은 실제 사용되는 Repository가 아님을 표시하는 것일 뿐이다.

@EnableJpaRepositories

spring-data-jpa의 리포지토리 빈 등록은 해당 어노테이션에서 이루어진다.
SpringBoot에서는 이것이 자동 설정이 되어 있다.

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import(JpaRepositoriesRegistrar.class)
public @interface EnableJpaRepositories

@Import(JpaRepositoriesRegistrar.class) 가 실제 JpaRepository를 상속받은 Repository 인터페이스를 빈으로 등록해준다.

0개의 댓글