큐 메세지를 받아 로직 실행 후 디비에 데이터를 인서트하는 간단한 배치를 만들고 있었다.
프로젝트 생성부터 자바 버전은 이미 17이었고 부트 버전은 2.7.x였지만 인증이나 딱히 복잡한 이슈가 없어서 큰 생각 없이 Springboot 3.0.2로 쉽게 마이그레이션/업데이트를 할 수 있었다.
좋지 않은 습관인데, 의존성이 많고 실 데이터에 의존하여 테스트하는 경우가 많아 단위테스트보다는 통합테스트를 주로 사용하는 편이다.
이번에는 부트 버전 업데이트 후 일부 DB에서 사용하는 일부 코드의 대소문자 관련 변경 내용이 있어서 타입핸들러를 만들어야 했고 바로 적용해서 커밋을 하려고 했다. 부트 버전 업데이트 후 통합테스트를 생략한것이다...그러면 안됐는데... 아니다. 했었는데 그 때는 됐었던것 같은데.. (요즘 본인의 기억을 믿을 수 없는 편 ㅠ)
관련 정책들을 다시 얘기하고 테스트해보고 이것저것 하다가 오늘 변경 내용에 대해 통합테스트를 돌리니 생전 처음 보는 에러를 마주치게 됐다.
Error creating bean with name 'sqlSessionAsset' defined in class path resource [com/bespin/common/config/db/AssetDatabaseConfig.class]: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionAsset' threw exception with message: org/springframework/core/NestedIOException
다른 사람들의 케이스를 구글링 해 본 결과 매퍼의 위치나 아이디 중복 등등 실제로 오류가 있는 케이스였는데 나는 테스트 컨트롤러를 만들어 로직을 호출하면(ㅋㅋㅋㅋ) 정상인데 통합테스트를 돌릴때만 빈 생성 실패 오류가 나니 정말 미칠 것 같았다.
그러다 얻어걸린 개발자 블로그에서 mybatis의 버전에 대한 얘기를 읽게 되었고,
쌔한 기분이 들어 여기서 spring-boot-starter의 Requirements를 확인하게 되었다.
master : MyBatis 3.5+, MyBatis-Spring 3.0, Java 17+ and Spring Boot 3.0
2.3.x : MyBatis 3.5+, MyBatis-Spring 2.1, Java 8+ and Spring Boot 2.5-2.7
2.1.x : MyBatis 3.5+, MyBatis-Spring 2.0+(2.0.6+ recommended), Java 8+ and Spring Boot 2.1-2.4 2.4
내 부트버전은 3.0.2
자바버전은 17
오.. 내 mybatis-spring-boot-starter 버전은 2.2.2..
결국 스타터 버전을 3.0.1로 올리고 해결되었지만 아직도 공부는 끝나지 않았다.
왜 컨트롤러로 호출하면 정상이었는지,
spring-boot-starter-test에 딱히 걸린 의존성도 보이지 않는데 테스트를 돌릴때만 문제가 되었는지..
공부할게 너무 많다 ㅠㅠ