Spring
[Spring] BeanDefinitionStoreException: Failed to parse configuration class 에러 해결
worldcenter
2024. 11. 8. 14:20
Spring Bean 충돌
배달 서비스 개발 시 사업자와 이용자가 이용하는 기능이 다르기 때문에 다음과 같이 패키지를 나누어서 개발을 진행하였습니다.
├─common
│ ├─config
│ ├─entity
│ ├─enums
│ ├─exception
│ ├─security
│ └─util
└─domain
├─customer -> 장재혁, 박가온누리
│ ├─controller
│ ├─dto
│ ├─repository
│ └─service
├─member -> 김동주
│ ├─controller
│ ├─dto
│ ├─repository
│ └─service
└─seller -> 이은영, 백현욱
├─controller
├─dto
├─repository
└─service
이 때 Seller와 Customer 패키지 안에 클래스 명들이 서로 동일하게 개발을 진행하였고 dev 브랜치에서 Merge를 진행한 뒤 통합 테스트를 위해 실행을 하니 다음과 같은 에러가 발생했습니다.
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [com.musubi.teammusubi.TeamMusubiApplication]
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:179) ~[spring-context-6.1.14.jar:6.1.14]
Spring은 기본적으로 클래스 이름을 기준으로 Bean 이름을 자동 설정하는데, 두 클래스 모두 동일한 클래스 이름을 가지다 보니 중복된 Bean 이름이 충돌이 일어난 것입니다.
이를 해결하는 방법이 2가지가 존재합니다.
1. 동일한 Class 이름 변경
2. Bean 이름을 명시적으로 지정하기
@Component 나 @RestController 어노테이션에 빈 이름을 직접 지정하여 클래스를 구분할 수 있습니다.
@RestController("sellerMenuController")
public class MenuController {
// 판매자용 MenuController 코드
}
@RestController("customerMenuController")
public class MenuController {
// 고객용 MenuController 코드
}
해당 내용을 알고 있었으나 개발 과정에서 예외를 맞닥뜨리니 확실히 기억하게 되었습니다.