본문 바로가기

Infra

(3)
[Kafka] Kafka에서 Avro를 사용하는 이유 목차들어가며Kafka 환경에서 데이터를 주고받을 때 직렬화(Serialization) 과정은 필수이다. 만약, 직렬화에 대해서 모른다면 다음의 글을 먼저 읽어보는 것을 추천한다.2023.08.20 - [Language/Java] - [JAVA] 직렬화(Serialization)란? 프로듀서는 객체를 바이트 배열로 변환해 토픽에 전송하고, 컨슈머는 이를 다시 객체로 복원(deserialize)한다. 이 과정에서 단순히 “객체 → 바이트” 변환만 필요하다면 커스텀 시리얼라이저(Custom Serializer) 를 직접 구현할 수도 있다. 하지만 시스템이 확장되고 데이터 구조가 바뀌기 시작하면 프로듀서와 컨슈머 간의 결합도, 유지보수성, 호환성 문제가 드러나게 된다. 이러한 이유로 Avro, Protobuf,..
[Kafka] Kafka 기초 정리 (메시지 큐, 파티션, DLT, 클러스터 구조) 목차들어가며기존의 모놀리식 애플리케이션을 MSA로 마이그레이션하면서 이벤트 기반 통신이 필요하게되었다. 이를 위해 Redis, RabbitMQ, Kafka 등의 다양한 도구가 있겠지만, MSA 구조에서 많은 장점을 가진 Kafka를 이번 구현에서 선택했다. Kafka는 대규모 데이터를 빠르게 처리할 수 있는 분산 메시징 플랫폼이다. 단순한 메시지 큐 이상의 기능을 제공하며, 비동기 이벤트 기반 시스템을 구성할 때 자주 사용된다.중점적으로 봐야 하는 내용Kafka는 메시지를 토픽(topic) 단위로 관리한다.토픽은 여러 개의 파티션(partition) 으로 구성되어 병렬 처리 성능을 높인다.Kafka는 컨슈머 그룹(consumer group) 단위로 오프셋(offset)을 관리해 메시지 중복 없이 안정적인..
[Docker] 이미지 캐시를 활용한 이미지 빌드 시간 개선하기 목차 들어가며 프로젝트를 진행하면서 애플리케이션을 수동으로 배포하는 과정이 생산성에 영향을 주게 되어, Github Actions와 도커를 활용하여 CICD 파이프라인을 구축했다. 이때 애플리케이션을 도커 이미지로 빌드한 뒤 배포를 수행하였는데, 이미지 레이어의 캐시를 통해서 빌드 시간을 단축했던 경험에 대해서 작성하려고 한다. 코드 푸시부터 도커 이미지를 빌드하는 프로세스를 먼저 살펴보면 다음과 같다. 깃헙에 소스코드가 푸시되면 Github actions의 Workflow가 순차적으로 동작한다. 가장 먼저 애플리케이션의 테스트와 빌드가 실행된다. 그리고 빌드가 성공적으로 끝나면 도커 이미지를 생성하고, 도커 허브에 이미지를 푸시하게 된다. 도커 이미지 애플리케이션이 동작하기 위해서는 다양한 요소가 필요..