이 글은 Spring Boot를 사용하여 API를 개발할 때 발생한 response 반환 형식과
관련된 문제와 해결 방법에 대해 다룹니다
문제 상황
Spring Boot를 사용하여 개발 중인 백엔드 서버에서 특정 API에서 사용되는 값에 대한 DTO를 생성하였습니다.
DTO에서는 각 변수에 @JsonProperty("TEST")와 같이 어노테이션을 사용하여 반활 될때의 이름을 명기하여 주었습니다.
이렇게 구성 후 API 통신을 테스트하는 과정에서, 프론트엔드(클라이언트) 측에서 반환된 데이터에 TEST와 test는 두 개의 키가 반환되는 문제가 발생했습니다.
해결 시도 1
첫 번째로 고려된 해 방법은 컨트롤러의 @ResponseBody를 제거하여 정상 작동하게끔 하는 방법입니다.
그러나 이 경우 @JsonProperty를 각각의 맴버 변수에 적용해야 합니다.
때문에 이 방법 비효율적이라고 생각되어 다른 방법을 찾았습니다.
해결 시도 2
두 번로 시도한 방법은 모든 맴버 변수에 적용 가능한 @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)를 사용하는 것입니다.
하지만 위 어노테이션을 적용하여 보았지만 마찬가지로 방법 또한 원하는 결과를 얻지 못했습니다.
최종 해결 방법
결국 처음에 말했던대로 @JsonProperty("TEST")를 각각의 맴버변수에 적용시켜주는 작업을 진행하였습니다.
@JsonProperty("TEST")
private String test;
위 와 같이 맴버변수 별 어노테이션을 추가하고 난 뒤에서야 정상적으로 하나만 값이 반환되었습니다.
다른문제 발생
이제 최초 문제는 해결되었지만.
아래와 같이 언더바(_)가 포함된명에서는 여전히 두 개의 값이 반환되는 문제가 발생했습니다.
@JsonProperty("TEST_STAMP")
private String testStamp;
테스트를 하면서 발견한 문제인데, 빈도가 낮은 상황이지만 결과적으로
언더바를 제거하여 정상적으로 작동하도록 수정할 수 있습니다.
이 부분에 대해서 해당 문제가 발생한 이유는 자바의 기본네이밍 규칙과 JSON 네이밍 사이에 차이가 있기 때문인데,
자바에서 변수명을 작성할 때는 보통 카멜 케이스(CamelCase)를 하지만 JSON 키 이름에는 보통 스네이크 케이스(SnakeCase)를 사용하며, 단어 사이에 언더바(_)를 사용하기 때문에 변수명에서 언더바(_) 사용 시, @JsonNaming에서 사용된 전략에 따라 JSON 키 이름이 잘못 생성될 수도 있는 문제가 있었습니다.
Spring Boot를 사용한 API 개발 중 발생한 response 반환 형식과 관련된 문제와 해결 방법을 설명했습니다.
'라이브러리 > Spring boot' 카테고리의 다른 글
Application.yml Profiles를 활용한 환경 별 DB 설정 (0) | 2023.06.08 |
---|---|
Spring Boot Web Server Log 저장 문제 (2) | 2022.09.16 |