개발/Java

Devtools object casting fail

haloper 2017. 4. 3. 09:14
DevTools는 리소스 변경 시 자동으로 서버를 재시작 해주며, Context에 instance 정보들을 저장하고 재사용 하여 서버 재시작 속도를 향상시켜 주는 기능을 합니다. 하지만, DevTools는 object deserialize 시에 casting이 잘 안되는 오류를 가지고 있습니다. (참조: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-devtools-known-restart-limitations) "ClassCastException: MyObject cannot be cast to MyObject" 라는 굉장히 희안한 오류 메시지를 보실 수 있습니다.

 

DevTools는 내부적으로 두 개의 context를 가지고 있고, 두 context 사이에 serialize, deserialize가 제대로 동작하지 못하는 문제를 가지고 있습니다. 이 문제를 해결하기 위해서는 ObjectInputStream를 이용하여 serialize 하는 third-party 라이브러리를 사용하지 말고, ConfigurableObjectInputStream를 사용하는 third-party 라이브러리만 사용해야 합니다. 하지만, 불행하게도 많은 third-party 라이브러리들이 ObjectInputStream를 사용하고 있습니다.