Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias (MyBatis 에러)

Mybatis 관련 예제를 작성하던 중 class 이름을 변경해야하는 일이 있었습니다.

 

저는 익숙하게 인텔리제이의 기능을 활용하여 (Shift + F6) 클래스를 수정했는데..

 

관련 클래스가 어디엔가 String 타입으로 선언되어 있다면.. 해당 클래스 이름도 바꿀지 말지에 대한 창이 나옵니다. 

 

무심코 아니요를 눌렀고.. 테스트 코드를 돌렸더니 아래와 같은 에러메시지가 나왔다.

 

Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias 'co
m.xxx.xxx.XXXApplication.Test'.
  Cause: java.lang.ClassNotFoundException: Cannot find class: 
co
m.xxx.xxx.XXXApplication.Test

at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:120)
at org.apache.ibatis.builder.BaseBuilder.resolveAlias(BaseBuilder.java:149)
at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:116)
... 145 more
Caused by: java.lang.ClassNotFoundException: Cannot find class: 
co
m.xxx.xxx.XXXApplication.Test

at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:196)
at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:89)
at org.apache.ibatis.io.Resources.classForName(Resources.java:261)
at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:116)
... 147 more

 

당연히 클래스 명이 Test -> TestEnum으로 바꾸었으니 Test라는 클래스를 찾을 수 없다고 나옵니다.

 

IDE에서 클래스명을 바꾸는 기능을 사용하지 않고 해당 클래스명을 바꾸게 된다면 발생할 수 있을만한 생산성이 떨어지는 일은 매우 많습니다. 이 경우에는 사실 많은 헤딩을 겪게 됩니다. 우선 컴파일 단에서 발생하는 컴파일 에러를 모두 뚫고나면 해당 클래스를 사용하는 기능을 모두 사용해보아서 ClassNotFoundException이 발생할 곳이 없는지 확인해야합니다. 모든 런타임을 확인해야하니까 매우 비효율적인 것 같습니다. 실제로 테스트 코드가 해당 Exception에 대비해서 짜 놓았을 일도 없을 것 같습니다.ㅜㅜ

 


 

이런 에러들을 단순히 확인하는 것에 그치지 않고 해당 에러가 발생한 근본적인 이유가 무엇인지 파악하고 시스템적으로 가져가야 할 부분이 있는 것 같습니다.

 

사소한 에러지만 조직의 컨벤션으로 발생하지 않도록 처리할 수 있을만한 부분도 있다고 생각합니다. 그 중 대표적인 것이 클래스명에 대한 컨벤션일 것 같습니다.

 

감사합니다.

 

댓글

Designed by JB FACTORY