준호씨의 블로그

Jackson Json - Kafka json메시지의 naming strategy를 바꾸시겠다고요? 본문

개발이야기

Jackson Json - Kafka json메시지의 naming strategy를 바꾸시겠다고요?

준호씨 2020. 11. 24. 22:22
반응형

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

 

junho85/jackson-multiple-naming-strategy

https://junho85.pe.kr/1747 예제. Contribute to junho85/jackson-multiple-naming-strategy development by creating an account on GitHub.

github.com

 

반응형
Comments