AI 챗봇 인프라 클라우드 마이그레이션 — AWS ECS에서 GKE/AKS 멀티클라우드 대응까지
고객사의 클라우드 플랫폼이 미정인 상황에서 AWS ECS 인프라를 GCP GKE와 Azure AKS로 대응할 수 있도록 Terraform 코드를 준비했다. Cloud Run을 선택하지 않은 이유와 클라우드별 비용/아키텍처 비교를 함께 정리한다.
실무에서 겪은 문제 해결 과정과 기술적 의사결정을 기록합니다.
고객사의 클라우드 플랫폼이 미정인 상황에서 AWS ECS 인프라를 GCP GKE와 Azure AKS로 대응할 수 있도록 Terraform 코드를 준비했다. Cloud Run을 선택하지 않은 이유와 클라우드별 비용/아키텍처 비교를 함께 정리한다.
Terraformer로 AWS 인프라를 임포트한 결과 50개 파일 3500줄이 나왔지만 품질은 낮았다. 보안 개선과 모듈화 그리고 상태 관리 중앙화와 비용 최적화까지 프로덕션 수준으로 개선한 과정을 정리한다.
Google ADK 기반 멀티 에이전트 챗봇을 다국어로 확장하기 위해 5가지 방법을 검토하고 3가지를 탈락시킨 과정. 싱글톤 에이전트의 불변 instruction이라는 제약 아래에서 내린 설계 판단을 정리한다.
AWS Batch와 GPU Spot Instance를 활용한 비동기 문서 전처리 파이프라인 설계, 카테고리별 파이프라인 분리, 콜백 패턴 기반 상태 추적을 구현한 경험을 정리한다.
Milvus 벡터 DB의 버전별 컬렉션 관리, Alias 기반 블루-그린 배포, 스냅샷 기반 버전 생성, 문서 상태 머신 등 RAG 지식 관리 시스템의 설계 과정을 정리한다.
병렬 실행 멀티 에이전트 시스템에서 사용자 1명의 메시지에 여러 에이전트가 동시 응답할 때 피드백 추적과 모니터링을 위한 메시지 그룹핑 스키마 설계와 Flyway 무중단 마이그레이션 경험을 정리했다.
Google ADK 기반 멀티 에이전트 시스템에서 대화가 길어질수록 토큰이 폭증하는 문제를 해결하기 위해 적용한 토큰 추정 Fallback 체인, State 정리, LLM 기반 대화 요약 압축 전략을 정리한다.
Google ADK 기반 챗봇에서 RxJava3의 concat, merge, zip, defer를 활용하여 의존성이 있는 에이전트는 순차로 독립적인 에이전트는 병렬로 실행하는 3-Phase 오케스트레이션 아키텍처를 설계한 경험을 정리한다.
정식 운영 전 단계에서 ECS Fargate 인프라 비용이 부담되어 NAT Gateway 제거와 EC2 Spot 전환을 적용했다. Public Subnet 배치 판단 근거와 VPC Endpoint 구성 등 각 단계의 트레이드오프를 정리한다.
병렬 실행 멀티 에이전트 챗봇에서 실제 고객 피드백을 통해 발견한 답변 중복, 흐름 단절, 모호한 추천 등의 문제를 프롬프트 튜닝으로 해결한 패턴을 정리한다.
Google ADK 기반 챗봇에서 다단계 정보 수집 워크플로우를 상태 머신 패턴으로 설계하고 Parser → Router → Domain Agent 3단계 파이프라인으로 구현한 경험을 정리했다.
Milvus 벡터 DB의 파티션을 PRODUCT_SPECS, MARKETING, FAQ로 분리하고 에이전트별로 다른 소스를 조합하여 검색하는 Dual-Source RAG 전략과 Auto-Discovery 모드를 설계한 경험을 정리했다.
외부 시스템 의존성이 높은 프로덕션 챗봇의 타임아웃, 재시도, Fallback, Feature Toggle을 통한 4계층 방어 전략
Spring WebFlux와 SSE로 멀티 에이전트 챗봇의 실시간 응답을 스트리밍하고, 메타데이터 필터링, Fire-and-Forget 완료 추적, 음성 통합 3가지 모드를 구현한 경험을 정리했다.
Intent 분류 체계 설계, 컨텍스트 우선 오버라이드, 모호한 질문 감지, 오분류 방지를 위한 프롬프트 엔지니어링 전략을 실제 B2B 챗봇 운영 경험을 통해 정리했다.
Spring Data의 Querydsl Web Support에 Alias 시스템을 도입하여 Entity 노출 문제를 해결하고, API 스펙의 안정성과 문서화를 Single Source of Truth로 관리하는 아키텍처를 설계했다.
릴리즈마다 같은 시나리오를 수동으로 반복하는 데 시간이 너무 많이 들었다. 테스트 피라미드 재설계와 계약 테스트 도입으로 반복을 줄이고 QA가 탐색 테스트에 집중할 수 있는 구조를 만들기까지의 고민을 정리한다.
S3 버킷 기반 사내 Maven Repository를 운영하다 버전 확인이 불편하고 설정이 복잡해서 GitHub Packages로 전환했다. Gradle 설정부터 Jenkins 배포까지 전환 과정과 실제로 겪은 문제를 정리한다.
RestDocs 컨트롤러 테스트에서 JSON 필드 설명을 하나하나 작성하는 반복 작업이 지루해서 Kotlin DSL로 간결하게 만들었다. Kotest와 확장 함수를 활용한 테스트 DSL 설계 과정을 정리한다.
AWS Cognito Identity Pool과 S3를 연동하여 인증 기반 파일 업로드를 구현하는 방법을 백엔드(Java)와 클라이언트(JavaScript) 양쪽에서 설명한다.
분산된 Spring RestDocs 문서를 Swagger UI로 통합하고 epages-restdocs 플러그인과 Jenkins CI/CD를 활용해 자동화된 API 문서 서버를 구축한 과정을 정리한다.
운영 환경에서 특정 버전으로 롤백했더니 설정 정보가 현재 마스터 기준으로 내려와서 서비스가 정상 동작하지 않았다. Jenkins와 Docker를 활용해 배포 버전별로 Cloud Config 라벨을 자동 지정하는 방식으로 해결한 과정을 정리한다.
여러 Java 프로젝트에서 개별 관리되던 설정 파일을 Spring Cloud Config로 중앙화한 경험을 정리한다. 도입 배경, Server/Client 구성, 암호화, 테스트 환경 분리, 동적 갱신까지 다룬다.
Spring Data JPA의 @QuerydslPredicate를 활용하여 동적 쿼리를 생성하고, 타입 기반 커스터마이징으로 확장성과 재사용성을 높이는 방법을 정리했다.
Jxls의 기본 커맨드로는 반복 처리 중 셀 병합이 안 된다. 계층 구조 데이터를 엑셀로 출력하면서 상위 항목 셀을 자동 병합하는 EachMergeCommand를 만들어 해결했다.