Trade Intelligence
국내 수산물 수입사가 의뢰한 무역 데이터 대시보드입니다. 관세청과 식약처 공공데이터를 한 화면에 모아 시장 신호와 리스크, 수입 추세를 함께 보고, 검증된 데이터 근거를 붙인 LLM 답변까지 제공합니다. 이 제품의 설계와 배포를 맡았습니다.
의뢰 배경
의뢰사는 국내 수산물 수입사입니다. 실무에 필요한 정보가 여러 곳에 흩어져 있는 것이 문제였습니다. 관세청 월별 수출입 통계, 식약처 수입식품 신고 데이터, 회수·판매중지 같은 리스크 이벤트가 저마다 다른 공공 데이터에 나뉘어 있어, 담당자는 시장과 리스크를 확인할 때마다 원천을 하나씩 열어 봐야 했습니다. 시간이 많이 들었고, 해석도 담당자 개인에게 크게 의존했습니다.
클라이언트의 요건은 “공공 데이터를 한 화면에서 모아 시장과 리스크를 빠르게 읽고, 담당자 교체와 무관하게 동일한 근거로 의사결정을 지원할 수 있는 도구”였습니다. 회사명과 자사 품목 리스트, 원문 데이터, 인증 정보는 공개 포트폴리오에 싣지 않고, 클라이언트는 ‘국내 수산물 수입사’로만 표기합니다.
접근
요건 정의 단계에서는 담당자가 매일 답해야 하는 핵심 질문 다섯 개로 제품 범위를 좁혔습니다. 최근 한국의 새우 수입 물량은 얼마인지, HS 품목과 원산국 가운데 무엇이 시장을 이끄는지, 월별 평균 수입 단가는 어떻게 움직이는지, 데이터에는 어떤 수입사와 해외제조업소가 잡히는지, 그리고 공공데이터 커넥터를 어디까지 넓힐 수 있는지가 그 질문이었습니다.
이 다섯 질문을 화면으로 옮겨 대시보드 여덟 개의 초기 범위를 잡았습니다. 화면 하나가 질문 하나에 답하도록 역할을 나눠, 답을 찾으려고 여러 화면을 오갈 일이 없게 했습니다. 기본 범위는 의뢰사의 주력 품목인 새우(HS 030616, 030617, 160521, 160529)로 두되, 다른 수산물 품목군으로도 넓힐 수 있게 설계했습니다.
데이터 파이프라인
공공데이터를 화면에서 바로 호출하면 원천이 느려지거나 끊길 때 제품도 함께 멈춥니다. 그래서 원천 데이터를 먼저 정규화해 캐시에 쌓고, 대시보드는 그 캐시만 읽도록 했습니다. 지금 연결된 원천은 관세청 월별 수출입 통계, 식약처 수입식품 신고 기록, 식약처와 data.go.kr의 리스크 이벤트, 그리고 회사가 준 자사 품목 목록입니다.
캐시가 잠시 끊겨도 대시보드는 마지막으로 확인된 실제 데이터로 계속 동작합니다. 대신 화면마다 원천 확인일을 함께 띄워, 데이터가 오래됐을 때는 최근 30일 이벤트가 0건이라도 “이벤트 없음”으로 읽지 않게 경고합니다. 없는 데이터를 지어내지 않고, 오래된 데이터는 오래됐다고 말하는 것이 이 제품의 기본 원칙입니다.
관세청 항공·해상 운송비용, KAMIS 소매가격, 한국은행 환율, UN Comtrade 수출입 통계까지 원천 네 개도 커넥터로 만들어 두었습니다. 다만 아직 검증이 끝나지 않았기 때문에, 검증을 마치기 전에는 화면에 노출되지 않게 막아 두었습니다.
제품과 기능
여덟 개 대시보드는 화면마다 질문 하나를 맡습니다. 아래는 그중 개요·시장 신호·리스크 모니터링 화면이며, 수입사와 해외제조업소 이름, 자사 품목을 알아볼 수 있는 정보는 공개용으로 가렸습니다.

화면 설명
개요 화면은 ‘시장이 지금 어떤 상태인가’에 답합니다. 최근 수입량이 평년과 비교해 어느 수준인지 먼저 보여주고, 그 아래에서 원산지·품목·계절성 순으로 시야를 좁혀 갑니다. 이 화면 하나로 시장의 큰 흐름을 잡을 수 있도록 구성했습니다.

화면 설명
시장 신호 화면은 ‘지금 무엇이 움직이고 있는가’에 답합니다. 품목·원산지 조합마다 최근 수입량을 전년 동기, 3년 계절 평균과 비교해 급증·급감 신호를 붙이고, 새로 나타난 수입사와 제조업소가 있는지 함께 셉니다. 화면 아래에서는 이 신호를 회사가 준 자사 품목 목록과 매칭해, 우리 품목과 관련 있는 변화인지 근거와 함께 보여줍니다.

화면 설명
리스크 모니터링 화면은 ‘지금 조심할 일이 있는가’에 답합니다. 회수·판매중지, 검사 부적합, 수입중단 같은 공공 리스크 이벤트를 모아 최근 30일 기준으로 보여주고, 모든 기록은 공식 출처로 연결해 바로 확인할 수 있게 했습니다. 품목 구분이 없는 행정처분은 수산물 건으로 단정하지 않고 업체 단위로 따로 표시하며, 원천 확인일도 화면에 그대로 드러냅니다. 스크린샷에서는 상세 이벤트 표를 가렸고 요약 카드만 공개합니다.
AI 데이터 탐색
데이터 탐색 화면(/dashboard/explore)은 자연어로 묻고 데이터로 답을 받는 화면입니다. 다만 모델이 자유롭게 말하도록 두지 않습니다. 질문을 먼저 기간·품목·국가 같은 명확한 조건으로 해석한 다음, 연결된 공식 데이터가 실제로 담고 있는 범위 안에서만 계산합니다. 성격이 다른 데이터는 억지로 합치지 않고 원천별로 따로 분석합니다.
모든 답에는 출처와 관측 범위, 근거 행 수, 계산 방법이 함께 붙습니다. 데이터가 없는 기간이나 공식 근거가 없는 미래 예측은 아는 척하지 않고 답할 수 없다고 밝힙니다. 모델이 지어낸 수치는 어떤 경우에도 답의 근거로 쓰지 않습니다.

화면 설명
스크린샷은 ‘최근 수입량이 가장 많이 증가한 품목은?’이라는 질문에 답한 장면입니다. 품목별 증가량 차트와 함께 출처, 관측 범위, 근거 행 수, 계산 방법이 답 아래에 붙습니다. 담당자는 이 답을 믿어도 되는지 그 자리에서 스스로 판단할 수 있습니다.
활용 기술
Next.js · React · TypeScript · Tailwind CSS · AntV G2 · d3-geo · arquero · Supabase · Vercel · vitest · Playwright
담당 역할
요건 정의부터 설계, 구현, 배포, 문서화까지 전 과정을 맡았습니다. 데이터 파이프라인과 캐시 구조를 설계하고, 대시보드 여덟 개와 데이터 탐색 화면을 구현해 배포했습니다. 데이터의 한계와 해석할 때 주의할 점은 제품 안에 문서로 남겼습니다.
코드 작성과 분류, 초안 작업에는 AI 도구를 썼습니다. 모델이 내놓은 결과는 그대로 믿지 않고 검증했으며, 공공데이터 원문과 회사가 준 자사 품목 리스트, 인증 정보는 포트폴리오에 싣지 않습니다. 클라이언트를 알아볼 수 있는 정보와 스크린샷 속 수입사·제조업소 이름도 가렸습니다.
결과
제품은 배포되어 실제로 돌아가고 있습니다. 담당자는 여덟 개 화면에서 시장과 리스크를 확인하고, 궁금한 것은 데이터 탐색에서 근거가 붙은 답으로 받습니다. 원천을 하나씩 열어 보던 처음의 문제로 돌아가면, 이제는 누가 묻더라도 같은 화면에서 같은 근거로 답이 나옵니다.
이 페이지의 수치는 저장소와 배포된 제품에서 확인할 수 있는 사실만 씁니다. 사용자 증가나 매출, 절감 시간처럼 의뢰사가 공개하지 않는 지표는 싣지 않습니다.
한계
이 제품은 아직 초기 단계의 시제품입니다. 화면은 캐시에 동기화된 실제 데이터만 보여주기 때문에, 원천 데이터가 늦게 갱신되면 제품의 데이터도 함께 늦어집니다. 그래서 확인일이 오래되면 그 사실을 화면에서 숨기지 않고 경고로 드러냅니다.
자사 품목 매칭은 회사가 준 목록에 의존하므로, 목록에 없는 품목은 잡아내지 못합니다. 인증·조직 관리·과금은 아직 완전한 사용자 화면으로 이어지지 않았습니다. 모델 답변과 공공데이터 표본의 한계도 결과를 읽을 때 감안해야 합니다.