인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

cowldnd123님의 프로필 이미지
cowldnd123

작성한 질문수

스프링 DB 2편 - 데이터 접근 활용 기술

Config 관련해서 질문잇습니다.

해결된 질문

작성

·

25

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]


@Repository
public class ItemQueryRepositoryV2 {

    private final JPAQueryFactory query;

    public ItemQueryRepositoryV2(EntityManager em) {
        this.query = new JPAQueryFactory(em);
    }
.....

@Configuration
@RequiredArgsConstructor
public class V2Config {

    private final EntityManager em;
    private final ItemRepositoryV2 itemRepositoryV2; //SpringDataJPA
    @Bean
    public ItemService itemService() {
        return new ItemServiceV2(itemRepositoryV2, itemQueryRepository());
    }
    @Bean
    public ItemQueryRepositoryV2 itemQueryRepository() {
        return new ItemQueryRepositoryV2(em);
    }
    @Bean
    public ItemRepository itemRepository() {
        return new JpaItemRepositoryV3(em);
    }
}

 

여기서 ItemQueryRepositoryV2가 에노테이션으로 빈 등록이되어있는데 config에서 새롭게 빈을 등록한 이유가 EntityManager를 새롭게 생성해서 주입받는 것을 위해서인가요?

이 방식 말고 다른 방식 ItemQueryRepositoryV2 자체적으로@RequiredArgsConstructor를 쓰면 오류가 나는 이유가 궁금합니다.

 

 

 

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. cowldnd123님.

ItemQueryRepositoryV2에서 @Repository 어노테이션을 사용하고, V2Config에서 명시적으로 빈을 등록한 이유에 대해 궁금해 하시는 것 같습니다. 이와 관련된 몇 가지 개념을 간단히 설명드리고 관련 내용을 찾아드리겠습니다.

  1. V2Config 클래스에서의 명시적 빈 등록: V2Config에서 @Bean으로 ItemQueryRepositoryV2를 등록한 이유는 @Configuration 클래스가 빈 생성에 대한 전반적인 관리를 하기 위함입니다. 이처럼 Java Config 파일에서 명시적으로 빈을 만드는 경우, 일반적으로 데이터베이스 연결이나 다른 복잡한 의존성 주입이 필요한 경우에 종종 사용됩니다. @Configuration 클래스 내에서 관리하도록 하는 것이 종종 보기 더 쉬우며, 관련된 빈을 그룹화함으로써 유지보수와 관리가 용이해집니다.

  2. @RequiredArgsConstructor 사용 시 문제: @RequiredArgsConstructor는 final 필드나 @NonNull로 명시된 필드를 요구하는 생성자를 자동으로 생성해주지만, 여기서 문제가 생길 수 있는 부분은 Spring의 의존성 주입 메커니즘과 관련이 있습니다. 만약 @Component, @Service, @Repository 같은 어노테이션이 없고, Configuration 클래스 내에서만 사용된다면 Spring이 자동으로 빈을 생성해주지 않아서 NPE나 다른 초기화 에러가 발생할 수 있습니다. 따라서 Configuration에서 직접 생성하여 관리하는 것이 더 안전한 선택이라고 할 수 있습니다.

관련된 질문에 대한 참고 자료를 드리자면:
- “빈 등록 및 의존관계 주입”
- “JpaRepositoryV2 도입 이유”

위의 두 질문은 각각 빈의 직접 등록과 JpaRepository 도입에 관련된 내용으로, 유사한 컨텍스트를 제공할 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

cowldnd123님의 프로필 이미지
cowldnd123

작성한 질문수

질문하기