본문 바로가기
Issue/Server

[Spring][MyBatis] 이상한 클래스가 Mapper class가 scan되는 문제 개선

by chickenman 2025. 5. 31.

1. 현상

멀티 모듈 프로젝트를 진행하면서, 각 모듈에 DB 설정빈을 추가하니 중복 빈 등록 오류가 발생했다.

그래서 common 모듈로 공통화를 시키고, DB를 활용하는 모듈에서 common 모듈을 implementation에 사용하는 방식으로 수정하였다.

DB 설정 코드를 아래와 같다.

그렇게 적용하였더니 아래와 같은 "Invalid bound statement (not found)"라는 mybatis 오류가 발생하였다.

 

2. 원인

여기서 의문인 점은 LoginService는 @Mapper 클래스를 붙이지 않은 interface이다.

그리고 실제 scan된 Mapper 클래스를 확인해보니 LoginService가 포함되어 있었던 것이다.

 

따라서 공식 문서를 확인해보니 아래와 같이 "base-package프로퍼티에 설정된 패키지 아래 모든 인터페이스가 매퍼로 로드될 것이다."라고 나와 있다.

결국 나의 모든 모듈의 default 패키지인 manage.store을 Mapper scan의 basePackage로 지정함에 따라, MyBatis의 Mapper Scanner는 모든 파일들을 조사하고 그 중 모든 interface 파일을 Mapper 클래스로 지정한 것이 원인이었다.

 

3. 해결

위와 같이 실제로 DB 연결을 사용하는 모듈의 디렉토리를 명시적으로 지정해줌으로써 문제를 해결할 수 있었다.

 

그런데 @MyBatis 테스트 코드 수행 시 문제가 발생하였다...

 

이 문제에 대한 트러블 슈팅은 다음 게시글에서,,

https://happiestlife.tistory.com/24

 

[Spring][MyBatis] Multi-Module 프로젝트에서 @MybatisTest 테스트 실행 시 중복 fragment 등록 문제 (XML fragments

1. 현상멀티 모듈 프로젝트를 진행하면서, 공통 모듈에 DB 설정코드(빈)을 작성하고 그 외 DB를 활용하는 모듈에서 common 모듈을 implementation에 사용하는 방식으로 개발중이었다.(이전 게시글 참고 -

happiestlife.tistory.com

 

 

출처


http://mybatis.org/spring/ko/mappers.html#%EB%A7%A4%ED%95%91-%EC%8A%A4%EC%BA%94%EB%8B%A4%EB%8A%94-%EB%B0%A9%EB%B2%95