작성
·
307
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
안녕하세요! 강의를 복습하는 도중에 다음 설정과 같이 intellij로 테스트를 실행하면 다음과 같이 NoUniqueBeanDefinition 예외가 나옵니다. 해당 설명을 보면 컴포넌트 스캔으로 등록된 MemoryMemberRepository와 AppConfig에서 등록된 MemoeyRepository 때문에 생성자 주입이 일어날때 어떤 것을 선택할지 몰라서 생기는 오류처럼 보입니다. 이를 해결하기 위해 커뮤니티 게시판을 살펴봤는데 다음과 같이 test 환경을 intellij idea가 아닌 gradle로 실행하면 된다고 하여 시도해보았더니 해결되었습니다. 그런데 이런 해결방법이 이해가 되지 않습니다. gradle과 intellj 무슨 차이가 있는지 궁금하고 gradle로 테스트하더라도 코드는 똑같이 분명히 똑같이 충돌이 일어날텐데 오류 없이 해결되는지 그 이유가 궁금합니다.
답변 2
0
안녕하세요, 인프런 AI 인턴입니다.
장재현님, NoUniqueBeanDefinitionException
예외와 관련하여 IntelliJ IDEA와 Gradle 사이의 테스트 실행 방식 차이에 대해 궁금해 하신 내용을 잘 읽었습니다. 이 예외는 스프링 컨테이너가 주입할 빈을 결정하려 할 때, 동일 타입의 빈이 두 개 이상 존재하여 발생하는 문제입니다.
질문하신 내용과 유사한 상황에 대한 답변이 이전에도 있었습니다. 그런데요, 다음 정보에 근거하여 답변을 드리겠습니다:
[섹션 7 - 옵션 처리] 전체 테스트 중 CoreApplicationTests 클래스의 contextLoads 테스트 실패 질문입니다. (https://www.inflearn.com/questions/1089023)에 제시된 내용은 ‘NoUniqueBeanDefinitionException’ 오류를 직접적으로 다룹니다. 이 링크에서는 비슷한 오류와 그 해결 과정에 대한 자세한 설명을 확인할 수 있습니다.
확인해보니, IntelliJ IDEA와 Gradle 사이의 실행 방식 차이로 인한 문제에 대한 구체적인 언급이 없어 질문에 대한 명확한 답변을 제공하기 어렵습니다. 다만, 경험상 IntelliJ IDEA와 Gradle 사이의 실행 설정 차이는 빌드와 실행 과정에서의 클래스 경로 해석, 빌드 스크립트 처리 방식 등에 차이를 둘 수 있기 때문에, 동일한 코드에 대해 서로 다른 실행 결과를 초래할 수 있습니다.
이런 종류의 오류를 해결하기 위해 다음 점을 고려할 수 있습니다:
- @Qualifier 어노테이션 사용: 동일한 타입의 빈이 여러 개 있을 때, 주입할 빈을 명시적으로 지정합니다.
- @Primary 어노테이션 사용: 주입할 대상 빈 중 하나에 우선 순위를 부여하여 자동 주입 시 해당 빈을 우선적으로 선택하게 합니다.
- 프로젝트 설정 확인: IntelliJ IDEA와 Gradle에서 프로젝트를 실행할 때 사용되는 설정(예: 빌드 스크립트, 적용된 플러그인)이 일관되게 구성되어 있는지 확인합니다.
질문하신 내용과 정확히 일치하는 해답을 제공하지 못해 죄송합니다. IntelliJ IDEA와 Gradle 사이의 차이에 대한 더 깊은 이해는 공식 문서를 참조하거나, 스프링 및 빌드 도구 관련 커뮤니티에 추가적인 문의를 해보는 것도 좋을 것 같습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.