본문 바로가기

트러블슈팅

ObjectMapper의 FAIL_ON_UNKNOWN_PROPERTIES 설정

배경 - 여러 서비스 중 BFF 서비스들만 선배포

회사에서 요금제 고도화 프로젝트 Live 시점에 B2B, B2C 서비스들 합쳐서 10개 정도의 서비스 배포를 진행했다.

(B2B 7개, B2C 3개)

 

B2B 서비스들은 다른 대형 프로젝트가 별도 브랜치로 진행되었다가

main 브랜치로 병합되면서 배포 나가는 변경사항이 컸는데

급하게 대응해주어야 하는 것이 있어 B2B 7개 서비스 중 BFF 서비스 2개만 4일 정도 먼저 운영 배포를 진행하게 되었다.

 

다른 서비스들 배포 없이 해당 BFF 서비스들만 먼저 배포되어도 괜찮은지 확인하기 위해

stage 환경에서 다른 서비스들은 예전 버전으로 돌려두고 BFF 서비스들만 먼저 배포했다.

 

팀원들과 주요 화면들 이상 없는지 확인 했는데

조회가 잘 되는 것들은 확인 했지만 요금제 수정까지는 확인할 생각을 하지는 못했었다.

이슈 - 요금제 수정 불가

BFF 서비스들만 선배포 후 얼마 있다가 영업팀에서 요금제 수정이 안된다고 확인 요청이 왔다.

 

이슈를 확인해 보니 BFF 서비스들이 배포되면서 내부 서비스로 Request Body에 이번에 추가된 필드를 전달하지만

내부 서비스 ObjectMapper 설정이 정의되지 않은 필드가 오면 예외를 발생시키도록 되어 있었다.

해결 - ObjectMapper 설정 변경

이슈가 된 내부 서비스 ObjectMapper 설정에 아래와 같이 설정하여 정의되지 않은 필드가 와도 실패하지 않도록 Hotfix 해서 배포했다.

objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

좀 더 생각해보면 - 운영과 개발 환경의 설정 분리

ObjectMapper의 FAIL_ON_UNKNOWN_PROPERTIES 설정의 기본값은 true인데

아마도 보안적인 이슈와 정의되지 않은 데이터가 전달되는 것을 빠르게 알기 위함으로 보인다.

서비스 내에서 오가는 데이터의 품질을 높일 수 있다는 장점이 있다.

 

그렇지만 운영 환경에서 기본값을 그대로 사용한다면

(마이크로 서비스가 아니더라도) 배포 순서를 너무 복잡하게 가져가야 할 때가 많다.

 

그래서 생각해보면

테스트 환경에서는 잘못된 데이터를 빠르게 확인하기 위해 기본값을 그대로 사용하고

운영 환경에서는 배포를 유연하게 하기 위해 FAIL_ON_UNKNOWN_PROPERTIES를 false로 해두는 것이 좋아 보인다.