Claude Code로 가축 운송 플랫폼 '다타소'를 로컬 데모에서 실서비스(dataso.kr)까지 — 배포·보안·소셜로그인·정부 OpenAPI 연동 전 과정



소개

시도한 것: 로컬(localhost:3000)에서만 돌던 가축 운송 중개 플랫폼 '다타소(DaTaSo)' — '가축 운송판 우버' — 를 실제 누구나 접속 가능한 운영 서비스로 만들고, 나아가 정부(축산물품질평가원) 데이터까지 연동하는 것.

이유:

  • 코드는 다 짰는데 "내 컴퓨터에서만 됨" 상태였습니다. 실제 농가·기사에게 보여주려면 도메인·HTTPS·로그인·배포가 필요했습니다.

  • 단순 데모를 넘어, 실데이터로 검증(실증) 하고 공공 데이터(한우 시세·농장 정보·이력제) 를 붙여 신뢰도와 차별성을 높이고 싶었습니다.

  • 이 모든 걸 개발자 없이 Claude Code 하나로 어디까지 할 수 있는지 확인하고 싶었습니다.

구조: 마켓플레이스(Next.js+Supabase) ↔ 배차엔진 MMS(Streamlit, OR-Tools) ↔ 정부 OpenAPI


진행 방법

사용 도구: Claude Code(에이전트) · Next.js 15 · Supabase(Postgres+Auth) · Vercel · Streamlit · 카카오 로그인 · 축산물품질평가원 OpenAPI · GitHub · Cafe24(도메인)

Claude Code에 자연어로 지시만 하면, 코드 작성→빌드→GitHub 푸시→배포→Supabase MCP로 DB 직접 검증→로그 분석까지 한 번에 진행했습니다. 핵심은 "한 문장 지시 → 에이전트가 끝까지" 였습니다.

1) 운영 보안 강화 — DB 직접 점검·수정

사용한 프롬프트:

"다타소 TMS 이어서. 코드와 메모리 기준으로, DEPLOY.md의 보안강화(4번)부터 도와줘"

Claude가 Supabase MCP로 함수 권한을 직접 조회→"함수 생성 시 PUBLIC에 EXECUTE가 자동 부여돼, anon만 회수론 부족" 이라는 핵심을 짚고 from public, anon 둘 다 회수. [📷 캡처: 함수 권한 anon=false 검증 결과]

2) 카카오 소셜 로그인 — 에러와의 사투

"소셜 로그인(카카오) 설정 이어서 해줘"

에러가 단계별로 바뀌며 디버깅: provider is not enabled(Supabase 토글) → KOE205(동의항목 미설정 스코프=이메일) → KOE006(Redirect URI 불일치) → 성공. [📷 캡처: KOE205 / KOE006 카카오 에러화면 → 로그인 성공 후 온보딩 화면]

이메일 스코프 문제 해결을 위해 코드에서 스코프를 명시:

// src/app/login/page.tsx
await supabase.auth.signInWithOAuth({
  provider: "kakao",
  options: {
    redirectTo: `${location.origin}/auth/callback`,
    scopes: "profile_nickname profile_image account_email",
  },
});

3) Vercel 배포 + 커스텀 도메인(dataso.kr)

"이것은 로컬환경에서 구현한것이고 실제 배포 운영 해줘" "dataso.kr 회사 소유 도메인. 이것으로 연결해줘"

GitHub 비공개 저장소 생성→Vercel 연동→환경변수→Cafe24 DNS(A 216.198.79.1, CNAME cname.vercel-dns.com) 설정→SSL 자동발급. [📷 캡처: dataso.kr/login HTTPS 정상 화면]

4) 실데이터 20건 실증 — 그리고 버그 발견

"실제로 실증하기 위해서 자료를 생성해서 테스트해줘, 20건"

Claude가 운영 DB에 20건을 생성하고, 플랫폼의 운임·콘솔(합짐)·자동배차 를 전부 돌렸습니다. 그 과정에서 실제 버그를 발견:

콘솔 배차된 차량이 available=false로 안 바뀌어, 같은 트럭이 즉시배차에 중복 배정됨

수정(한 줄 추가):

-- accept_consolidation 함수 마지막에 추가 (auto_dispatch와 동일 동작)
update vehicles set available = false where id = p_vehicle_id;

배차 함수가 auth.uid()(로그인)를 요구해, 인증 컨텍스트를 시뮬레이션해서 테스트한 것도 유용했습니다:

begin;
set local role authenticated;
select set_config('request.jwt.claims','{"sub":"<기사 UUID>","role":"authenticated"}', true);
select accept_consolidation(array[...]::uuid[], '<차량 UUID>');
commit;

[📷 캡처: 20건 운임·콘솔 정산(각 화주 23% 절감)·탄소절감 결과표]

5) 배차엔진(MMS)을 dataso.kr에 통합 — iframe 임베드 + 실시간 연동

"이 앱을 dataso.kr 로 통합해서 운영할수 있도록 해줘" "데이터 소스는 배차 완료된 값이 자동으로 들어가서 구동되어야 합니다"

dataso.kr/dispatch에 Streamlit을 전체화면 임베드하고, 마켓플레이스 자동배차가 MMS '배차완료'로 실시간 반영되도록 새 브리지 함수 추가. [📷 캡처: dataso.kr/dispatch 안에 MMS가 임베드된 화면]

6) 축산물품질평가원 OpenAPI 연동 — 한우 시세·농장 검증

"datalab.mtrace.go.kr 등에서 관련 정보를 모아서 다타소에 붙일 수 있는 것을 찾아줘"

키로 직접 API를 테스트해 실데이터 확인 후 위젯화:

// src/app/api/price/route.ts — 한우 경락시세(축평원 등급판정 OpenAPI)
const res = await fetch(`${BASE}/auct/cattleApperence?${qs}`);
// → 한우 전국 20,958원/kg(▲358·721두), 수도권 19,552, 중부권 21,208 ...

[📷 캡처: 운송요청 폼 상단 '한우 경락 시세' 위젯]


결과와 배운 점

결과 — 하루 만에 로컬 데모 → 완전한 운영 서비스:

  • 🌐 https://dataso.kr 라이브 (HTTPS + 카카오 로그인, 본인 카카오로 로그인 검증)

  • 마켓플레이스(Vercel) · 배차엔진 MMS(Streamlit, dataso.kr 임베드) · DB/인증(Supabase)

  • git push자동 재배포(CI/CD)

  • 실데이터 20건 실증 + 버그 1건 발견·수정

  • 한우 경락시세 위젯(작동) + 농장식별번호 검증(권한 전파 대기)

배운 점 / 꿀팁:

  1. 에이전트에게 "검증"까지 시켜라. Claude가 Supabase MCP로 DB를 직접 조회하고, 인증 로그·배포 로그를 읽어 원인을 짚는 게 가장 강력했습니다. "되는지 확인까지 해줘"가 핵심.

  2. 외부 API는 키 받기 전에 못 짜는 게 아니다. 받은 즉시 curl로 실응답을 보고 필드를 맞추면 정확합니다. (가이드 문서의 typeGbn=0022(소) 같은 코드값은 꼭 문서 확인)

  3. 에러 메시지를 그대로 주는 게 가장 빠른 디버깅. KOE205/KOE006, 모듈 캐시 에러 등 캡처만 줘도 에이전트가 정확히 잡았습니다.

시행착오:

  • 카카오 KOE205(이메일 동의항목 미설정) → 비즈 앱 전환 + 스코프 조정으로 해결

  • Streamlit 재배포 후 모듈 캐시로 새 함수 미인식 → 코드에서 강제 importlib.reload로 해결

  • 정부 API 승인 직후 권한 전파 지연(SERVICE ACCESS DENIED) — 코드는 정상, 시간 필요

  • 콘솔 배차 차량 중복배정 버그 — 실증 안 했으면 못 잡았을 것

도움이 필요한 부분:

  • 축산물이력제(mtrace) 이력번호 검증은 별도 API 키 발급이 필요합니다(현재 코드만 보존). 발급 경험 있으신 분 팁 환영합니다.

앞으로의 계획:

  • 도매시장/도축장 공식 마스터(abattoir)로 도착지 고도화, 등급별 시세, 통계 대시보드(수요예측·ESG)

  • 농장식별번호 권한 전파 후 농가 출발지 자동 검증 활성화

  • 결제/정산, 방역대(KAHIS) 연계


도움 받은 글 (옵션)

  • 축산물품질평가원 등급판정정보 OpenAPI — https://www.data.go.kr/data/15058923/openapi.do

  • 축산물이력제(mtrace) — https://mtrace.go.kr · 통계누리 https://datalab.mtrace.go.kr

한국어 웹사이트의 스크린샷
컴퓨터 로그인 페이지의 스크린샷

한국 모바일 앱의 스크린샷

중국 도박 웹사이트의 스크린샷
한국어와 중국어 숫자가 표시된 대시보드 스크린샷
한자가 표시된 한국 지도

한국의 위치를 ​​보여주는 지도
많은 정보가 포함된 중국 웹사이트의 스크린샷
중국어와 중국어 문자가 포함된 웹사이트의 스크린샷
4
2개의 답글
밀어주고 끌어주는

온·오프라인 AI 스터디

AI로 어디까지 할 수 있는지
직접 확인하실 분만 신청하세요.