@ GS칼텍스VOC AI 대시보드 - GS칼텍스
VOC AI 대시보드 단독 설계·구현 — 수작업 → 1000+/day 자동 분류, 4채널 통합
셀러 1만명이 100+ 마켓을 다루는 환경을, 비동기 워크플로우로 안전하게 떠받친 사례.
문제는 단순해 보였다. 셀러가 상품을 만들고 100개의 오픈마켓에 동시에 올리고, 재고·주문을 마켓 ↔ 셀러로 동기화해야 한다. 그런데 들여다보면 마켓마다 API 형식이 다르고, 동기로 호출하면 셀러 화면이 그 자리에서 멈췄으며, 실패가 나도 어느 마켓에서 무엇이 빠졌는지 사람이 직접 들춰봐야 했다.
문제는 "여러 마켓에 보낸다"가 아니라 "여러 마켓에 보내는데 안전하게, 빠르게, 추적 가능하게" 였다. 그래서 어댑터 한 줄을 잘 만드는 게 아니라, 요청 → 큐 → 처리 → 결과 라는 비동기 워크플로우 한 줄기를 0에서 빌딩해야 했다.
관찰 노트
마켓 API가 다 달랐다
응답 형식·인증·에러 코드·재시도 정책이 마켓마다 다른 100가지
동기 처리가 셀러 UX를 막았다
등록 버튼 한 번에 100번의 API 호출을 셀러가 그 자리에서 기다렸다
실패가 사람 손에 도달하지 않았다
어느 마켓에서 무엇이 빠졌는지 운영자가 모르거나 늦게 알았다
tradeoff초기 추상화 비용 vs 장기 유지보수 비용
셀러 요청은 즉시 SQS에 적재되고 응답은 빠르게 반환. Lambda 워커가 백그라운드에서 마켓별 큐를 병렬로 처리. 셀러 화면이 더 이상 마켓 API 응답에 묶이지 않음.
같은 메시지가 여러 번 와도 결과가 같도록 idempotency key 사용. SQS 자동 재시도가 안전해지고, 운영자가 손으로 메시지를 다시 던져도 중복 처리가 안 일어남.
전송 실패는 SQS 자동 재시도 3회, 한계 초과 시 DLQ로 격리. DLQ에 메시지가 적재되면 #oncall-onsel 채널로 즉시 알림 — 실패가 사람 손에 도달하기까지의 시간이 분 단위로 줄어듦.
규모
셀러 1만명+
100+ 마켓 동시 운영
안정
동기 → 비동기
셀러 응답 즉시 · 처리 백그라운드
확장
신규 마켓
어댑터 한 곳만 추가
신뢰
DLQ → Slack
실패 감지 분 단위
“대규모 운영에서 안정과 추적을 동시에 잡는 백엔드 엔지니어.”
마켓별 API 차이와 동기 처리의 UX 비용을 패턴으로 짚어냄
SQS · Lambda 비동기 + Lambda 멱등 + 어댑터 인터페이스 통일
셀러 1만명+ 운영 · DLQ → Slack 으로 실패 감지 분 단위
More work