Activities / Study / GitAIOps

GitAIOps – Cpt8, 고도화

Kubernetes, AWS, Terraform, Linux 운영 경험을 정리한 기술 블로그입니다.

Summary

  • Strimzi와 KRaft 기반 Kafka를 구성하고 Notiflex API를 Producer, Consumer로 연결해 이벤트 드리븐 처리 도입
  • OpenTelemetry SDK와 Tempo를 연동해 HTTP 요청부터 Valkey, Kafka까지 이어지는 분산 트레이스 구성
  • Kubernetes CronJob으로 /health를 주기적으로 호출하는 배치 작업 자동화
  • 복잡해진 운영 절차를 command-guardrails/에 명시적인 실행 순서와 검증 기준으로 기록

Thoughts

  • command-guardrails/로 위험명령시 사전 확인 > 실행 > 사후 검증의 절차를 명시적으로 반복사용가능
    • prompt-guardrails 보다 가볍게 주제/이슈 위주로 설정하는 식으로 작은 시작 가능

8장. 고도화

  • 서비스가 발전하며 아래 3가지 문제 발생
    • 동기식 API 지연: api서버가 알림을 직접 처리하는 구조, 요청이 몰리면 응답 지연 및 타임아웃 발생
    • 서비스간 가시성: 서비스가 많아지며 장애구간 확인의 어려움
    • 수동 작업: 일일 통계, 알림 재처리등은 수동으로 진행
  • 다음 3가지 구조를 추가하여 개선
    • 이벤트 드리븐: kafka를 도입하여 비동기 메세지 처리
    • 분산 트레이싱: Tempo를 사용하여 api 요청 간 성능 확인
    • 배치작업: k8s native CronJob 활용

8.1 이벤트 드리븐: 카프카

  • /id 요청을 처리한 API가 Kafka에 이벤트를 발행하고 Consumer가 비동기로 처리하는 구조 구성

8.1.1 클로드 코드에게 메시지 큐 물어보기

  • cc에게 API 요청을 비동기로 처리하는 방식 탐색 질문
    • 대용량 이벤트 스트림과 Consumer 확장, 재처리를 지원하는 Apache Kafka 추천
    • Kubernetes에서는 Kafka, KafkaTopic CRD로 선언적 관리가 가능한 Strimzi Operator 조합 제안

API 요청을 비동기로 처리하는 방식 탐색

8.1.2 다른 도구는 없는지 비교해보기

  • cc에게 Kafka외에 다른 메세지큐를 현재 환경 기반 비교 요청
    • Kafka는 높은 처리량, 파티션, Consumer Group, 이벤트 보존에 강점이 있으나 운영 복잡도 존재
    • RabbitMQ는 전통적 Queue 처리, NATS는 가벼운 통신, Redis Streams는 기존 Redis 활용에 적합
    • GitOps 관리와 향후 이벤트 증가를 고려해 Strimzi Kafka와 KRaft 모드 추천

Kafka외에 다른 메세지큐를 현재 환경 기반 비교

8.1.3 카프카를 설치하고 이벤트 드리븐 구성하기

  • cc에게 kafka 구성 시작 요청
    • kafka Namespace에 Strimzi Operator를 설치하고 worker-pool에 배치
    • operator 동작을 위한한 KafkaNodePool, Broker, Topic 추가
    • Go 애플리케이션에 Kafka Producer/Consumer 추가
    • 배포 후 /id 호출마다 notifications 토픽에 이벤트가 발행되고 Consumer 로그에 동일 ID가 나타나는지 확인

kafka 구성 시작

8.2 분산 트레이싱: 템포

  • 하나의 요청이 API,Valkey,Kafka 등을 사용하게 되면서 장애 및 지연 구간 확인의 어려움
  • 단일 요청이 각 구간을 거치는 시간과 실패 지점을 하나의 Trace로 연결

8.2.1 클로드 코드에게 분산 트레이싱 도구 물어보기

  • cc에게 api 요청 지연의 추적방법 질문
    • 요청시 지연과 실패를 추적하는 분산 트레이싱과 현재 환경에선 Grafana tempo 권장

api 요청 지연의 추적방법

8.2.2 다른 도구는 없는지 비교해보기

  • cc에게 다른 트레이싱 도구와 tempo의 비교 요청
    • Tempo는 Grafana와 바로 연동되고 Trace ID 중심 저장으로 현재 환경에 적합
    • Jaeger는 기능이 풍부하지만 Collector, 스토리지 운영 요소 증가
    • Zipkin은 단순하지만 OpenTelemetry 중심 구성과 확장성에서 제한되어 Tempo 추천

다른 트레이싱 도구와 tempo의 비교

8.2.3 템포 설치하고 트레이싱 설정하기

  • cc에게 tempo 구성하고 tracing 설정 요청
    • Tempo를 monitoring ns 의 ops-pool에 설치하고 OTLP gRPC 4317 수신 활성화/Gafana 등록
    • Go 앱에 OpenTelemetry SDK와 OTLP gRPC Exporter를 추가하고 Tempo 주소 주입
    • 배포 후 /id 요청에서 handle-id > valkey-incr > kafka-produce > http-response Span 확인

tempo 구성하고 tracing 설정

8.3 배치 자동화: 크론잡

  • 사람이 반복 실행하던 상태 확인(헬스체크)을 Kubernetes 스케줄러가 주기적으로 수행하도록 자동화

8.3.1 클로드 코드에게 주기적 작업 방법 물어보기

  • cc에게 API health check 자동화 방법 질문
    • 추가 Controller가 필요 없고 GitOps로 관리 가능한 단순 단일 작업은 CronJob 제안
    • 복잡한 DAG는 Argo Workflows, 데이터 파이프라인은 Airflow가 적합

API health check 자동화 방법

8.3.2 크론잡 생성하기

  • cc에게 서비스 헬스체크하는 k8s 크론잡 구현 요청
    • 5분마다 실행하고 중복 실행을 금지하며 성공, 실패 이력을 각각 3개 보존
    • curlimages/curl 컨테이너를 ops-pool에 배치해 내부 Service의 /health가 HTTP 200인지 확인
    • CronJob을 적용한 뒤 즉시 생성한 테스트 Job의 완료 조건과 로그 검증
    • 수동 테스트와 실제 스케줄 Job 모두 Health check passed (HTTP 200) 및 {“status”:”ok”} 확인

서비스 헬스체크하는 k8s 크론잡 구현

8.4 마무리: command-guardrails/로 위험 작업 절차 정리

  • 복잡한 작업을 단순 금지하는 대신 실행 전 확인, 적용 순서, 검증, 롤백 절차를 저장소에 명문화

8.4.1 시스템이 복잡해지면

  • App of Apps, 노드풀, 테넌트, Kafka, Tempo까지 연결되면서 한 명령의 영향 범위 확대
  • KafkaTopic 삭제처럼 데이터 손실 가능성이 있는 작업은 경우에 따라 실제로 필요할 수도 있음
  • 실행제어가 아닌, 작업순서/확인/실행의 과정을 규칙화

8.4.2 command-guardrails/ 작성

  • cc에게 command-guardrails/로 위험 작업(카프카 토픽등 데이터 삭제, 크론잡 수동 실행, 테넌트 리소스 정리) 실행 절차를 정의 요청
    • Kafka Topic 삭제 전 Consumer lag, 보존 데이터, Producer 사용 여부 확인 절차 작성
    • 변경 대상, 사전 조건, 승인 지점, 실행 명령, 검증과 복구 방법을 한 문서에 연결
    • 위험 명령 자체보다 안전하게 실행하기 위한 맥락과 순서를 저장소에서 버전 관리

command-guardrails/로 위험 작업(카프카 토픽등 데이터 삭제, 크론잡 수동 실행, 테넌트 리소스 정리) 실행 절차를 정의

8.4.3 7장 settings.local.json 체험과의 비교

  • settings.local.json은 로컬 환경에서 명령 패턴을 허용, 승인, 차단하는 기술적 권한 제어
  • command-guardrails/는 팀 전체가 공유하는 판단 기준과 단계별 운영 절차
  • 권한 파일로 위험 실행을 막고 가드레일 문서로 필요한 작업을 올바르게 수행하는 상호 보완 관계
  • /update-docs로 JOURNEY.md, ADR, claude-context/와 새 command-guardrails/ 반영

8.5 8장 가드레일 살펴보기

세부챕터유형참조 파일역할
8.1 탐색/비교탐색과 비교decision-guides/ch8/8.1-messaging.mdKafka 추천 + RabbitMQ/NATS 비교
8.1 실행실행prompt-guardrails/ch8/8.1-kafka.mdStrimzi 설치 + Producer/Consumer 구성
8.2 탐색/비교탐색과 비교decision-guides/ch8/8.2-tracing.mdTempo 추천 + Jaeger/Zipkin 비교
8.2 실행실행prompt-guardrails/ch8/8.2-tempo.mdTempo 설치 + OpenTelemetry SDK
8.3 탐색탐색decision-guides/ch8/8.3-cronjob.mdCronJob 소개 (라이트 가이드)
8.3 실행실행prompt-guardrails/ch8/8.3-cronjob.mdCronJob 생성 + 동작 확인
8장 마무리실행prompt-guardrails/ch8/command-guardrails-example.mdcommand-guardrails/ 절차서 신설 (Kafka Topic 삭제 / CronJob 수동 실행 / 테넌트 Namespace 삭제)

Leave A Comment