필자는 SpringBoot 2.3.x 버전 환경에서 로컬과 운영, 개발환경에서 바인딩 에러 메세지 처리에 대한 동작이 다른것을 발견했다.
바인딩 에러처리에 대한 설명은 이전 글 참조(granger.tistory.com/69)
잘못 배포되어 코드가 다른가 Jar를 확인해보니 같았다.
어떻게 된것일까?
디버깅과 로깅을 통해 문제의 원인을 분석하던중(narrow down)에 이상한점을 발견했다.
분명 아무런 설정을 하지 않았는데 includeBindingErros 가 "ALWAYS" 였다. (Default는 "NAVER")
스프링부트 2.3.x 버전부터 업데이트 된 server.error.include-binding-errors 설정이 로컬과 운영이 다르다..!
그래서 찾아봤다. 언제 includeBindingErros가 "ALWAYS"로 들어가는지,
propertyBinder에 SpringConfigurationPropertySouces를 유심히 보면 devtools에 의해 server.error.include.message = ALLWAYS 가 들어가있는것을 확인해 볼 수 있다. (이것 이외에도 다른 어떤 프로퍼티 설정들이 들어가있는지 볼 수 있다. 아하..)
그래서 이러한 설정들이 어디에서 설정되는지 찾아봤다.
.
.
.
spring-boot-devtools (2.3.x)라이브러리를 보면 해당 코드를 확인해 볼 수 있다.
결국 로컬환경과 배포된 개발환경은 devtools에 의해 차이가 발생했음을 알수 있다.
그렇다면 왜 배포환경에서는 devtools가 작동을 왜 안하는것일까??
문서를 찾아보았다.
Spring Boot 2.3 docs (https://docs.spring.io/spring-boot/docs/2.3.x/reference/htmlsingle/)
java - jar로 실행하게 되면 production application으로 동작한다는 설명이다.
로컬, 배포환경에 따라 유의할 필요가 있어보인다.
DevTools는 유용하게 사용하고 있지만 어떤 원리로 동작하는지 그 기능에는 어떤것들이 있는지 알지 못했다.
이번 기회를 통해 시간이 된다면 자세히 알아보고 기록해두어야겠다.
'Spring' 카테고리의 다른 글
Spring Boot 2.3.x 에러페이지 BindingException 처리에 대한 ErrorAttibutes 변화 (0) | 2021.01.29 |
---|---|
Spring Boot 기존 요청 스레드 처리하고 안전하게 종료하기 (0) | 2020.01.16 |
Spring Boot - 등록된 Bean 객체 사용하기 (0) | 2019.12.17 |
2) Spring Boot Validation - Custom Annotation (0) | 2019.12.02 |
Spring Boot POST Encoding EUC-KR 한글깨짐(UTF-8)현상 (1) | 2019.11.18 |
댓글