본문으로 바로가기

Kafka 공통 메시지 포맷을 위한 제네릭 적용하기

category MQ 2024. 9. 12. 16:06
반응형


Kafka에서 메시지를 발행(Pub)하고 구독(Sub)할 때, 각 서비스마다 공통된 메시지 구조가 없으면 메시지 생성과 변환을 위한 코드가 중복되어 관리가 어려워지고 복잡성이 증가합니다. 이를 해결하기 위해 제네릭(Generic) 타입을 사용하여 공통 메시지 포맷을 만들었습니다.

 


 

제네릭(Generics)

제네릭은 Java 5부터 도입된 기능으로, 다양한 타입의 객체들을 다루는 메서드나 클래스에서 컴파일 시에 타입을 미리 지정하지 않고, 유연하게 처리할 수 있게 합니다.

 

제네릭 장점

  • 타입 안정성 증가: 컴파일 시에 타입 오류를 검출하여 런타임 예외를 방지합니다.
  • 타입 캐스팅 제거: 불필요한 타입 캐스팅을 줄여 코드를 간결하게 만듭니다.
  • 코드 재사용성: 다양한 타입에 대해 동작하는 로직을 하나의 객체를 통해 구현할 수 있습니다.

 

와일드카드(?)와 타입 파라미터(T) 설명

  • 와일드카드(?)
    • 알 수 없는 타입을 나타내며, 모든 타입을 의미합니다.
    • 상한 경계 와일드카드(<? extends T>): T와 그 자손 타입만 가능합니다.
    • 하한 경계 와일드카드(<? super T>): T와 그 조상 타입만 가능합니다.
  • 타입 파라미터(T)
    • 특정 타입을 나타내며, 클래스나 메서드에서 사용할 타입을 파라미터로 받아 사용합니다.

 

와일드카드(?)는 타입이 고정되지 않은 임의의 타입을 나타내는 반면, 타입 파라미터(T)는 특정 타입을 지정하여 사용합니다.

 


 

Kafka Pub, Sub, Stream에서 공통 메시지 포맷을 정의하고, 아래 코드처럼 메시지 필드에 제네릭을 사용하여 다양한 타입의 데이터를 유연하게 처리할 수 있도록 구현했습니다. 이를 통해 컨버터 코드의 유연성이 높아지고 코드 재사용성이 증가했습니다.

 

BasicDelivery<List<TestDto>> messageConvert = RequirePipeline.toMessageConvert(value, gson, new TypeToken<>() {});



...


static <T> BasicDelivery<T> toMessageConvert(String value, Gson gson, TypeToken<T> typeToken) {
    BasicDelivery<T> delivery = new BasicDelivery<>();
    try {
        Map tranMap = gson.fromJson(value, Map.class);
        // ...
        T message = gson.fromJson(String.valueOf(messageList), typeToken.getType());
        delivery.setMessage(message);
        // ...
    } catch (JsonParseException e) {
        // 예외 처리
    } catch (Exception e) {
        // 예외 처리
    }
    return delivery;
}
반응형

'MQ' 카테고리의 다른 글

Kafka Pub CircuitBreaker 적용하기  (0) 2024.09.07
Kafka Pub 동적 Batch 관리  (0) 2024.08.18
Kafka Pub 호출 방안  (0) 2024.08.18
Kafka 학습하기_컨슈머  (0) 2024.06.05
Kafka 학습하기_프로듀서  (0) 2024.06.04