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

taetae님의 프로필 이미지
taetae

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

회원 기능 테스트

회원가입 테스트 오류

작성

·

1K

0

안녕하세요 강사님 항상 좋은 강의와 피드백 감사드립니다

다름이 아니라 이번에 강의 중 '회원가입' 테스트를 그대로 따라 코딩하였으나 실행에 오류가 뜹니다. 관련하여 사진과 오류글을 그대로 올려보니 한 번 확인해주시면 감사하겠습니다!

java.lang.IllegalStateException: Failed to load ApplicationContext

at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:132)

at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:124)

at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)

at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)

at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:244)

at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227)

at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)

at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)

at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)

at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246)

at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)

at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)

at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)

at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)

at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)

at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)

at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)

at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)

at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)

at org.junit.runners.ParentRunner.run(ParentRunner.java:413)

at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)

at org.junit.runner.JUnitCore.run(JUnitCore.java:137)

at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)

at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)

at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:221)

at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)

Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [jpabook.jpashop.JpashopApplication]; nested exception is org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'memberRepository' for bean class [jpabook.jpashop.repository.MemberRepository] conflicts with existing, non-compatible bean definition of same name and class [jpabook.jpashop.domain.MemberRepository]

at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:189)

at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:331)

at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:247)

at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:311)

at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:112)

at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746)

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564)

at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:771)

at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:763)

at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:438)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:339)

at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:123)

at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99)

at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)

... 25 more

Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'memberRepository' for bean class [jpabook.jpashop.repository.MemberRepository] conflicts with existing, non-compatible bean definition of same name and class [jpabook.jpashop.domain.MemberRepository]

at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.checkCandidate(ClassPathBeanDefinitionScanner.java:349)

at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:287)

at org.springframework.context.annotation.ComponentScanAnnotationParser.parse(ComponentScanAnnotationParser.java:132)

at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:296)

at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:250)

at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:207)

at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:175)

... 38 more

답변 2

2

안녕하세요. taetae님, 공식 서포터즈 OMG입니다

@Repository, @Component, @Service 등의 어노테이션을 클래스 위에 작성하면 name 지정을 따로 하지 않는 이상class 이름의 첫글자를 소문자로 바꾼 클래스의 이름을 스프링 bean 으로 등록하는데요, MemberRepository의 클래스가 서로 다른 패키지에 총 2개가 존재하고 @Repository 어노테이션이 명시 되어 있어 동일한 이름의 bean 등록(memberRepository)을 시도하려 하기에 문제가 발생하는 것입니다. 아직 스프링 환경에 익숙하지 않다면 원활한 강의 수강을 위해 강의에서 진행하는 변수명, 클래스명, 클래스 위치, 패키지 명 등 동일하게 진행해주시고, 스프링부트의 start.spring.io에서 설정을 제공하는 버전은 버전업으로 인해 계속 달라질 수 있기 때문에 선택할 수 있는 옵션에서 하위버전을 고르시되 버전이 바뀜에 따라 설정에서 문제가 되는 이슈는 메뉴얼에 적어놓으시니 참고하셔서 강의수강하시면 됩니다.

주석으로 정리하면서 열심히 공부하시는 모습 보기 좋습니다^^

감사합니다.

taetae님의 프로필 이미지
taetae
질문자

감사합니다! 다시 MemberRepository를 확인하니 제가 도메인폴더와 리포지토리 폴더에 같은 이름의 클래스를 두 개나 만들어 놓았네요!! 

피드백 주셔서 감사합니다:)

2

안녕하세요. taetae님, 공식 서포터즈 OMG입니다.

첨부하신 로그를 보면 주시해야할 부분은

Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'memberRepository' for bean class [jpabook.jpashop.repository.MemberRepository] conflicts with existing, non-compatible bean definition of same name and class [jpabook.jpashop.domain.MemberRepository]

이 부분인거 같은데요. 첨부하신 이미지에 보이는 [jpabook.jpashop.repository.MemberRepository]

과 화면에는 보이지 않지만 [jpabook.jpashop.domain.MemberRepository]

관련하여 충돌 나는 것으로 보입니다. domain 패키지 하위에 MemberRepository가 존재하는지요?

해당 문제 관련하여 답변 주시면 이어서 도움 드릴 수 있도록 하겠습니다.

감사합니다.

taetae님의 프로필 이미지
taetae
질문자

답변 감사합니다! 해당 도메인 폴더 아래 MemberRepository는 존재합니다 

그 외에 다른 문제점이 있을까요? ㅠㅠ

저도 같은 문제 였는데, 중복되는 MemberRepository 를 삭제하니까 정상 작동 됩니다. 이전 강의에서 이어졌던 내용들이 뒷부분에 충돌이 되면서 문제가 생기는 듯 합니다.

taetae님의 프로필 이미지
taetae

작성한 질문수

질문하기