[Java] serialVersionUID와 직렬화 호환성 관리
·
유용한 개발지식
안녕하세요. 개발자 stark입니다!오늘은 제가 kafka 소스코드를 살펴보다 발견한 serialVersionUID에 대해서 얘기해보고자 합니다. 실제로 Kafka에서 사용되는 예외 클래스(WakeupException)를 예시로 들어 직렬화/역직렬화 과정에서 serialVersionUID가 어떤 영향을 미치는지 더 자세히 보여드리겠습니다.  1. 초기 버전의 Kafka 관련 예외 클래스먼저 오픈소스 프로젝트인 Kafka 소스코드에 있는 예외 클래스를 확인해 봅시다.필드에 serialVersionUID = 1L이 선언되어 있습니다.package org.apache.kafka.common;public class KafkaException extends RuntimeException { private s..
Kafka에서 Locale.ROOT 사용의 중요성
·
Apache Kafka
오늘은 Kafka 소스코드를 분석하다 발견한 Locale.ROOT의 사용 사례를 다뤄보려고 합니다. 이 코드는 처음 봤을 때는 뭔가 신기했지만, 실제로 왜 사용되었는지를 깊이 이해한 후에는 그 중요성을 충분히 깨달을 수 있었습니다.제가 글로벌 서비스를 운영할 때 각 지역별로 다른 시간을 보여주기 위해 JavaScript에서 Locale을 다룬 경험은 많았지만, 백엔드 개발을 하며 Java에서 이렇게 명시적으로 Locale을 설정한다는 것은 생각해 본 적이 없었습니다. (UTC와 Zoned는 다뤄봤지만 Locale만을 직접적으로 다뤄본 적은 없습니다.) 그래서 이번 포스팅을 통해 그 내용을 간단히 공유해 보겠습니다.  Kafka의 AcknowledgeType Enum 코드 분석아래 코드는 오픈 소스 Kaf..
[MSA] Transactional Outbox Pattern
·
MSA
안녕하세요! 글쓰는 개발자 stark입니다. 저는 최근 1년간 주로 MSA 프로젝트를 진행해 왔는데요 프로젝트를 설계하고 개발하면서 항상 같은 고민을 해왔습니다. 바로 MSA 서버 간 데이터 동기화 방법을 설계하는 것입니다.  MSA 서버 간 데이터 동기화를 진행한 이유저는 MSA 프로젝트 설계할 때 아래와 같이 각 서버별로 전용 DB를 가지도록 설계하였습니다. 만약 유저에 대한 정보를 유저 DB만 가지고 있다면 아래와 같이 게시글 서버, 소셜 서버, 미디어 서버에서는 비즈니스 로직에서 유저의 정보가 필요할 때마다 유저 서버에 API요청을 보내서 유저의 데이터를 받아와야 할 것입니다. 이렇게 되면 서버 간의 강한 결합(의존성)과 장애 전파가 될 수 있다는 문제점을 가지게 됩니다.만약 위의 상황을 아래와 ..
[kafka] Docker로 카프카 실행하기 (KRaft 모드)
·
Apache Kafka
Docker를 통해 Kafka를 실행해 보자📌 서론이전에도 kafka 세팅에 대해 포스팅을 한 적이 있지만 가장 최근에 새롭게 세팅을 하면서 알게 된 점들을 정리해 봤다.특히 port를 설정할 때 내부, 외부로 구성하는 점이 굉장히 중요했다. 이 부분은 실수로 잘못 설정하면 외부에서는 아예 접근조차 불가능했다.세팅은 loacl에서 진행했으며 docker-compose를 사용해서 m2 max 맥북에서 실행했다.만약 SpringBoot에 연결하는 방법이 궁금하다면 이 글을 확인하자 (SpringBoot3.x.x) [Kafka] SpringBoot3.x.x에서 Kafka 연동하기스프링 부트 3.1.2에 Kafka를 세팅해 보자📌 서론이전 포스트를 통해 docker-compose로 Kafka를 띄웠다.이번..
[kafka] 스프링부트와 kafka를 이용한 slack 예외알림 구현
·
Apache Kafka
SpringBoot에서 kafka를 통해 슬랙에 에러 알림을 보내보자 📌 서론 이번 포스트를 읽기 전 2가지 사항을 모두 완료했는지 확인해 보자 1. Kafka 세팅 2. 슬랙 webhook 세팅 이번 포스트에서는 아래와 같은 작업을 하는 코드를 알아볼 것이다. 1. 예외가 발생하면 SpringBoot에서 kafka로 메시지를 produce 한다. (이전 포스트에서 확인가능) 2. SpringBoot내부에 작성한 kafkaListener코드를 통해 이 예외 메시지를 consume 한다. 3. kafkaListener에서는 slack의 webhook url로 메시지를 보내서 알림이 울리도록 한다. 1. 먼저 SpringBoot에 kafka를 연동하자 [Kafka] SpringBoot3.x.x에서 Kafka..
Kafka(카프카) 메시지 포맷(message format)의 구조와 특징 이해하기
·
Apache Kafka
이번 포스트에서는 카프카의 메시지 포맷에 대해서 알아보자 📌 서론 카프카 메시지는 데이터를 주고받는 데 사용되는 기본 단위다. 카프카를 이해하고 잘 사용하기 위해서는 이 메시지 구조를 잘 알아야 한다. 기본적으로, 카프카 메시지는 두 가지 주요 구성 요소를 가지고 있다. 예를 들어, 로그 데이터를 Kafka로 전송한다고 가정할 때, 각 로그의 '키'는 로그의 출처나 타입을 나타낼 수 있고, '값'은 실제 로그 내용이 될 수 있다. 이렇게 데이터를 구분하면 효율적으로 데이터를 관리하고 처리할 수 있다. 1. Kafka 메시지의 구조를 간단히 이해하기 Kafka 메시지의 기본 구조를 이해하는 것은 Kafka를 사용하는 데 있어서 가장 기본적이고 중요하다. 키와 값의 구조를 이해하면, Kafka가 데이터를 어..
SpringBoot와 Kafka(1) - 기본설명
·
Apache Kafka
1. SpringBoot + Kafka Apache Kafka는 여러 다양한 상황에서 사용될 수 있다. 실시간 이벤트 스트리밍, 실시간 분석, 데이터 파이프라이닝, 로그 수집 등의 다양한 애플리케이션에서 Kafka를 활용하곤 한다. Spring Boot 개발자로서 Apache Kafka는 다음과 같은 상황에서 사용될 수 있다. 1. 마이크로서비스 아키텍처: Kafka는 마이크로서비스 간에 데이터를 비동기적으로 전달하는 메시지 브로커 역할을 수행할 수 있다. 서비스 간의 커뮤니케이션에 대한 복잡성을 줄이고 시스템의 전체적인 성능을 향상시키는데 도움이 된다. 2. 이벤트 소싱과 CQRS: 이벤트 소싱(Event Sourcing)과 CQRS(Command Query Responsibility Segregati..
Apache Kafka 복제(Replication)와 장애 허용(Fault Tolerance) 메커니즘 (9편)
·
Apache Kafka
Kafka의 Replication과 Fault Tolerance는 데이터의 안정성과 가용성을 보장하는 중요한 요소이다. 이러한 개념들은 Kafka 클러스터가 장애 상황에서도 데이터 손실 없이 정상적으로 작동할 수 있게 해준다. 1. ISR (In-Sync Replicas) 1-1. 정의: ISR은 Leader Partition에 복제될 수 있는 Follower Partition의 집합이다. 즉, ISR은 현재 Leader와 동기화되고 있는 Follower Partition들을 의미한다. 1-2. 동작 방식: Leader Partition이 새로운 메시지를 받으면, ISR 내의 Follower Partition들도 이 메시지를 복제한다. 모든 Follower가 메시지를 복제하면, 해당 메시지는 'Commi..