본문 바로가기

전체 글

(194)
[Coding Agent] Claude Code와 Codex의 프로젝트 설정 구조 이해하기 본 글은 AI를 활용해 초안을 작성하고, 작성자가 직접 검토·수정·보완하였습니다. Claude Code나 Codex 같은 Coding Agent를 처음 사용할 때는 대부분 채팅창에 직접 요청하는 방식으로 시작합니다. “이 기능을 구현해주세요.”“이 코드가 어떤 역할을 하는지 설명해주세요.” 그런데 실제 개발 업무에서 반복해서 사용하다 보면 매번 비슷한 내용을 Agent에게 알려주고 있다는 것을 발견하게 됩니다.Controller에는 비즈니스 로직을 작성하지 않습니다.Controller는 Application Service를 호출합니다.JPA Entity를 API Response로 직접 반환하지 않습니다.... Coding Agent를 가끔 사용한다면 매번 알려줘도 큰 문제는 없습니다. 하지만 개발 환경의.. 2026.07.15
[Kafka] Consumer Lag이 쌓였을 때 먼저 봐야 할 것들 Kafka를 운영하다 보면 consumer lag이 쌓이는 상황을 자주 마주합니다. 이때 가장 위험한 대응은 lag 수치만 보고 바로 컨슈머를 늘리거나 파티션을 늘리는 것입니다. Consumer lag은 원인이 아니라 결과 지표입니다.lag이 쌓였다는 것은 컨슈머 그룹이 현재 토픽에 쌓이는 메시지를 처리 속도만큼 따라가지 못하고 있다는 뜻이며 원인은 다양합니다. 따라서 Kafka consumer lag을 해결할 때는 먼저 원인을 분리해야 합니다.유입량이 갑자기 늘었을 수 있습니다.컨슈머 처리 로직이 느려졌을 수 있습니다.DB나 외부 API가 병목일 수 있습니다.특정 key로 메시지가 몰려 핫파티션이 생겼을 수 있습니다.리밸런스가 반복되면서 컨슈머가 안정적으로 메시지를 읽지 못하고 있을 수도 있습니다.이 .. 2026.06.19
[Kafka] Producer 메시지 전송 보장 수준 (최대/최소/정확히 한 번) 메시지 전송 보장 수준Kafka Producer의 메시지 전송 보장 수준은 크게 "최대/최소/정확히 한 번" 세 가지로 나눠볼 수 있습니다.최대 한 번 전송 (at most once)acks=0Broker 응답을 기다리지 않음중복 전송 없음유실 가능 최대 한 번 전송은 메시지가 0번 또는 1번만 전달되는 방식입니다. 즉, 중복 전송은 발생하지 않지만 메시지 유실은 발생할 수 있습니다. Producer는 Broker의 저장 성공 응답을 기다리지 않고 메시지를 전송된 것으로 간주합니다. 따라서 네트워크 장애, Broker 장애, Leader 변경 등의 이유로 메시지가 Kafka에 기록되지 않았더라도 Producer는 이를 알기 어렵습니다. 즉, 최대 한 번 전송은 중복을 허용하지 않는 대신 유실을 감수하는.. 2026.06.17
[Kafka] Producer acks, Consumer AckMode 그리고 Listener Kafka Producer는 메시지가 기록될 Partition의 Leader Broker를 찾아서 해당 Leader에게 직접 메시지를 전송합니다. Follower Broker는 Producer로부터 메시지를 직접 받지 않습니다. Follower는 Leader Broker로부터 데이터를 복제합니다. 이 구조를 이해하면 acks, ISR(In-Sync Replica), min.insync.replicas, enable.idempotence, max.in.flight.requests.per.connection 같은 설정이 왜 필요한지 더 쉽게 이해할 수 있습니다. 이 설정들은 단순히 전송 속도만 정하는 옵션이 아니라, 장애 상황에서 메시지를 어디까지 안전하게 저장할 것인지, 중복 기록을 어떻게 막을 것인지, .. 2026.05.24
[Kafka] Producer 메시지 전송 방식 Kafka Producer는 메시지를 어디로 보낼까?Kafka에서 Producer가 메시지를 보낼 때, 메시지가 아무 브로커에 전송되는 것이 아닙니다. Producer는 레코드가 들어갈 Topic-Partition의 Leader Replica를 보유한 브로커에게 Producer 요청을 보냅니다. 이 브로커를 Leader Broker라고 부릅니다.조금 더 정확히는 Broker 자체가 Leader 라는 뜻은 아니며, Kafka에서 Leader와 Follower는 Broker의 고정 역할이 아니라, 특정 파티션 replica의 역할 입니다. Kafka 토픽은 여러 파티션으로 나뉘고, 각 파티션은 복제를 위해 여러 개의 replica를 가질 수 있습니다. 예를 들어, order-topic에 파티션이 3개 있고,.. 2026.05.03
[Kafka] Consumer 동작 방식과 리밸런싱 Consumer 동작 방식Kafka Consumer가 Topic을 subscribe 합니다.Kafka Consumer는 poll()을 반복 호출하면서 자신에게 할당된 partition의 메시지를 가져옵니다.※ 반복 호출은 고정된 시간 간격으로 실행되는 것이 아닌, 이전 poll()로 가져온 record들을 처리한 뒤 다시 poll()을 호출하는 방식partition에서 메시지를 가져온 뒤 commit을 통해 __conusmer_offset에 다음에 읽을 offset을 기록합니다. [auto.offset.reset]Consumer Group에 읽을 offset이 없거나 기존 offset이 유효하지 않을 때 어디서부터 읽기 시작할지를 정하는 설정입니다. 같은 Consumer Group 안에서 Consumer.. 2026.03.31
[Kafka] Producer 동작 방식과 파티셔닝 전략 Producer 동작 방식kafkaTemplate 객체의 send() 메서드를 통해, Broker로 record(message)를 전송할 수 있습니다.kafkaTemplate.send() 메서드에는 topic / key / value / partition 등 다양한 인자 값을 넘길 수 있으며,send() 인자로 넘어간 값을 토대로 ProducerRecord 객체를 생성한 뒤 전송됩니다.참고) org.springframework.kafka.core.KafkaTemplate 1. kafkaTemplate.send() 시 ProducerRecord 객체를 전송합니다.2. Serializer가 ProducerRecord 객체를 Byte[] 로 직렬화합니다.3. Partitioner가 전략에 따라 특정 Topic.. 2026.02.02
[Kafka] 핵심 개념 빠르게 알아보기 TopicTopic은 N개의 Partition으로 구성되어 있는 log 파일입니다.Topic은 시간의 흐름에 따라 Record(message)가 물리적인 파일에 순차적으로 write 됩니다.PartitionTopic을 N개로 쪼갠 로그 조각이 Partition 입니다.개별 Partition 내에서 순서가 보장되는 단위Partition은 Kafka의 병렬 성능과 가용성 기능의 핵심 요소입니다.Record(message)는 병렬 성능과 가용성을 고려해 개별 Partition에 분산 저장됩니다.Partition 과 Offset논리/개념 계층 물리/저장 계층(Disk File 관점)Topic > Partition > Segment(로그 파일 조각) > Record Batch, (index/timeindex 파일.. 2026.01.11