LLM 기반 상품 검수 자동화 시스템 설계
Go, Gin, Kafka, PostgreSQL
개요
위탁자 유치 마케팅이 시작되며 접수량이 1.5배 증가, 미처리 재고 4주치 적체로 창고 한계 도달. 프롬프트 설계와 백엔드 파이프라인 구현을 단독 수행
문제
- 처음엔 인력 충원으로 접근했지만 효과가 비례하지 않아 검수 라인을 작업 단위로 분해. 병목은 물량 처리가 아니라 자사 카테고리, 소재, 색상, 스타일을 판별하는 해석 업무였고, 이 업무가 요구하는 암묵지 학습이 신규 인력 온보딩 장기화와 조기 이탈을 만들고 있었음. 문제를 인력 부족이 아닌 ‘해석 업무의 사람 숙련 의존도’로 재정의
- 현재 일 5,000건 처리량 기준으로 1~2년 재확장 없이 운영 가능하려면 최소 일 10,000건은 감당해야 함
- 검수~전시 2시간 SLA: 검수 시작과 완료 알림 간격이 짧을수록 위탁자 반응이 빨라져 전시가 당일 시작된다는 내부 통계 기반의 운영 규칙
해결
- Vision → Text 2단 파이프라인으로 시각 추출과 매핑 판단 분리, 정확도 88%. 키워드 전처리 기반 동적 few-shot으로 90%까지 끌어올림
- fan-out 동시 추론으로 7개 속성 순차 처리 시 상품당 p50 80초가 걸리던 것을 30초로 단축. 속성별 Kafka 토픽 분리도 검토했으나 토픽 수 증가와 Orchestrator 구현 복잡도로 보류
- 병렬 Consumer로 컨슈머 그룹 내부 처리량 확보. Kafka 파티션 증설은 한 번 늘리면 줄일 수 없는 비가역 변경이라, 현재 트래픽 대비 과투자로 판단해 보류
- 추론 실패 토픽 + 3회 재시도 후 DLQ로 처리 흐름 차단 방지. 속성별 추론 상태를 DB에 기록해 부분 실패 시 7개 속성 전체가 아닌 미완료 속성만 재호출, 상품당 최대 6회 LLM 호출 절감
- 주 LLM API 장애 시 Circuit Breaker가 감지하고 Fallback 모델로 호출 전환해 검수 흐름 중단 방지. 모델별 프롬프트로 정확도 편차 5%p 이내 유지
성과
- 1인당 검수 처리량 300개 → 1,500개, 검수 인력 11명 → 3명, 월 1,500만원 운영비 절감. 창고 확장 없이 접수량 2배 수용
- 검수~전시 SLA 달성률 55% → 95%
- LLM API 장애 상황 DLQ 유입률 0.01%