S2C 벤더포털 · 파트 교육용 사례

사람이 눈으로 하던 검수를
AI가 추론하게

벤더 포털에 Claude Code와 함께 얹은 두 가지 AI 기능 — OQC 출하검사 자동판독Shipping Guideline 챗봇. 이 문서는 "무엇을 만들었나"보다 어떻게 추론하고 어떻게 협업했나에 초점을 둔 파트원 교육용 사례입니다.

Spring MVC · JSP · MyBatis Gemini Vision / Flash RAG (문서 근거 인용) AWS S3 서브에이전트 검토
🎯 핵심 교훈: AI에게 코드가 아니라 "판단"을 시키고, 그 판단의 근거를 매번 검증한다.
한눈에 · 개요
어떤 안을 놓고 · 어떻게 설계하고 · 무엇으로 구현했나

상세로 들어가기 전에, 이 사례가 어떤 선택지를 검토해 · 어떤 원칙으로 설계하고 · 어떤 기술을 활용했는지를 먼저 정리합니다. 아래 세 축이 이 문서 전체를 관통합니다.

🧭 검토한 안 (선택지)
  • 단순 OCR 자동화 → 읽은 값으로 "판단"까지 하는 추론형
  • 완전 자동 판정 → 3단계(통과·확인·차단)로 사람과 분담
  • 규칙 기반 파싱 → 비전 LLM 판독 + SKU 마스터 제약
  • 착수 전 월 1,000건 비용·ROI부터 추산해 타당성 확인
🏗️ 설계 원칙
  • AI 역할 한정 — 확실한 건 통과, 애매한 건 사람
  • 판정엔 반드시 근거 (원문·이미지·대조값)
  • SKU 마스터로 오인식 차단 + 수량 역산 검증
  • 환각 방지 — 못 하는 건 못 한다고 명시
  • 서브에이전트 다관점 검토로 미커버 실패모드 발굴
  • OQC 판독과 챗봇이 근거·판독 인프라 공유
⚙️ 기술적 활용
  • Gemini Vision / Flash 판독
  • RAG — 가이드라인 페이지 이미지 렌더 + 근거 인용
  • CI/PL·SKU 마스터 대조 · 색상 약어 테이블
  • rar5 / zip 추출 · 이미지 보정
  • 운영 DB 회귀테스트 (수십~수백 건)
  • SSE 스트리밍 · 메모리 맥락 유지 · deep-research(OCR 논문)
배경
왜 만들었나

벤더가 제품을 출고할 때 OQC(출하검사) 사진을 포털에 올립니다. 담당자는 그 사진 수십 장을 열어 카톤 라벨의 SKU·수량·무게·색상이 지시서(CI/PL)와 맞는지를 눈으로 대조했습니다. 성수기엔 월 수백 건 — 놓치면 오색상·오수량 제품이 그대로 해외로 배송되는 사고로 이어졌습니다.

"업체가 OQC 파일을 올리면, 우리가 그걸 OCR해서 자동으로 올바른지 알 수 있게 하는 거야."
— 2026-06-04, 첫 정의
문제의 재정의
단순 "글자 읽기(OCR)"가 아니라, 읽은 정보로 "이 출고가 맞는가"를 추론하는 문제로 재정의한 것이 출발점.
"완벽히 자동은 아니어도 된다. 확실한 건 통과, 애매한 건 사람이 보게."
— 설계 원칙
AI의 역할 한정
AI가 100% 판정하려 들지 않고, 확신 가능한 것만 거르고 불확실은 사람에게 넘기는 3단계 구조로.
기능 ① · OQC OCR 자동판독
파이프라인
벤더 업로드 → 판정 → 근거 제시
📤
업로드
OQC 사진·PDF·rar/zip (S3 저장)
🔎
OCR 판독
Gemini Vision — 라벨·제품 SKU·수량·무게·EAN·색상
📐
대조 검증
CI/PL·SKU 마스터 · 박스당수량 역산
⚖️
3단계 판정
통과 / 확인 / 차단
🧾
근거 제시
원문·이미지·AI 메모 + 반려 알림
자동통과
CI/PL·마스터와 모두 일치하고 신뢰 근거(ERP 데이터 등)가 있는 건 — 사람 개입 없이 통과.
담당자 확인
표본 부족·라벨 인식 실패·수식어 차이 등 애매한 건 — 사람이 근거를 보고 확정.
차단
오색상·오수량·다른 SKU 등 명백한 불일치 — 차단하고 업체로 반려 사유 통지.
추론 방식 · 교육 핵심
"글자를 읽는 것"과 "판단하는 것"은 다르다

개발 과정의 절반은 코딩이 아니라 "어떤 정보로 무엇을 추론할 수 있는가"를 함께 따진 대화였습니다. 아래는 실제로 쌓아 올린 추론 계층입니다.

1 · SKU는 마스터로 가둔다
OCR이 ACS10033ACS1OO33으로 오독할 수 있으니, 읽은 값을 SKU 마스터에 존재하는 값으로만 제약해 오인식을 원천 차단.
2 · 수량은 역산으로 검증
사진 속 수량 합계는 참고값일 뿐. 박스당수량 × 카톤 수 = 총수량 역산으로 CI/PL과 맞는지 확인. 이너박스면 이너 수량과 비교.
3 · 카톤은 첫·끝만 봐도 된다
1~7 같은 연속 카톤은 첫 라벨로 묵시 처리, 끝(잔량) 카톤은 첫 카톤을 따라감. 카톤 번호별로 무게(NW/GW)를 맞춰 검증.
4 · 색상은 약어까지 흡수
Black vs MttBK(무광) 같은 수식어 차이를 색상 약어 테이블로 흡수해 거짓 경고를 줄임. 실제 오색상 출고 사고를 잡기 위함.
5 · 흐림·회전·압축도 처리
흐린 이미지 판정 가능성 확인, 돌아간 이미지 보정, rar5/zip 추출(bsdtar)까지 — "안 읽히는 케이스"를 예외로 흘리지 않고 최대한 읽음.
6 · 못 하는 건 못 한다고 말한다
"손글씨 1/1이 1카톤인지 10 오독인지 사진 1장으론 구분 불가" — 한계를 명시하고 사람 확정을 최종 안전장치로 둠. 환각 방지 프롬프트.
추론 예시
판정에는 반드시 "근거"가 붙는다

모든 판정은 무엇을 읽어 · CI/PL·마스터의 어느 값과 대조했는지를 함께 남깁니다. 실제 판정을 재현한 예시입니다 — 통과·확인·차단 각각에 근거가 붙습니다.

자동통과
SKU ACS10033 · 카톤 1~6 — 라벨 SKU·색상·박스당수량이 마스터/CI·PL과 모두 일치. 박스당수량 × 카톤수 = 총수량 역산까지 일치. 근거: 카톤 이미지 #1~#6 · SKU 마스터 · CI/PL box no.1~6
담당자 확인
SKU ACS09116 · 카톤 #7 — 카톤 라벨 ACS09116 vs 제품 박스 ACS09116V0(버전 접미사 차이), NW 사진 2.1kg ≠ 지시서 2.0kg. 자동통과 대신 사람이 사진과 나란히 비교하도록 내림. 근거: 카톤 이미지 #7 · 제품 박스 라벨 · CI/PL box no.7
차단
라벨 색상 Black(BK) ≠ 주문 MttBK — 오색상 출고 의심으로 차단하고 업체에 반려 사유 통지. 색상 약어 테이블로 표기 차이를 흡수한 뒤에도 남은 명백한 불일치. 근거: 제품 라벨 색상 · 주문 색상(color_name_info)
협업 방식 · 교육 핵심
Claude Code와 이렇게 일했다

이 시스템은 "프롬프트 한 방"으로 나오지 않았습니다. 한 달여간 근거를 요구하고 · 실데이터로 검증하고 · 여러 관점으로 되짚는 반복이 만든 결과입니다. 파트에서 그대로 쓸 수 있는 협업 패턴을 뽑았습니다.

"너가 직접 받아서 돌려보고 분석해서 개선사항 나열해봐."
— 반복 등장
① 코드가 아니라 '판단'을 시킨다
AI에게 케이스를 직접 읽혀 스스로 이슈를 잡게 하고, 그 결과를 사람이 검수. "만들어줘"가 아니라 "분석해봐".
"왜 이렇게 판단했는지 근거 보여줘. 너가 직접 읽어서 데이터로 판단한 거야?"
— 반복 등장
② 결론이 아니라 '과정'을 검증
그럴듯한 답을 믿지 않고 근거·출처를 매번 요구. AI가 지어낸 판단(환각)을 이 습관이 걸러냄.
"운영 DB 붙여서 실제 OQC 78건 그대로 돌려봐."
— 검증 방식
③ 실데이터로 반복 검증
가짜 예시가 아니라 실제 운영 데이터 수십~수백 건을 태워 "통과/실패/사유"를 확인하며 정밀도를 끌어올림.
"서브에이전트 돌려서 올바른 구성인지, 구멍은 없는지, 남은 건 뭔지 조사해봐."
— 다관점 검토
④ 여러 관점으로 되짚기
'제품책임자' 등 역할이 다른 서브에이전트로 토론시켜, 혼자서는 못 보는 미커버 실패모드(파손·사은품 누락 등)를 드러냄.
"월 1000건 돌리면 대략 얼마야?"
— 착수 전
⑤ 비용을 먼저 계산하고 들어간다
만들기 전에 호출량·비용을 추산(월 ~500건, 연 ₩5만 내외). ROI가 맞는지 확인한 뒤 착수.
"정합성 올리려면 OCR 논문부터 조사해봐."
— 근거 기반 개선
⑥ 감이 아니라 근거로 개선
막연히 프롬프트를 바꾸는 대신 OCR 정합성 관련 논문을 조사해 개선 방향을 잡음. deep-research 활용.
"메모리에 기재해둬. 브랜치 바꿔도 너가 기억할 위치로."
— 맥락 유지
⑦ 맥락을 메모리에 고정
세션이 끊기거나 브랜치가 바뀌어도 작업 맥락·피드백·판정 규칙을 메모리로 복원. 긴 개발의 연속성 확보.
"ROI 높은 순으로 나열하고, 스텝마다 개선 효과를 알려줘."
— 점진 강화
⑧ 큰 것부터, 효과를 재며
한 번에 다 고치지 않고 효과 큰 순서로 단계별로. 각 단계의 개선 퍼센트를 확인하며 진행.
대화로 본 반복 · 교육 자료
요청과 추론이 오간 실제 장면

개선은 한 번에 되지 않았습니다. 담당자가 "왜?"를 묻고 AI가 다시 읽고 고치는 되짚음의 반복이 정확도를 만들었습니다. (실제 대화를 요약 재현)

장면 1 · 카톤별 무게를 어디에 대조하나
담당자
7번 카톤이면 PL의 box no.7 무게랑 재야 하는데, 왜 아직도 1번 값이랑 비교해?
AI
연속 카톤(1~7)은 첫 라벨로 묵시 처리하되, 무게(NW/GW)는 해당 카톤 번호의 PL 값과 대조하도록 고치겠습니다. 끝(잔량) 카톤은 첫 카톤을 따라갑니다.
담당자
맞아. 이런 식이 맞는지 다른 데이터도 몇 개 검증해보고, 맞으면 진행해.
장면 2 · "너가 직접 읽고 판단한 거야?" (환각 점검)
AI
손글씨 "1/1"이 1카톤 출고인지 10 오독인지는 사진 1장으론 구분 불가합니다. 자동통과하되 최종 안전장치는 사람 확정입니다.
담당자
그거 너가 직접 읽어서 데이터로 판단한 거야? 다시 확인해봐.
AI
다시 보니 제품 박스 SKU는 ACS09116V0, 카톤 라벨은 ACS09116 — 버전 접미사가 다릅니다. 자동통과가 아니라 "확인 필요"로 내리는 게 맞습니다.
장면 3 · 요청에 담긴 "왜"가 규칙이 된다
담당자
색상도 조사해줘. black·bk 등 다양하게 쓰는데, 박스 라벨 색상과 실제 들어간 제품 색상이 맞는지 확인용이야. 실제로 잘못 들어가 배송된 케이스가 있었거든.
AI
색상 약어 테이블(color_name_info)로 Black·MttBK 같은 표기 차이를 흡수해 대조하고, 라벨 색상 ≠ 주문 색상이면 "오색상 출고 의심"으로 경고하겠습니다.
기능 ② · Shipping Guideline 챗봇
"규정 어디 있어요?" 를 없앤 챗봇

벤더가 출고·포장·선적 규정(팔레트·바코드·이너카톤 등)을 물을 때마다 담당자가 가이드라인 PDF를 뒤져 답하던 일을, Gemini 기반 RAG 챗봇이 대신합니다. 핵심은 답변마다 원본 문서의 페이지 출처를 인용한다는 점 — 근거 없는 답을 만들지 않습니다. 원본은 신규업체_가이드라인_2026_S2C_ver.pdf 한 권으로, 매뉴얼 102개 항목 · 24개 카테고리로 색인돼 있습니다.

질문 → 관련 페이지 검색 → 이미지로 렌더해 판독 → 출처와 함께 스트리밍
💬
벤더 질문
자연어 (한/영)
🔎
임베딩 매뉴얼 검색
page_key · section · risk_level · role_target
🖼️
페이지 이미지 렌더
PdfService: 해당 페이지를 이미지로
🤖
Gemini 판독·스트리밍
SSE 실시간 + 답변 캐시
📌
출처 인용 답변
근거 구절 + 페이지 번호
예시 1 · 단일 규정 조회 (팔레트)
벤더
팔레트 안 쓰면 안 돼요?
챗봇
해상·항공 운송(SLC) 시에는 반드시 팔레트를 사용해 선적해야 합니다. 자체 팔레트가 어려우면 당사 포워더를 통해 진행할 수 있으니 Spigen 담당자에게 문의하세요. Source: 신규업체 가이드라인 · Palletize (p.38)
예시 2 · 여러 페이지를 종합 (바코드)
벤더
X바코드 안 쓰고 그냥 바코드 써도 돼요?
챗봇
매뉴얼은 바코드 종류로 EAN · X · UPC 세 가지를 언급합니다. X바코드는 Spigen에서 사전에 공유해 드립니다. SLC · SQ2-DTC · SQ2 sales · CN3PL로 향하는 제품은 내·외부 상자에 제품 바코드가 필수입니다. Source: Preparing Production (p.15) · INNER/OUTER CARTON (p.28–29)
예시 3 · 없는 정보는 지어내지 않는다
벤더
(가이드라인에 없는 내용을 질문)
챗봇
제공된 가이드라인에 해당 정보가 없습니다. 추가 문의는 Spigen 담당자에게 연락해 주세요. ⚠️ 중요한 수치·코드는 원본 가이드라인 문서에서 한 번 더 확인해 주세요.
📄 문서 근거 인용 (RAG)
가이드라인 PDF를 페이지 이미지로 렌더해 판독하고, 답변에 근거 구절 + 페이지 번호를 붙임. 지어낸 답 대신 원문에 앵커.
🔎 임베딩 기반 검색
102개 매뉴얼 항목을 임베딩으로 색인 — section · risk_level · role_target 메타로 질문에 맞는 페이지를 먼저 좁힘.
🔴 위험 구절 경고
중요 코드·수치가 담긴 답변엔 "원본에서 재확인"을 자동으로 덧붙여 오독의 책임 경계를 명확히.
🚫 환각 방지
근거를 못 찾으면 억지 답 대신 "가이드라인에 정보 없음 + 담당자 문의"로 회신.
⚡ 스트리밍 + 캐시
답변은 SSE로 실시간 전송, 반복 질문은 답변 캐시로 즉시 — Gemini 버전업으로 응답 속도 개선.
📊 질문 유입 대시보드
어떤 질문이 얼마나 들어오는지 집계 — 벤더가 자주 막히는 규정을 가이드라인 개선 신호로.
💬 벤더 셀프서비스
CIPL 작성법, 바코드 규칙, 이너/아우터 카톤 등 반복 질문을 벤더가 스스로 즉시 해결.
🔗 OQC와 인프라 공유
챗봇의 근거 모달·페이지 판독 인프라를 OQC OCR이 그대로 재사용 — 하나의 AI 기반이 두 기능을 지탱.
타임라인
한 달여의 반복
~2026-06
Shipping Guideline 챗봇 (Gemini 버전업)
가이드라인 문서 RAG 챗봇을 최신 Gemini로 개선해 운영 반영. OQC OCR의 토대가 됨.
06-04~05
OQC OCR 착수 · 설계
문제 재정의, 좋은/나쁜 사례 PDF 분석, DDL 설계, 비용 선추산(월 ~500건).
06-17~24
검증 로직 구축 · 실데이터 반복
FBA/AWD 라벨, 카톤 역산, 색상 대조, 근거 팝업. 운영 데이터로 회귀테스트.
06-25~30
정합성 강화 · 다중모델
OCR 논문 조사, 여러 Gemini 모델 비교, 서브에이전트 토론으로 실패모드 발굴, UI·근거 직관화.
07-01~06
캐싱 · 반려 알림 · 운영
신규 파일 사전 캐싱(속도), 반려 시 업체 역알림(메일·포털, 중/영), 결과 30일 보존. 운영 반영.