준호씨의 블로그
Jackson Json - Kafka json메시지의 naming strategy를 바꾸시겠다고요? 본문
Kafka로 json데이터를 받고 있었는데 json name을 snake case로 보내주고 있었습니다.
예를 들어 아래처럼 말이죠.
{"user_id":"jackson"}
java코드에서 Naming Strategy를 SnakeCaseStrategy를 사용하고 있었습니다.
@Data
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class User {
private String userId;
}
그런데 이 걸 camel case로 바꾸겠다고 합니다. 아래처럼 말이죠.
{"userId":"jackson"}
가급적 이런 일은 벌어지지 않는 게 좋습니다. 아직 개발 중이라면 동시에 바꿔주면 그만입니다. 그렇지만 서비스가 운영 중이라면 배포를 정확히 동시에 할 수 없기 때문에 오류를 피하기 어렵습니다.
하지만 간혹 이런 작업이 필요한 경우도 있습니다. 이런 경우 배포 타이밍 문제를 해소하기 위해 동시에 두 가지 방식을 다 지원해 주어야 되는데요.
이럴 때 사용할 수 있는 유용한 팁이 있습니다.
@JsonAlias를 사용하는 방법입니다.
@Data
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class User {
@JsonAlias("userId")
private String userId;
}
이렇게 하면 snake case도 사용하고 camel case도 사용할 수 있습니다. 다만 필드가 많아지면 하나하나 다 채워 넣어줘야 되는 작업이 필요합니다.
주고받는 필드가 많지 않다면 이런 방법을 사용하면 되겠고요. 많다면 그냥 kafka topic을 하나 새로 파고 consumer도 따로 돌리는 게 오히려 수월 할 수 있습니다.
어쨌건 똑같이 생겼는데 naming strategy만 다른 클래스를 메시지 개수만큼 만들어 주어야 하니 일이 좀 많아질 수 있습니다.
예제: github.com/junho85/jackson-multiple-naming-strategy
'개발이야기' 카테고리의 다른 글
내가 만든 WebFlux가 느렸던 이유 발표 영상 필기 (0) | 2020.12.23 |
---|---|
IBM Cloud를 이용한 무료 마인크래프트 서버 만들기? (0) | 2020.12.11 |
JUnit4를 JUnit5로 올렸더니 @Ignore이 안먹어요. @Disabled (0) | 2020.11.19 |
Spring - @KafkaListener topic 여러개 사용하기. 설정에서 여러개 불러 오려면? (0) | 2020.11.05 |
npm install - ELIFECYCLE 에러가 나면? (0) | 2020.10.29 |