Pletor Engineering
제품을 만들며 쌓은 경험적 자산을 공유합니다.
제품을 만들며 얻은 백엔드, 관측성, 인프라, 운영 경험을 가볍게 읽히는 실무 노트로 정리합니다.
Latest Posts
코드, 설정, 운영 기준을 함께 남기는 실무형 기술 글을 먼저 보여줍니다.
Kafka Active-Active의 핵심은 Kafka가 아니라 Ownership이다
Kafka 기반 Active-Active DR 아키텍처에서 Kafka가 해결하는 문제와 애플리케이션이 직접 책임져야 하는 Ownership, Outbox, Inbox, 장애 전환 전략을 정리합니다.
AI가 코드를 써도, 소프트웨어는 퇴고가 필요하다
바이브 코딩의 시대에도 쓸 수 있는 애플리케이션을 만들려면 왜 도메인 이해, 검수, 반복 수정이 필요한지 정리합니다.
Kafka partition은 괜찮다는데 디스크가 없다
Kafka 4.3의 Partition Size Percentage metrics가 retention 압력을 보여주는 방식과 한계, 그리고 log.dirs 물리 free space 모니터링이 여전히 필요한 이유를 정리합니다.
AI는 코드를 배웠지만, 소프트웨어는 운영에서 배운다
AI가 글과 코드로 배운 지식의 강점과 한계, 그리고 실제 소프트웨어 품질이 운영 피드백을 통해 개선되는 이유를 정리합니다.
Kafka Streams 4.2 이후, 장애를 덜 아프게 만드는 두 가지 변화
Kafka Streams 운영에서 자주 만나는 나쁜 레코드와 rebalance 문제를 Kafka 4.2 이후 DLQ 지원과 Streams Rebalance Protocol 관점에서 정리합니다.
Kafka 브로커 빼기 전에 먼저 Cordon부터
Apache Kafka 4.3에 추가된 cordoned.log.dirs 설정의 의미와 사용법을 정리합니다. 브로커나 log directory를 비우기 전에 새 replica 배치를 먼저 막는 운영 흐름을 다룹니다.
Kafka 4.0 Consumer Rebalance: 이제 조율은 브로커가 한다
Apache Kafka 4.0에서 GA가 된 새 rebalance protocol을 정리합니다. 기존 protocol과 무엇이 다르고, broker-side assignment와 incremental rebalance가 운영에 어떤 의미를 갖는지 다룹니다.
Kafka Streams와 EIP Aggregator: 모으는 것보다 끝내는 것이 어렵다
EIP Aggregator 패턴을 Kafka Streams로 구현할 때 중요한 것은 groupBy와 aggregate가 아니라 correlation key, state store, completion condition, late event 처리입니다.
Kafka는 왜 Outbox와 Inbox 사이에 잘 맞을까
MSA 비동기 호출에서 Outbox와 Inbox 패턴이 필요한 이유와, Kafka가 이 패턴의 메시지 경로로 잘 맞는 이유를 정리합니다.
Kafka가 끼어도 Trace는 끊기지 않아야 한다
MSA 흐름 중간에 Kafka가 들어오면 동기 호출처럼 trace가 자연스럽게 이어지지 않습니다. Kafka header로 trace context를 전파하고 producer와 consumer instrumentation을 설계하는 관점을 정리합니다.
Kafka는 메모리가 남아 있는데 왜 OOM이 났을까
Kafka broker의 메모리를 heap과 page cache만으로 보면 놓치기 쉬운 direct buffer를 다룹니다. 시스템 메모리와 heap이 남아 있어도 direct memory 한도 때문에 allocation failure가 날 수 있습니다.
수정하지 않을 YAML 로그를 왜 전부 객체로 만들까
초당 수십/수백 건의 YAML 로그를 선별하던 경험을 바탕으로, 로그처럼 immutable한 데이터를 처리할 때 DOM/object tree 대신 stream/event 기반 처리를 고려해야 하는 이유를 정리합니다.
Docker Compose는 편한데, .env 비밀값은 너무 쉽게 남는다
Pletor가 공개한 Envoyage를 소개합니다. Docker Compose 흐름은 유지하면서 평문 secret env 파일이 Git, 백업, 배포 디렉터리에 남는 위험을 줄이는 작은 도구입니다.
JVM 메트릭만으로는 컨테이너를 설명할 수 없다
Pletor가 공개한 node-metrics-agent를 소개합니다. Java 애플리케이션에서 host와 container node metric을 JMX로 노출하고 JMX exporter로 Prometheus에 연결하는 방법을 정리합니다.
Kafka Client Metrics는 관측의 빈틈을 메울 수 있을까
KIP-714로 도입된 Kafka 클라이언트 원격 메트릭 수집의 구조, 지원 메트릭, 설정 방법, 그리고 운영 현실에서의 한계를 정리합니다.
Kafka가 잘하는 대용량과 보내면 안 되는 대용량
Kafka는 대용량 이벤트 스트림에 강하지만 대용량 파일 전송 채널로 쓰면 시스템 전체의 storage amplification이 커지는 이유를 정리합니다.
Kafka Broker가 느려졌지만 Kafka가 원인은 아니었다
특정 Kafka broker의 throughput 저하와 ISR 이탈을 추적하다가 VM 아래의 네트워크 블록스토리지 경합까지 내려간 경험을 정리합니다.
컨테이너 설정 주입의 마지막 한 끗: env에서 config로
컨테이너에 주입된 환경 변수를 애플리케이션이 실제로 읽는 설정 파일로 바꾸는 gomplate 기반 실무 패턴을 정리합니다.
겉보기엔 균형 잡힌 Kafka, Broker Metrics는 다르게 말한다
Kafka cluster에서 leader partition 수가 균등해도 실제 부하는 다를 수 있습니다. partition별 traffic, network, storage 사용량을 함께 보는 balancing 기준을 정리합니다.
Kafka의 디스크는 어디로 가고 있나: Object Storage로 옮겨지는 Streaming Storage
WarpStream, AutoMQ, Apache Fluss, Kafka Diskless Topics를 통해 Kafka 생태계가 broker-local disk를 벗어나 object storage를 바라보는 이유와 차이를 정리합니다.
Consumer Group만으로는 Queue가 되지 않는다: Kafka Share Group의 의미
Kafka Share Group이 왜 추가되었는지, 기존 Consumer Group과 무엇이 다른지, 어떤 기준으로 적용해야 하는지 정리합니다.
Konduo Community를 Docker Compose로 10분 안에 시작하기
Redis, PostgreSQL, Kafka 등 여러 운영 대상을 통합 관리하는 Konduo Community를 Docker Compose로 빠르게 구성하고 선택형 매뉴얼, Prometheus, 첫 로그인까지 확인합니다.
AI 애플리케이션에서 Redis가 맡는 다섯 가지 역할
AX 시대의 AI 애플리케이션에서 Redis가 캐시, 세션 상태, 검색 보조, 비동기 작업, 운영 제어 계층으로 쓰이는 방식을 정리합니다.
Consumer Lag은 건강 점수가 아니다: Kafka Consuming Pressure라는 관점
Kafka Consumer Lag을 절대값으로만 판단하지 않고, producer 유입량과 consumer group 처리 능력을 함께 보는 운영 관점을 정리합니다.
Consumer Group인데 Consumer가 아니다: Kafka 안에서 노드들이 서로를 찾는 법
Kafka Connect와 Schema Registry가 Kafka의 group coordination을 활용해 노드 멤버십, 리더 선출, 작업 분배를 다루는 방식을 정리합니다.
로그가 병목이 될 때: Log4j2 Appender의 무거운 일을 요청 경로 밖으로 밀어내기
Log4j2 Custom Appender를 만들 때 hot path, bounded queue, AsyncAppender, throttling을 어떻게 바라보면 좋은지 실전 관점으로 정리합니다.
Redis에도 Consumer Group이 있다: Streams를 캐시 너머로 보기
Redis Streams를 key-value 캐시 너머의 append-only event log, consumer group, pending message 처리 관점에서 살펴봅니다.
Tags
태그로 기술 영역과 운영 경험을 빠르게 찾아볼 수 있게 정리합니다.