0. 개요한 쇼핑몰에서 새벽배송 주문을 처리하는 시스템이 있습니다.A 고객은 밤 11시에 상품을 주문했고, 결제도 문제없이 완료되었습니다. 그런데 다음 날 아침, 고객센터로는 항의 전화가 걸려옵니다.“결제 내역은 있는데, 주문 내역이 없어요.”조사해보니, 주문 요청을 처리하는 시스템이 메시지 큐를 통해 주문 정보를 하위 서비스로 전달하는 과정에서 메시지가 유실된 것이었습니다. 즉, 결제는 되었지만 주문 정보는 배송 시스템으로 넘어가지 않았습니다.이처럼 데이터 전송의 신뢰성이 보장되지 않으면, 사용자의 신뢰를 잃는 것은 순식간입니다.그렇기 때문에 데이터 전송의 신뢰성을 보장하는 것은 상당히 중요한 작업입니다. 1. 데이터 신뢰성(Data Reliability)이란?데이터 신뢰성이란, 시스템이 데이터를..
전체 글
·일상
도파민 중독, 나도 모르게 변해버린 일상요즘 문득 내 집중력이 예전 같지 않다는 생각이 든다.유튜브, 숏폼, 짧고 강렬한 자극에 너무 익숙해졌다.역사 영상을 좋아해서 유튜브 알고리즘도 그런 콘텐츠를 많이 띄워주지만,어느새 중요한 부분만 보고 10초 뒤로 넘기기를 반복하고 있다.심지어는 좋아하던 강의 영상도 1.5배속이 기본..집중하려고해도 어느새 손은 휴대폰을 향한다.“내가 혹시 성인 ADHD인가?” 싶은 생각이 들 정도다. ‘책벌레’였던 그 시절의 나하지만 문득, 예전의 내가 떠올랐다.초중고 시절, 책을 손에서 놓지 못했던 그 시절의 나. (공부는 드럽게 안했다...ㅠ)특히 기억에 남는 건 ‘테메레르’ 시리즈. 나폴레옹 전쟁 시절 용들이 나오는 한 권에 500장이 넘는 판타지 소설이었는데,그 방대한 ..
1. Kraft 개요저번 편에서 Kafka의 내부 메커니즘과 Kraft(Kafka Raft)의 등장 배경에 대해 간단히 살펴보았습니다.이번 편에서는 실제로 Kraft 모드를 사용해 Kafka를 Docker 환경에서 실행하고, Zookeeper 없이 동작하는 Kafka의 모습을 직접 확인해보며, 설정 방법과 실행 시 주의할 점들을 정리해보겠습니다. 잠깐 Kraft 모드란?Zookeeper 없이 Kafka를 실행할 수 있게 해주는 새로운 아키텍처Kafka 2.8.0부터 프리뷰, Kafka 3.3.0 이상부터 정식 지원장점: 운영 단순화, 안정성 개선 등 2. docker-compose.yml 작성Kafka를 운영할 때 브로커(broker)를 3개 이상 두는 게 일반적이고 권장되므로 3개의 카프카 브로커를 ..
1. K6란?개발을 하다 보면, "우리 서비스에 갑자기 수백 명, 수천 명이 몰리면 서버가 과연 잘 버틸까?"라는 고민을 하게 됩니다. 특히 API 서버나 웹 서비스는 예기치 못한 트래픽 상황에서 무너질 수 있기 때문에, 사전에 성능을 점검하고 튜닝하는 작업이 필요하죠. 그럴 때 유용하게 쓸 수 있는 도구 중 하나가 바로 K6입니다. K6는 JavaScript 기반의 스크립트로 테스트 시나리오를 작성할 수 있는 오픈소스 부하 테스트 도구입니다. 기존의 부하 테스트 도구들이 XML 설정이나 복잡한 UI를 요구했다면, K6는 코드로 직접 작성하기 때문에 개발자 입장에서 훨씬 자연스럽고 편리하게 사용할 수 있습니다. 지금부터는 k6를 설치하고 부하테스트를 진행한 후, Grafana로 시각화하는 방법까지 단계별..
1. 개요프로젝트에서 기존의 모놀리식 애플리케이션을 MSA로 전환하면서, CI/CD 파이프라인 또한 개선하게 되었습니다.기존에는 GitHub Actions와 GCP를 활용한 배포 구조를 사용했지만, MSA 구조로 변경하면서 AWS 인프라 환경을 경험해보고자 배포 구조를 변경하게 되었습니다. 이번 블로그에서는 Jenkins를 사용해 Docker 이미지를 AWS ECR에 빌드 및 배포하고 도커 컨테이너를 생성하는 과정까지 진행해보겠습니다. 2. ECR, EC2 인스턴스 생성하기CI/CD 파이프라인을 구축하기 위해 다음과 같은 AWS 리소스를 준비합니다. EC2 인스턴스Jenkins 서버를 설치하고 실행할 용도로 사용ECR (Elastic Container Registry)Docker 이미지를 저장할 프라이..
1. kafka 컨트롤러Apache Kafka는 분산 메시징 시스템으로서 강력한 확장성과 내결함성을 제공하지만, 그 구조를 깊이 들여다보면 핵심적인 컴포넌트들이 있습니다. 그중 하나가 바로 Kafka 컨트롤러(controller)입니다. Kafka 컨트롤러는 클러스터 내에서 컨트롤러는 브로커 중 하나가 맡는 역할입니다. 이 컨트롤러는 클러스터의 메타데이터 관리를 책임지며, 파티션 리더를 선출하거나 브로커가 죽었을 때 이를 감지하고 재할당 등의 작업을 수행합니다.메타데이터란? 토픽, 파티션, 브로커, 설정 등의 정보 예를 들어 어떤 브로커가 장애가 나면, 컨트롤러는 이를 감지하고 해당 브로커가 담당하고 있던 파티션의 리더를 다른 브로커로 재선출합니다. 이처럼 Kafka의 핵심 동작 중 많은 부분이 컨트롤러..
0. 개요카프카에서 데이터를 읽는 애플리케이션은 토픽을 구독하고, 해당 토픽에서 메시지를 받기 위해 KafkaConsumer를 사용합니다. 이번 글에서는 카프카 컨슈머에 대해 알아보겠습니다. 1. 카프카 컨슈머(Kafka Consumer)카프카 컨슈머는 토픽을 구독하고 메시지를 읽어와 처리하는 역할을 합니다.하지만, 만약 프로듀서가 메시지를 보내는 속도가 컨슈머의 처리 속도보다 빠르다면 어떻게 될까요?컨슈머가 하나만 있다면 처리 지연이 발생할 수 있습니다. 이를 해결하기 위해 여러 개의 컨슈머를 활용하여 병렬로 데이터를 처리할 수 있어야 합니다. 카프카는 컨슈머 그룹(Consumer Group)을 활용해 여러 개의 컨슈머가 하나의 토픽을 분할하여 처리할 수 있도록 합니다.컨슈머 그룹 구성을 통해 각 컨..
0. 개요카프카를 사용 할 때에는 카프카에 데이터를 쓸 때 사용하는 프로듀서, 읽을 때 사용하는 컨슈머, 혹은 두 가지 기능을 모두 수행하는 애플리케이션을 생성해야합니다. 이번 시간은 프로듀서의 주요 요소와 KafkaProducer와 ProducerRecord 객체를 어떻게 생성 및 전송하는지 정리해보려고 합니다. 1. 프로듀서 (KafkaProducer)프로듀서는 Kafka에 메시지를 쓰는 역할을 담당하는 구성 요소입니다. 메시지를 생성하여 특정 토픽(Topic)으로 전송하며, 이를 통해 다양한 애플리케이션이 데이터를 실시간으로 주고받을 수 있습니다. 이러한 과정은 아래 사진과 같은 주요 단계들을 통해 이뤄지게 됩니다.1. 카프카에서 메시지를 쓰는 작업은 ProducerRecord 객체를 생성함으로 ..
1. Kafka의 기원카프카는 링크드인 내부에서 데이터 파이프라인 문제를 해결하기 위해 개발된 시스템으로 다양한 종류의 데이터를 다루고 고성능 메시지 교환 시스템 역할을 할 수 있도록 설계되었습니다. 그렇다면 데이터 파이프 라인 문제란 무엇일까요? 이를 이해하기 위해서는 먼저 발행/구독(Pub/Sub) 메시징 개념을 알아볼 필요가 있습니다.Pub/Sub 메시징 패턴에서는 전송자(메시지 발행)가 데이터를 특정 수신자(구독하는 쪽)에게 직접 보내는 것이 아니라, 브로커를 통해 분류된 메시지를 전송하고, 수신자는 자신이 필요한 메시지를 구독하는 방식으로 데이터를 전달받습니다. 이때 브로커는 메시지를 중개하며, 데이터의 흐름을 효과적으로 관리하는 역할을 합니다. 그렇다면 왜 브로커가 필요하고 데이터 파이프 라인..
1. 테스트 환경에서의 Elasticsearch: Testcontainers 활용하기최근 검색 서비스를 개발하면서 엘라스틱서치(Elasticsearch)를 활용하고 있었습니다. 기본적인 개발 환경에서는 문제가 없었지만, 테스트를 진행하는 과정에서 몇 가지 불편함이 있었습니다. 실제 운영 중인 Elasticsearch를 테스트에 사용해야 한다?→ 테스트 데이터가 운영 데이터에 영향을 줄 위험이 있음.테스트를 위한 별도의 Elasticsearch를 도커 환경에서 띄워야 한다?→ 컨테이너 실행 여부를 확인하고 관리하는 과정이 번거로움.CI/CD 환경에서 테스트 시 Elasticsearch 인스턴스를 어떻게 관리할 것인가?→ CI 환경마다 Elasticsearch를 설치하는 것은 비효율적이며, 환경에 따라 테스..