intellij로 스프링으로 작업하던 중, 도메인 폴더 내에 controller, service, dto, domain, mapper 등 파일이 너무 많아져서 예쁘게 폴더별로 정리하던 도중 에러가 발생했다.
폴더 변경 리팩토링 과정에서 인텔리제이는 import 폴더경로를 자동으로 수정해주기 때문에 웬만해선 에러가 발생하지 않는데, 에러가 발생해서 조금 당황스러웠지만, 차근차근 살펴보니 어렵지 않았다.
에러 내용은 아래와 같았다.
Annotation-specified bean name 'memberIdMapperImpl' for bean class [algopa.study.member.mapper.MemberIdMapperImpl] conflicts with existing, non-compatible bean definition of same name and class [algopa.study.member.MemberIdMapperImpl]
위 에러는 스프링이 빈을 중복으로 인식해서 발생한 것이므로 gradle을 깔끔하게 청소해주도록 하자.
아래 글이 도움이 될 것이다.
https://github.com/jojoldu/freelec-springboot2-webservice/issues/271
1. out 폴더 삭제
2. gradle에서 build폴더 내의 clean -> build 진행
build 과정에서 일부 에러가 발생할 수 있다.
나의 경우 아래 에러가 발생했다.
Execution failed for task ':test'.
이 경우는 test code의 위치가 main 코드의 디렉토리 위치와 다르기 때문에 발생한 것 같다.
나의 경우, service 클래스명을 MemberServiceImpl 에서 MemberService로 변환했기 때문에 발생한 것 같다.
https://www.inflearn.com/questions/15495
참고로 변환한 이유는 아래와 같다.
이 부분은 정답이 없다. 스프링 작업을 하면서 정답없는 경우를 되게 많이 마주치게 되는데, 이래서 경험이 진짜 중요한 것 같다. 개인프로젝트의 아쉬운 점은 더 나은 경험을 찾기 힘들다는점이 아닌가 싶다 ㅜㅜ
아무튼 그래서 test code는 어차피 코드 리팩토링 하면서 다시 작성해야했기 때문에, 아예 지우고 새로 생성해주었다.
이후 다시 build하니까 성공!
디렉토리 구조가 예쁘게 폴더로 정리되었다.
클래스가 덕지덕지 많이 붙어있는 것보다 훨씬 이쁘지 않은가?
다른 사람들이 보기에도 편할 듯.
Dto, mapper, service가 여러 개가 될수록 이러한 작업은 특히 중요한 듯하다.
이렇게 오늘 발생한 에러를 포스팅함으로써 또 하나의 경험이 늘어났다.
'JAVA > 소박한그룹 프로젝트' 카테고리의 다른 글
[Thymeleaf] 타임리프 Thymeleaf th:style, th:if 사용하기 (0) | 2021.09.14 |
---|---|
[Spring] MapStruct를 이용한 Entity, Dto 반환 및 고찰 (0) | 2021.09.08 |
[Java] Spring Security를 이용한 로그인/로그아웃 기능 구현 1. 환경설정 (Thymeleaf + Gradle + IntelliJ + Spring Security + MySQL) (0) | 2021.09.03 |
[Spring] Solved API를 이용한 개발에 도움이 되는 글 (0) | 2021.06.09 |
Solvedac API를 이용한 해결한 문제 리스트 만들기 (2) | 2021.06.01 |