관세청 무역통계 DB

KCSDB2

이 데이터베이스는 관세청이 OpenAPI로 공개하는 무역통계를 한데 모아 하나의 파일로 만든 것이다. 본체는 2007년 1월부터 최신 확정월까지의 품목별 국가별 수출입실적(GW)이고, 여기에 성질별 수출입실적(1995년부터, 이 DB에서 가장 긴 계열)과 신성질별 수출입실적(2005년부터, HS 개정에 흔들리지 않는 계열), 10일 단위 잠정치 네 계열(월 통계가 나오기 전에 흐름을 읽는 용도)을 더했다. 무엇이 얼마나 들어 있고 어디서 받았는지는 받기·사용 탭의 표 전체 목록에 있다.

개요

이 DB가 무엇을 담고, 어떤 설계 원칙 위에 서 있는지를 소개한다.

무엇인가. 관세청 무역통계 원본을 변형 없이 적재하고, 시계열 연결(HS 개정)과 참조 정보(국명·품목명·분류 체계·조업일수)를 별도의 dim 테이블로 제공하는 DuckDB 단일 파일 DB다. 담은 실적은 다섯이다 — 국가 × HS10 × 월(2007~), 성질별 × 월(1995~), 신성질별 × 국가 × 월(2005~), 국가 × 월 총계, 10일 단위 잠정치 네 계열(2016~). 여기에 계산해 둔 지표(mart)가 더해진다. 파일 하나(kcsdb.duckdb)만 내려받으면 별도 서버나 설치 없이 바로 SQL로 질의할 수 있다. (DuckDB와 SQL이 무엇인지, fact와 dim으로 나눈 표 구조가 무엇인지는 연구 탭의 Chapter 6 「데이터베이스 구축 과정」에 설명이 나와 있다.)

왜 만들었나. 관세청 OpenAPI는 한 번의 호출에 한 달, 한 나라의 실적만 돌려주고, 개발계정 기준 하루 1만 회의 호출 한도가 있다. 이 DB를 채우는 데도 엿새에 걸쳐 5만 회를 넘겨 호출했고 원응답은 수 기가바이트였다 — XML은 줄마다 필드 이름을 되풀이하고 숫자까지 글자로 담는 형식이라 그렇다. 같은 내용을 DuckDB가 열 단위 이진 형식으로 압축해 담으면 몇백 MB로 줄어든다.

모아도 이어지지 않는다. 품목코드가 중간에 바뀌기 때문이다. 이 DB가 커버하는 기간에 국제 협약에 따른 HS 개정이 세 번(2012·2017·2022), 국내 품목분류 개정이 두 번(2025·2026) 있었다. 시작점인 2007년 1월도 그해 개정으로 바뀐 체계여서, 2011년까지의 코드는 현행과 다른 판본(HS2007)이다. 6자리 연결은 관세청 공식 연계표로, 10자리 연결은 기재부 고시 별표에서 직접 만들어 넣었다(HS 연계 탭). 이 DB는 그 수집과 연결을 한 번 끝내 두어, 사용자가 곧바로 분석에 들어갈 수 있게 한다.

누구를 위한 것인가. 무역 데이터를 받아 직접 분석하려는 연구자가 주 독자다. 로컬 주피터 노트북에서 읽어 쓰는 것을 전제로 하되 conda나 특정 파이썬 버전은 필요 없다 — 패키지 넷(duckdb·pandas·matplotlib·jupyter)이면 되고, 처음 여는 사람을 위한 튜토리얼 노트북(notebooks/analysis_start.ipynb)이 저장소에 있다. 반대로 이 DB가 답하지 못하는 것도 분명하다. 기업 단위 자료가 아니고(집계 통계라 누가 수출했는지는 알 수 없다), 관세율이 들어 있지 않으며(품목별 세율은 별도 자료다), 가장 빠른 계열이 10일 단위라 일 단위 추적에는 못 쓴다. 받아서 쓰는 방법은 받기·사용 탭에 있다.

28,093,109
fact_trade 거래행
2007.01–2026.07
HS10 월 실적 (235개월)
1995.01–2026.07
성질별 실적 (379개월)
240
국가 (stat_cd)
15,406
HS10 품목 종수

설계 원칙 세 문장

이 DB의 모든 결정은 하나의 최상위 원칙에서 나온다 — DB는 관세청 원본을 최대한 그대로 담고, 분석을 위한 가공은 DB가 아니라 분석 계층에서 한다. 이 원칙을 세 문장으로 압축하면 다음과 같다.

  1. fact(사실 테이블)는 관세청 API 응답 필드만 담는다. 연·월을 따로 쪼갠 컬럼, HS 코드를 잘라 만든 상위 코드(hs2·hs4·hs6), 국명·품목명 같은 것은 원본에 없는 파생값이므로 fact에 넣지 않는다. 이런 값이 필요하면 아래 dim 테이블과 조인해서 얻는다. fact를 원본 그대로 두어야 나중에 어떤 분석이 와도 왜곡 없이 출발할 수 있다.
  2. 관측값을 변형하지 않는다. 관세청이 준 값은 그대로 저장한다 — 금액 0, 음수 중량(반품·수정신고로 뒤늦게 상계한 값), 초기 연도의 후행 공백까지 손대지 않는다. "이상해 보이니 고친다"가 아니라 "원본이 그러하니 보존한다"가 기준이다. 이상치 판단과 처리는 분석하는 연구자의 몫으로 남긴다.
  3. 연결과 참조는 dim(차원 테이블)이 담당한다. 시간이 지나며 바뀌는 HS 품목코드의 개정 연결(6자리와 10자리 두 층위), 국가코드에 붙는 표준 국명·ISO·대륙, HS10에 붙는 품목명·단위는 모두 dim 테이블이 제공한다. fact는 raw로 두고, "무엇과 무엇을 잇는가"는 dim에서 처리한다. 매 분석마다 반복하던 연결 작업을 DB 계층에서 한 번에 끝내는 것이 핵심이다. 다만 공표된 자료를 옮긴 것(HS6 연계, 성질별·신성질별 분류)과 우리가 추정한 것(HS10 연계)은 테이블을 나누어 성격을 구분한다. 한 표 안에 둘이 섞이는 자리도 있다 — dim_hs10_to_nqi는 현행 코드에는 공표 대응을 그대로 쓰지만(11,327행) 옛 코드는 우리 추정을 거치므로(6,038행), method 열이 directchain으로 그것을 갈라 준다. 섞였다는 사실 자체를 감추지 않는 것이 이 원칙의 요점이다. 우리가 계산해 넣은 지표는 이름 앞에 mart를 붙여 층을 아예 달리한다.

DB 실물(kcsdb.duckdb)은 저장소가 아니라 Releases 첨부로 배포된다. 받는 방법은 받기·사용 탭 참조. 연도별 HSK 10단위 관세율(2007~2026)과 실행세율은 별도 DB KCSTARIFF에 있으며, 연도와 HS10으로 이 DB와 바로 조인된다.

DB 구축

계층을 어떻게 나누었고 스키마를 어떻게 짰는지, HS 개정을 어떻게 연결했고 커버리지와 검증은 어디까지 확인했는지 밝힌다.

계층 분리

이 DB는 일을 두 계층으로 나눈다. DB 계층은 관세청 원본을 정확히 보존하고 연결·검증까지만 책임진다. 단가 계산, 품목의 진입·퇴출 분석, 위기 국면 비교 같은 분석은 DB가 하지 않고, DB 밖의 별도 스크립트(분석 계층)에서 한다.

이렇게 나누는 이유는, 특정 분석에 편리하도록 DB를 미리 가공해 두면 그 가공이 다른 분석에서는 오히려 방해가 되기 때문이다. DB를 raw로 중립적으로 두면 어떤 분석이든 같은 출발선에서 시작할 수 있다.

DB 계층 (이 DB의 책임)분석 계층 (DB 밖, 별도 스크립트)
raw 적재 (fact_trade, fact_total, fact_exp10d)HS10→HS6 절단 SUBSTR(hs10,1,6)
참조·연결 (dim_country, dim_hs10, HS 연계 3종, dim_hs10_name_hist, 분류 3종, dim_workday10d)단가(금액/중량) 계산, wgt=0 처리
내부 무결성 검증margin 분해 · granularity · 위기더미 등

분해 방법론 결함(HS6 셀 내 단가 이질성 등)은 분석 계층 사안이다. DB는 raw를 정확히 보존해 분석 계층이 올바르게 처리할 수 있게 한다.

fact 스키마 (관세청 raw)

fact는 실제 거래 수치가 담기는 핵심 테이블이다. 다섯 종류가 있다. fact_trade는 국가 × HS10 품목 × 월 단위의 세밀한 거래 행이고, fact_total은 품목 구분 없이 국가 × 월로 합산된 총계 행이다. fact_nqi는 같은 통관 실적을 신성질별 × 국가 × 월로 관세청이 직접 집계한 것으로, HS 개정에 흔들리지 않는 계열이 필요할 때 쓴다(이 표만 2005년부터다). 넷째 fact_temper는 같은 실적을 성질별 × 월로 집계한 것으로, 10일 자료의 10대 품목이 이 분류로 정의된다(이 표만 1995년부터다). 다섯째 fact_exp10d는 다른 API에서 오는 10일 단위 잠정치로, 수출·수입 각각의 주요품목별과 주요국가별 네 계열이 series 열로 갈려 담긴다. 월 자료보다 훨씬 빠른 대신 항목이 열 개씩뿐이고 중량이 없다. 다섯 다 관세청이 준 필드만 담으며 우리가 계산해 넣은 컬럼은 없다.

fact_trade — 거래 행 (국가 × HS10 × 월), 8필드
컬럼출처비고
yyyymm파일명호출 시기. 응답 year(YYYY.MM)와 일치 검증
stat_cd응답 statCd관세청 원본. 변형 없음
hs10응답 hsCd관세청 원본 (strip만)
exp_dlr응답 expDlr수출 금액
imp_dlr응답 impDlr수입 금액
exp_wgt응답 expWgt수출 중량
imp_wgt응답 impWgt수입 중량
bal_payments응답 balPaymentsexp_dlr−imp_dlr과 항등이나 API 제공값이므로 보존
fact_total — 국가 × 월 총계, 7필드 (HS 컬럼 없음)
컬럼출처비고
yyyymm파일명
stat_cd파일명응답은 -. 파일명 유래 파생 (유일하게 허용하는 파생)
exp_dlr / imp_dlr응답금액
exp_wgt / imp_wgt응답중량
bal_payments응답

총계 행은 응답에 국가코드가 없어 stat_cd를 파일명에서 추출한다 — 이것이 DB 전체에서 유일하게 허용하는 파생이다.

셋째 fact는 분류 체계가 다르다. fact_nqi는 같은 통관 실적을 HS가 아니라 관세청 신성질별로 집계한 것이다. HS 컬럼이 없고 그 자리에 nqi5(세세분류 코드)가 온다. 응답은 수출과 수입이 세로로 나뉘어 오는데(impexp 필드) fact_trade와 같은 가로 형태로 돌려 담았다 — 값은 그대로이고 모양만 바꾼 것이다. bal_payments는 응답에 없어 담지 않는다.

fact_nqi — 신성질별 × 국가 × 월, 7필드 (HS 컬럼 없음)
컬럼출처비고
yyyymm응답 year응답이 2026.01 꼴. 점만 제거
stat_cd응답 statCd관세청 원본. 폐지·불명 코드 15개는 dim_country에 없다
nqi5응답 godsCd신성질별 세세분류 8자리. 이름·계층은 dim_nqi가 준다
exp_dlr / imp_dlr응답 dlr금액. impexp로 갈라 두 컬럼에 담는다
exp_wgt / imp_wgt응답 wgt중량. 데이터셋 설명과 달리 실제로 들어 있다
신성질별은 무엇이 다른가. HS는 물건이 무엇인지로 나눈다 — 재료와 가공도를 따라 장(chapter)이 편성된다. 신성질별은 그 물건이 경제에서 어떤 쓰임인지로 나눈다. 꼭대기에 소비재·원자재·자본재 셋이 있고 그 아래로 중(14)·소(68)·세(303)·세세(758)로 갈린다. 메모리반도체는 3.자본재 > 1)반도체 > 34010101로 분류된다. 두 체계의 경계는 서로 어긋난다 — 우리 자료에 나오는 HS 96개 장 가운데 36개가 대분류 둘 이상에 걸친다. 쓰임이 갈리는 자리가 물건의 종류와 다르기 때문이다. 2025년 수출을 이 셋으로 가르면 자본재 4,213억, 원자재 1,913억, 소비재 968억 달러다.

넷째 fact는 기간이 가장 길다. fact_temper는 같은 실적을 관세청 성질별로 집계한 것으로 1995년 1월부터 있다 — fact_trade보다 열두 해, fact_nqi보다 열 해 앞선다. 이 표를 받은 이유는 따로 있다. 10일 잠정치의 10대 품목이 바로 이 분류의 마디로 정의되어 있어, 부호를 묶으면 10일 자료를 품목 단위로 맞대 볼 수 있는 유일한 계열이 된다. 수출과 수입은 부호 체계가 서로 다르다 — 수출 153개, 수입 181개이고 나무가 아예 달라 같은 부호 11201이 수출에서는 기타 육류, 수입에서는 쌀이다. 그래서 fact_nqi처럼 가로로 눕히지 않고 imexp를 키에 둔 세로 형태로 담는다.

fact_temper — 방향 × 성질부호 × 월, 5필드 (세로 형태)
컬럼출처비고
yyyymm응답 year응답이 2026.01 꼴. 점만 제거
imexp응답 impexp수출 / 수입. 키의 일부다 — 부호 체계가 방향마다 다르다
temper_cd응답 godsCd성질부호. 이름·계층·10대 품목 꼬리표는 dim_temper가 준다
dlr응답 dlr금액
wgt응답 wgt중량
성질별과 신성질별은 무엇이 다른가. 이름이 한 글자 차이라 헷갈리지만 별개 분류다. 둘 다 물건의 쓰임으로 나누는 것은 같고, 갈리는 자리가 셋이다. 첫째, 성질별은 수출과 수입이 서로 다른 나무다 — 수출 153부호는 식료및직접소비재·원료및연료·경공업품·중화학공업품 넷에서 뻗고, 수입 181부호는 소비재·원자재·자본재 셋에서 뻗는다. 그래서 같은 부호 11201이 수출에서는 기타 육류, 수입에서는 쌀이다. 신성질별은 방향과 무관한 하나의 체계이고 세세분류가 758개다. 둘째, 성질별은 해상도가 낮은 대신 10대 품목과 정의가 같다. 그래서 10일 자료를 품목 단위로 맞대 볼 수 있다. 셋째, 성질별이 열 해 더 길다(1995년 대 2005년). 대신 우리 DB에서 국가 축을 갖는 쪽은 신성질별이다. 요컨대 10대 품목을 맞대거나 긴 시계열이 필요하면 fact_temper, 경기 민감도나 목적지별 분석이면 fact_nqi를 쓴다.

다섯째 fact는 성격이 다르다. fact_exp10d는 관세청이 상순분을 11일, 중순분을 21일, 월 전체를 익월 1일에 내는 10일 단위 잠정치다(2016.01부터). 네 계열이 함께 들어 있다 — exp_item(수출 주요품목별), exp_cnty(수출 주요국가별), imp_item(수입 주요품목별), imp_cnty(수입 주요국가별). 월 자료가 나오기 전에 방향을 읽을 수 있다는 것이 값어치이고, 대신 각 계열이 열 항목과 총계뿐이며 중량이 없다. 뷰를 쓸 때 series를 반드시 걸러야 한다 — 안 그러면 품목과 국가가 섞여 총계가 두 배가 된다. 값은 누적치(1~10일, 1~20일, 1~말일)이고 단위는 천 달러이며, 원본 그대로 담는다. 구간 증분과 억 달러 환산은 뷰 v_exp10d_seg가 맡는다. 열 항목은 바로 위 신성질별이 아니다 — 관세청 현행 수출 성질별 분류에서 따온 것이고, 그것도 한 계층이 아니라 철강제품은 3단위, 반도체·석유제품·가전제품은 소분류, 나머지는 세분류에서 딴다. 두 분류는 같은 엑셀(15049720)에 나란히 들어 있어 헷갈리기 쉽다. 이름이 겹치는 것은 반도체와 선박뿐이고 승용차·자동차부품 같은 이름은 신성질별에 아예 없다.

fact_exp10d 16,852행(계열당 4,213행). 이 자료는 같은 시점을 여러 번 관측한다 — 당월은 잠정이고 전월까지는 신고 정정·취하를 반영해 갱신되기 때문이다. 그래서 값이 바뀔 때마다 새 행을 쌓고 fetched_at으로 구분한다. 나중에 "그때 알 수 있었던 값"으로 예측 성능을 정직하게 재려면 이 이력이 있어야 한다. 값이 그대로면 행을 만들지 않는다.

수치의 집계 기준 (관세청 정의). 수출입 신고 통관 자료를 국가 및 HS Code(2·4·6·10단위)별로 집계한 국가별 품목별 무역통계다. 금액은 미화(USD)이며, 수출은 FOB(신고금액), 수입은 CIF(과세가격) 기준이다. 중량은 순중량(kg). 국가는 수출은 최종목적국, 수입은 원산국을 원칙으로 하며 무역통계부호상 ISO 코드로 분류한다. 단순 통과물품이나 일시 반입·반출 물품은 제외된다(물적 자원의 증감이 없으므로). 통계는 매월 수출입 신고의 정정·취하를 반영해 전월까지 자료를 현행화한다(주기 1개월).

dim 스키마 (연결·참조)

dim은 fact의 코드에 의미를 붙여 주는 참조 테이블이다. fact에는 stat_cd(국가코드)나 hs10(품목코드) 같은 코드만 있고 이름이 없다. 어느 나라인지, 무슨 품목인지, 개정 전 코드는 무엇이었는지를 알려면 아래 dim 테이블과 조인한다. 핵심은 fact를 훼손하지 않고 이름·연결을 옆에 병기한다는 점이다.

dim 테이블
테이블담는 것
dim_countrystat_cd관세청 국명(원본 보존) + 외교부 표준명·ISO2/3·대륙(참조 병기). 미매칭 시 참조는 NULL("없으면 없는 대로")
dim_hs10hs10관세청 품목명(한/영)·수량·중량단위·발효일(valid_from, 실측)·등장범위
dim_hs6_concordance(hs2022, hs_past, past_version)HS 개정 간 6자리 다대다 대응. relation: identity / mapped / deleted / new. 관세청 공식 연계표
dim_hs10_concordance(hs_from, hs_to, revision)개정 하나(2012·2017·2022)를 건너는 10자리 연결. weight(출발 코드별 합 1)·score·relation. 추정
dim_hs10_to_2022(hs_past, past_version, hs2022)과거 체계를 현행 위로 한 번에 옮기는 10자리 연결. weight·method(chain / hs6_fallback). 추정
dim_hs10_name_hist(hs10, byeolpyo_year)HS10 품명 이력. 별표 여섯 판본의 국문·영문 품명. dim_hs10이 못 채운 폐지코드 이름이 여기 있다. 기재부 고시 원문
dim_nqinqi5관세청 신성질별 분류 758개(세세분류)와 대·중·소·세 계층. 2012년 제정 후 코드 체계가 유지돼 HS 개정에 흔들리지 않는다. 관세청 공표
dim_hs10_to_nqi(hs10, nqi5)HS10 → 신성질별. weight·method(direct / chain). 현행 코드는 공표 대응표 그대로, 폐지 코드는 dim_hs10_to_2022로 이어 붙였다
dim_hs10_to_major10(hs10, item)HS10 → 10대 수출품목(반도체·승용차 등). 현행 수출 성질별 기준이며 관세청 공표치와 대조해 확정했다
dim_temper(방향, 성질부호)성질별 부호 334개(수출 153·수입 181)의 이름과 4단 계층, 그리고 10대 품목 꼬리표. 이름은 API 응답에서 와 폐지부호까지 담는다. 관세청 공표
dim_workday10d(base_ym, cutoff)상순·중순·하순의 일수와 조업일수. 10일 단위 자료를 견주려면 반드시 필요하다 — 상순 조업일수가 1~8일로 여덟 배까지 벌어진다. KASI 특일정보 검증 달력

HS 개정 연결

무엇이 문제인가. HS 품목코드는 국제 협약에 따라 5년마다 개정된다. 개정 때 코드가 신설·폐지·통합·분할되므로 같은 상품인데도 연도에 따라 코드가 달라진다. 코드가 같은지만 보고 시계열을 이으면 그 품목은 도중에 끊기거나 엉뚱하게 이어진다. 각 판본은 개정 연도 1월 1일부터 적용되고, 이 데이터에는 네 판본이 이렇게 걸쳐 있다.

HS 판본별 적용 구간
HS 판본적용 시작이 데이터에서의 구간
HS20072007.012007.01 – 2011.12
HS20122012.012012.01 – 2016.12
HS20172017.012017.01 – 2021.12
HS20222022.012022.01 – 데이터 끝

한 시계열이 2007~2026 전체를 지나가면 개정 경계 세 곳(2012·2017·2022 초)을 넘는다. 여기에 국내 품목분류 개정이 2025·2026년에 더해진다.

DB가 하는 일은 연결표를 갖춰 두는 것까지다. 끊김을 메우는 것은 dim_hs6_concordance(6자리, 관세청 공표)와 dim_hs10_to_2022(10자리, 우리 추정) 두 테이블이고, 근거의 성격이 달라 표를 나누어 함께 제공한다. fact에는 HS10 원본을 그대로 두므로 앞 6자리로 자르는 일(SUBSTR(hs10,1,6))도 잇는 일도 분석 계층의 몫이다. 두 층위를 어떻게 만들었고 어디까지 믿을 수 있는지는 HS 연계 탭에 있다.

커버리지

커버리지는 "fact의 코드가 dim에서 얼마나 이름·연결을 얻는가"를 나타내는 지표다. 국가는 전부 매칭되고, 기간도 빠짐없이 이어진다. 다만 품목코드는 100%가 아니다 — 그 이유와 실제 영향은 아래에서 설명한다.

235개월
2007.01–2026.07 연속(빠짐 없음)
240 / 240
국가 dim 매칭 (미매칭 0)
15,406종
HS10 (fact 등장)
72.8%
hs10 → dim_hs10 (11,212/15,406)
concordance 커버리지 (fact hs6 → hs_past 매칭, 종수 기준)
버전커버리지
200766.1%
201271.1%
201780.8%
읽는 법. 위 concordance 수치는 종수 기준·가정적 상한이다(전 기간에 한 버전을 일괄 적용). 시기별 올바른 버전 + 거래액 기준으로 실측하면 미매칭은 0.004~0.007%에 불과하다(완전 사각지대 130종, 거래액 0.004%). hs10 커버리지 72.8%의 미매칭 27.2%(폐지코드)도 HS6 이하 해상도 분석에서는 concordance로 계열 식별이 가능해 문제가 되지 않는다. 폐지코드 품목명 자체는 2026-08에 해결됐다 — 국가법령정보센터의 연도별 HSK 별표에서 4,194종 중 3,738종(폐지코드 거래액의 94.1%)의 품명을 되찾아 dim_hs10_name_hist로 적재했다. 자세한 판정은 데이터 함정 탭, 연계 작업은 HS 연계 탭 참조.

검증 — 04_validate 5계층

DB를 다 만든 뒤, 단일 스크립트(04_validate.py)가 다섯 계층(스키마 / 값 / 적재 / dim / concordance)을 자동 점검한다. 예컨대 "우리가 만들지 않기로 한 파생 컬럼이 섞여 들지 않았는가", "수집된 데이터가 하나도 빠짐없이 적재됐는가", "bal_payments = exp_dlr − imp_dlr 항등식이 전 행에서 성립하는가"를 확인한다. 결과는 네 등급으로 표시된다.

PASS 9 WARN 4 INFO 1 FAIL 0

PASS는 통과, FAIL은 반드시 고쳐야 할 무결성 위반, WARN은 주의가 필요하나 결함은 아닌 항목, INFO는 참고 사항이다. FAIL이 0이라는 것이 가장 중요하다 — 무결성 위반이 하나도 없다는 뜻이다. WARN 4는 전부 원자료(관세청 공개자료) 자체의 한계(품목 커버리지 등)이지 DB가 잘못 만들어진 것이 아니다. INFO 1은 음수 중량 19행(관세청의 사후 정정 원본이므로 보존). 참고로 bal_payments 항등식은 거래 행 전체에서 위반 0으로 통과했다.

데이터 함정

DB를 만들며 실측으로 확인한, 모르고 쓰면 결과를 틀리게 만드는 지점들을 모았다.

"함정"은 DB의 버그가 아니다. 대부분은 관세청 원본 데이터 자체의 특성이거나, 분석할 때 짚고 넘어가야 하는 주의점이다. 이 DB는 원본을 그대로 보존하는 것이 원칙이므로 이런 값들을 임의로 고치지 않는다 — 대신 여기에 미리 목록으로 드러내, 분석하는 연구자가 각자 상황에 맞게 처리하도록 한다. 아래 카드마다 무엇이 문제이고, 왜 그런지, 어떻게 대응하는지를 담았다.

국가코드 · §1.1

나미비아 ISO2 = 'NA' → NULL 오변환

외교부 CSV에서 나미비아 ISO2는 NA. pandas read_csv의 기본 na_values가 이를 결측으로 오변환한다. 처리 없이 dim_country를 만들면 나미비아가 조인 키 결측으로 탈락. 해결: keep_default_na=False, na_values=[""].

HS 개정 · §1.4–1.5 / §2.2

HS 개정 비대칭 (허브 스타형 사각지대)

연계표가 HS2022 허브 스타형이라 2007에서 가장 먼 구간의 사각지대가 크다. 2007에 있다가 2022 이전 완전 소멸한 HS6는 세 연계표 어디에도 없다 — 완전 사각지대 130종, 거래액 0.004%. 커버리지 66.1/71.1/80.8%는 종수·가정적 상한이며 거래액 실측 손실은 0.004~0.007%.

원본 값 · §1.6

음수 중량 19행

fact_trade에 중량 음수 19행. 전부 금액은 0 이상. 관세청의 중량 사후 정정(반품·수정신고 상계)으로 파싱 오류가 아니다. 원본 보존. 단가=금액/중량 계산 시 이상치이므로 분석 계층에서 처리.

단가 계산 · 원칙 §1.3

wgt = 0 인데 dlr > 0 (단가 불가)

소액 거래에서 kg 미만이 반올림돼 중량이 0이 된 행(예: expDlr=65, expWgt=0). 이 행은 단가=금액/중량 계산을 불가능하게 만든다. DB는 (65, 0)을 그대로 보존한다 — 분석 계층의 제약이지 DB 결함이 아니다.

공개 시점 · §1.7

2단계 공개 (잠정월 함정) · 2026 빈 응답

관세청은 월통계를 2단계로 공개한다 — 먼저 국가별 총계(잠정), 이후 HS10 품목 명세(확정). 총계만 있고 명세가 없는 잠정월은 제거(202604·202605 각 243행). 미공개월은 items=0 빈 응답으로 오며 임의값으로 채우지 않는다. 확정 범위는 위 요약 카드에 있다.

결측 표현 · §1.2

결측과 0을 구분하지 않는다

수치 태그(expDlr/impDlr/expWgt/impWgt/balPayments)는 항상 존재하고 값이 없으면 0으로 온다. 원본에 NULL이 없다. "관측값 없으면 NULL" 원칙은 이 데이터에 적용 불가능하며, int(값) 캐스팅은 손실이 아니다.

품목명 · §1.3

한글품목명은 최말단 세분만

HS부호 파일의 한글품목명은 HS10 최말단 서술만 담는다(예: 0101291000 = "경주말"). 이것이 말(馬)인지 상위 맥락이 없다. 완전한 서술이 필요하면 상위 HS 조인 또는 HS6 concordance로 분석 계층에서 해결. DB는 서술을 합성하지 않는다.

폐지 표기 · §1.5

'삭제' 폐지 표기

2022→2017 연계표에 (삭제, 300219) 행 — 2017 코드가 2022에서 폐지되어 대응 코드 없음. relation='deleted'로 보존(제거 아님). 품목 퇴출 정보는 개정 간 연속성 분석에 쓰일 수 있다.

검증 기준 · §1.8

meta item_count 총계행 미집계

수집 단계 item_count는 총계행을 세지 않아 거래 0건 페어에서 item_count=0이나 fact_total엔 1행 존재(4,642개). item_count는 fact 행수 대조 기준으로 부적합. 검증은 총합 비교를 폐기하고 "수집→적재 누락 감지"로 전환.

폐지코드 · §2.1

hs10 폐지코드 품목명 NULL (72.8%)

fact에 등장하는 hs10의 27.2%가 2026 HS부호 스냅샷에 없는 폐지코드라 dim_hs10 품목명이 NULL("정직한 NULL"). HS6 이하 해상도 분석은 hs6 절단으로 소거돼 무영향. HS10 세분 품목명을 쓰는 분석에서만 제약. 2026-08 해결: 확보 경로는 data.go.kr이 아니라 국가법령정보센터의 연도별 HSK 별표였다. 4,194종 중 3,738종(89.1%, 폐지코드 거래액의 94.1%)의 국·영문 품명을 되찾아 dim_hs10_name_hist로 적재했다. dim_hs10은 그대로 두었다 — 품명이 판본에 따라 변해(31.5%) 키가 hs10 하나인 표에 열로 넣을 수 없다(HS 연계 탭).

봉인. hs10 커버리지 72.8%와 concordance WARN 수치는 재구축 세션에서 "결함"으로 오판했다가 재측정으로 착시임이 판명됐다. 거래액 기준 실손은 0.004~0.007%로 미미하다. 개수 기반 지표(품목 진입·퇴출 계수 등)나 HS10 세분 분석으로 내려갈 때만 재검토가 정당하다. 상세는 docs/세션_발견_노트.md 0절.

받기·사용

DB를 받아 로컬 주피터에서 분석하려는 연구자에게 필요한 것을 안내한다.

먼저 알아둘 것 — 받을 것이 둘로 나뉜다. 이 DB는 두 부분으로 배포된다. 하나는 분석 코드·노트북·폴더 구조가 담긴 GitHub 저장소이고, 다른 하나는 DB 파일 자체(kcsdb.duckdb)다. DB 파일은 용량이 커서 GitHub 저장소에 넣을 수 없기 때문에(100MB 한도), 저장소는 clone으로 받고 DB 파일은 Releases에서 따로 받아 저장소 안 정해진 자리에 놓는 방식이다.

전체 흐름은 네 단계다 — 패키지 설치 → 저장소 받기 → DB 파일 받아 배치 → 주피터에서 열기. DB를 재구축하는 것이 아니라 이미 만들어진 DB를 받아 분석만 하므로 준비물은 가볍다(파이썬 패키지 4개). 순서대로 따라 하면 된다.

내려받기 v1.0-202607.2 · 2026-09-13 게시

  1. 패키지 설치

    터미널(명령 프롬프트 / PowerShell / 터미널)에서 아래를 실행한다. 분석만 하므로 이 4개면 충분하다 — conda나 특정 파이썬 버전은 필요 없다.

    pip install duckdb pandas matplotlib jupyter
  2. 저장소 받기 (코드·노트북)

    GitHub에서 이 저장소를 clone(또는 ZIP 다운로드 후 압축 해제)하면 KCSDB2/ 폴더가 생긴다. 분석에 필요한 것이 모두 이 안에 들어 있다.

    git clone https://github.com/pilsunchoi/KCSDB2.git
    • notebooks/analysis_start.ipynb — 시작용 분석 노트북 (4단계에서 연다)
    • scripts/ · docs/ · data/external/ — 파이프라인 스크립트·문서·외부 참조자료
    • data/processed/ — 지금은 비어 있는 폴더. 다음 단계에서 받을 DB를 여기에 놓는다.

    즉 노트북은 이 저장소에 함께 들어 있어 따로 받을 필요가 없다. 오직 용량이 큰 DB 파일만 저장소에 없어서 다음 단계에서 따로 받는다.

  3. DB 파일 받아서 배치

    앞 단계에서 저장소를 받았으니 data/processed/ 폴더는 이미 있다(비어 있음). 이제 Releases 페이지에서 압축된 DB kcsdb.duckdb.gz를 받아 압축을 풀고, 그 파일을 data/processed/kcsdb.duckdb 자리에 놓는다.

    • Windows: 7-Zip 등으로 .gz 압축 해제
    • Mac / Linux: 터미널에서 gunzip kcsdb.duckdb.gz

    노트북은 이 data/processed/kcsdb.duckdb 경로에서 DB를 읽으므로, 파일 이름과 위치를 그대로 맞춰 두는 것이 중요하다.

  4. 주피터에서 열기

    준비가 끝났다. 저장소 루트(KCSDB2/)에서 아래를 실행하면 브라우저에 주피터가 열린다. 2단계에서 함께 받은 notebooks/analysis_start.ipynb를 열고 셀을 위에서부터 차례로 실행하면, DB 접속 → 구조 확인 → 기술통계 시연이 순서대로 나온다.

    jupyter notebook

기본 접속 코드

DuckDB는 파일 하나에 접속하는 방식이라 서버가 필요 없다. 아래처럼 read_only=True로 열면 실수로 원본을 바꿀 염려 없이 안전하게 조회만 할 수 있다. 여러 사람이 같은 파일을 동시에 읽을 때도 이 옵션이 안전하다. 작업이 끝나면 con.close()로 닫는다.

import duckdb
con = duckdb.connect("data/processed/kcsdb.duckdb", read_only=True)
print(con.sql("SELECT COUNT(*) FROM fact_trade").fetchone())
con.close()
단위 표기. 금액은 미화 달러(USD) — 수출 FOB·수입 CIF 기준. 중량은 순중량 kg.
범위 경계. 월 실적은 최신 확정월까지이고 마지막 해는 부분년이므로 연도끼리 견줄 때는 제외한다. 정확한 범위는 SELECT MIN(yyyymm), MAX(yyyymm) FROM fact_trade로 확인한다.
개정 경계. 2012·2017·2022년 1월에 HS 품목코드가 바뀌고, 그 사이에도 국내 품목분류 개정이 있다(2025·2026년 1월). 이 경계를 넘는 시계열은 dim_hs6_concordance(6자리) 또는 dim_hs10_to_2022(10자리)로 이어야 하며, 그냥 코드가 같은지만 보면 계열이 끊긴다. 개정에 아예 흔들리지 않는 분류가 필요하면 dim_hs10_to_nqi(관세청 신성질별)를 쓴다 — 대신 758개로 해상도가 낮다. 쓰는 법은 HS 연계 탭에 있다.
다른 분류의 공식 집계. 같은 통관 실적을 관세청이 다른 분류로 집계해 둔 것도 두 계열 들어 있다 — fact_temper(성질별, 1995~)와 fact_nqi(신성질별 × 국가, 2005~)다. HS 개정과 무관하고 fact_trade보다 기간이 길다. 같은 무역이므로 서로 더하면 안 된다. 둘의 차이는 DB 구축 탭에 있다.
10일 단위 자료. 월 실적 말고도 10일 단위 잠정치(fact_exp10d, 뷰 v_exp10d_seg)가 들어 있다. 수출·수입 각각의 주요품목별·주요국가별 네 계열이며 series로 가른다. 월 통계보다 빠른 대신 항목이 열 개씩뿐이고 중량이 없다. 무엇이 얼마나 들어 있고 어디서 받았는지는 아래 표 전체 목록에 있다.

무엇이 들어 있나 — 표 전체 목록

이 DB는 관세청 공공데이터 여덟 갈래와 외부 참조 셋을 한 파일에 모은 것이다. 아래 표가 전부다. 행수와 기간은 DB를 직접 읽어 자동으로 채우므로 이 페이지가 실물보다 낡을 일이 없다. fact는 관세청이 준 실적을 그대로 담고, dim은 코드에 이름과 연결을 붙이며, mart는 이 저장소가 계산한 지표다. 계산한 것과 받은 것을 이름으로 갈라 두었으니 접두어만 보고 근거의 성격을 알 수 있다.

이 DB에 들어 있는 것 전부 (행수·기간은 자동 갱신)
테이블담는 것행수기간출처
fact — 관세청이 준 실적 그대로
fact_trade국가 × HS10 품목 × 월 수출입 실적. 이 DB의 본체28,093,1092007.01–2026.07관세청 품목별 국가별 수출입실적(GW) · 공공데이터포털 15100475
fact_total품목 구분 없는 국가 × 월 총계57,1052007.01–2026.07관세청 품목별 국가별 수출입실적(GW) · 15100475 (총계 응답)
fact_nqi신성질별 × 국가 × 월 수출입 실적. 관세청이 직접 집계한 공식치라 HS 개정 추정이 섞이지 않는다. 이 표만 2005년부터다6,567,8732005.01–2026.07관세청 신성질별 수출입실적(GW) · 15101616
fact_temper성질별 × 월 수출입 실적. 관세청 공식치이고 이 표만 1995년부터다. 10일 자료의 10대 품목이 이 분류로 정의되어, 품목 단위로 맞대 볼 수 있는 유일한 계열이다. 수출과 수입은 부호 체계가 서로 다르다123,9651995.01–2026.07관세청 성질별 수출입실적(GW) · 15102109
fact_exp10d10일 단위 잠정치 네 계열(수출·수입 × 주요품목·주요국가). 값이 바뀔 때마다 새 행을 쌓아 관측 이력을 남긴다16,8522016.01–2026.08관세청 10일 단위 잠정치 · 15157908·15157941·15157901·15157909
fact_ip산업별 광공업생산지수(2020=100) 월 계열. 생산·출하·재고의 원지수와 계절조정, 내수·수출 출하지수, 명절·조업일수 조정 총지수. 산업은 한국표준산업분류 소분류(3자리)까지이고 1995.01부터 전부 있다279,4761995.01–2026.07국가데이터처 광업제조업동향조사 · KOSIS DT_1F02001·DT_1F02016·DT_1F02061
fact_cli경기종합지수(선행·동행·후행, 순환변동치)와 구성지표. 지수는 1970년, 구성지표 원계열은 2003년부터20,9391970.01–2026.07국가데이터처 경기종합지수(10차) · KOSIS DT_1C8015·DT_1C8016
dim — 코드에 이름과 연결을 붙이는 참조
dim_country국가코드에 관세청 국명과 외교부 표준명·ISO2/3·대륙을 병기240관세청 + 외교부 국가표준코드 · 15091117
dim_hs10HS10 품목명(한/영)·수량/중량 단위·적용시작일11,327관세청 HS부호 · 15049722
dim_hs6_concordanceHS 개정 사이 6자리 대응. 관세청 공표18,944관세청 FTA 포털 HS 연계표
dim_hs10_concordance개정 하나(2012·2017·2022)를 건너는 10자리 연결. 추정99,860기재부 고시 별표에서 이 저장소가 추정 · 국가법령정보센터
dim_hs10_to_2022과거 체계를 현행 위로 한 번에 옮기는 10자리 연결. 추정73,518기재부 고시 별표에서 이 저장소가 추정 · 국가법령정보센터
dim_hs10_name_histHS10 품명 이력. 폐지코드 이름이 여기 있다119,332기재부 고시 「관세·통계통합품목분류표」 별표 · 국가법령정보센터
dim_hsk_revision개정별 신설·폐지 코드와 사유. 개정 시점이 문서로 확정된다7,912연도별 별표 차분 + 신구대조표 · 국가법령정보센터·재정경제부
dim_nqi신성질별 분류의 대·중·소·세·세세 5단 계층과 이름758관세청 신성질별 분류 · 15049720
dim_hs10_to_nqiHS10 → 신성질별. 현행 코드는 공표 대응, 폐지 코드는 추정 경유17,769관세청 15049720 + 이 저장소 추정
dim_hs10_to_major10HS10 → 수출 10대 품목. 관세청 공표치와 대조해 확정2,651관세청 15049720 + 공표치 대조
dim_temper성질별 부호의 이름과 4단 계층, 그리고 10대 품목 꼬리표. 이름은 API 응답에서 와 폐지부호까지 담고, 계층은 별표에서 온다334관세청 성질별 수출입실적 15102109 + 신성질별 분류 15049720
dim_workday10d상순·중순·하순의 일수와 조업일수. 10일 자료를 견주려면 필요하다1,1851995.01–2027.11한국천문연구원 특일정보 API로 대조한 공휴일 달력
dim_ksic생산지수의 산업 코드 사전. 총지수·대분류·중분류·소분류 4층과 상위 코드115국가데이터처 KOSIS DT_1F02001 항목 메타
dim_cli경기종합지수 지표 코드의 이름56국가데이터처 KOSIS 항목 메타
mart — 이 저장소가 계산한 지표
mart_exp10d_metrics10일 자료 지표 — 조업일수 보정 전년 대비, 비중, 기여도, 진도율18,3842016.01–2026.08이 저장소가 계산
mart_exp10d_beta항목별 조업일수 탄력성192이 저장소가 추정
mart_exp10d_progress진도율 분포(조업일 보정 전후)1,248이 저장소가 계산
mart_exp10d_forecast월 마감 예측과 구간4,4162019.01–2026.08이 저장소가 추정
mart_exp10d_fcskill예측의 표본외 성적과 등급48이 저장소가 계산
mart_exp10d_fclog확정 전 예측의 기록(추가 전용)48이 저장소가 계산
mart_nqi_check신성질별 공식치와 우리 도출치의 월별 대조2592005.01–2026.07이 저장소가 계산
meta — 수집 기록
meta_callsAPI 호출 기록. 무엇을 언제 몇 번 받았는지57,340이 저장소의 수집 로그

기간이 표마다 다르다. 월 실적(fact_trade)은 2007년부터, 신성질별 공식 실적(fact_nqi)은 2005년부터, 성질별 공식 실적(fact_temper)은 1995년부터, 10일 단위 잠정치는 2016년부터, 조업일수 달력은 2027년까지 미리 만들어 두었다.

어디서 받았나

원천은 공공데이터포털의 관세청 OpenAPI가 중심이고, 여기에 분류·달력 자료와 국가데이터처 KOSIS의 참조 통계가 더해진다. 모두 무료이며 활용신청은 자동승인이다(15049720은 신청도 필요 없다). 아래 표의 번호는 공공데이터포털 데이터셋 번호이고, KOSIS는 통계표 번호다.

원천 자료와 받는 방법
원천번호이 DB에서비고
관세청 품목별 국가별 수출입실적(GW)15100475fact_trade · fact_total월×국가 전수 호출. 엿새에 걸쳐 5만 회를 넘겼다
관세청 신성질별 수출입실적(GW)15101616fact_nqi엔드포인트 newtempertrade. 필수 변수 imexTpcd(1=수출/2=수입). 연 단위로 44회면 끝난다
관세청 성질별 수출입실적(GW)15102109fact_temper · dim_temper엔드포인트 Idfytempertrade. 연 단위로 64회면 끝난다. 1995년부터다
관세청 수출·수입 10일 단위 잠정치15157908 15157941
15157901 15157909
fact_exp10d주요품목별·주요국가별 각 수출입. 응답에 항목 이름이 없어 순서를 보도자료와 대조해 확정했다
관세청 HS부호15049722dim_hs10품목명·단위·적용시작일
관세청 신성질별 분류15049720dim_nqi · dim_hs10_to_nqi · dim_hs10_to_major10신청 불요·연간 갱신
외교부 국가표준코드15091117dim_country표준 국명·ISO2/3·대륙
관세청 FTA 포털 HS 연계표dim_hs6_concordance6자리 개정 대응. 공표된 사실
기재부 고시 「관세·통계통합품목분류표」 별표dim_hs10_concordance · dim_hs10_to_2022 · dim_hs10_name_hist국가법령정보센터 PDF. 10자리 연결은 여기서 이 저장소가 추정한 것이다
한국천문연구원 특일정보 APIdim_workday10d공휴일 달력을 전수 대조해 조업일수를 계산
국가데이터처 광업제조업동향조사DT_1F02001
DT_1F02016
DT_1F02061
fact_ip · dim_ksicKOSIS OpenAPI. 광공업생산지수를 한국표준산업분류 소분류까지. 수출과 견줄 국내 생산 쪽 계열이다
국가데이터처 경기종합지수(10차)DT_1C8015
DT_1C8016
fact_cli · dim_cli같은 KOSIS OpenAPI. 지수는 1970년, 구성지표 원계열은 2003년부터
같은 무역을 세 분류로 담는다 — 알고 쓰는 것이 좋다. fact_trade(HS10×국가)와 fact_nqi(신성질별×국가), fact_temper(성질별)는 같은 통관 실적을 서로 다른 분류로 집계한 것이다. 셋을 더하면 안 된다. HS10 해상도가 필요하면 첫째를, HS 개정에 흔들리지 않는 계열이 필요하면 둘째를, 10일 자료와 품목을 맞대거나 1995년까지 거슬러야 하면 셋째를 쓴다. fact_nqi를 따로 받아 둔 이유는 우리가 HS10에서 신성질별로 환산한 값이 옛 연도에서 정확하지 않기 때문이다 — 총액은 맞지만 세세분류 배분이 2007년 25%, 2017년 5% 어긋나고 2022년부터야 0.3%로 떨어진다. 그 대조를 mart_nqi_check가 월별로 남긴다.

위 안내는 이미 만들어진 DB를 받아 쓰는 연구자를 위한 것이다. 반대로 DB를 만들어 나눠 주는 배포자(관리자)—예컨대 새 월 데이터를 반영해 DB를 갱신하고 배포하는 사람—는 할 일이 다르다. DB 파일을 .gz로 압축하고, 그것을 GitHub Release에 첨부해 올리며, 관세청 API 인증키가 저장소에 실수로 올라가지 않도록 관리(.gitignore 처리)해야 한다. 이 배포 절차는 저장소 docs/배포자_안내.md에 정리돼 있다.

연구

관세청 무역통계 DB 위에서 수행하는 분석 챕터를 모았다. 각 챕터는 렌더된 문서(Markdown·표·그림)와 그 결과를 재현하는 노트북으로 연결된다.

여섯 챕터 모두 이 DB 위에서 수행한 실제 분석이다. 시연은 방법 예시이지 분석 방향(연구 결론)이 아니다 — 이 DB는 특정 분석을 전제하지 않는다.
I

Chapter 1

한국 수출입의 20년 지형도

교역국과 품목 구성은 어떻게 이동했는가 (2007–2026)

인과 해석 없이 관측된 구조와 그 변화만 서술하는 기술통계 챕터. 교역국 순위, HS 대분류 비중, 품목 다양성·집중도, 개정을 걸친 품목 연결(concordance), 단가와 무역수지를 다룬다.

  • 2025년 수출 7,088억 달러 — 기간 최대. 상위 두 나라(중국·미국)가 전체의 35.7%.
  • 전기·전자(HS 85) 비중이 26%에서 33%로 확대; 선박·정밀기기는 축소.
  • 수출액의 90%를 채우는 품목은 20년째 400개대 — 집중 구조가 지속.
연간 수출·수입 추이 (2007–2025) 2025년 수출 상위 10개국
II

Chapter 2

무역의 계절성 — 월별 리듬

1년 안에서 수출입은 어느 달에 몰리는가 (2007–2025)

이 DB의 월별 데이터로 계절 리듬을 처음 그리는 기술통계 챕터. 연간 대비 월별 비중, 2월 저점의 달력 요인, 품목마다 다른 계절 진폭을 다룬다.

  • 계절성은 완만 — 최고(12월 8.74%)와 최저(2월 7.47%) 차이가 1.3%p 남짓.
  • 비수기는 1분기(특히 2월), 성수기는 연말·가을. 2월엔 날수·설날 요인이 섞인다.
  • 품목마다 자기 달력 — 의약품·화장품·선박은 계절적, 벌크 화학·철강은 평탄.
월별 계절 프로파일 (수출·수입) 품목군별 월별 계절 지수
III

Chapter 3

양방향 무역수지 — 어느 나라와 흑자·적자인가

상대국별 흑자·적자 구도와 20년의 변화 (2007–2025)

챕터 1의 전체 무역수지를 교역 상대국별로 쪼갠 기술통계 챕터. 2025년 흑자·적자 상위국, 적자의 두 얼굴(자원·자본재), 대중국 수지의 반전을 다룬다.

  • 흑자 상위는 미국·베트남·홍콩, 적자 상위는 자원공급국(사우디·호주·카타르)과 일본·독일.
  • 흑자국 157개 > 적자국 81개 — 순 +772억 달러(2025).
  • 최대 변화: 대중국 수지가 2013년 +628억 정점 → 2023년 적자로 반전.
2025년 양방향 무역수지 (흑자·적자 상위국) 주요 파트너 무역수지 추이
IV

Chapter 4

품목의 진입·퇴출 — 무엇이 생기고 사라졌나

개정 착시를 걷어낸 20년 품목 교체 (2007–2025)

새로 등장하고 사라진 HS6 품목을 세는 기술통계 챕터. 개수 지표라 HS 개정을 concordance로 이어야 정확하다 — 코드만 세면 개정으로 번호만 바뀐 것을 새 품목·사라진 품목으로 착각하게 된다.

  • 코드만 세면 진입 941·퇴출 408 — 그러나 개정을 이으면 실제는 진입 327·퇴출 326.
  • 4,696종(약 93%)이 20년간 지속 — 품목 구성은 놀랍도록 안정적.
  • 진입·퇴출은 금액으로는 각각 0.3%·0.2%뿐 — 방산·전자담배·배터리소재 등 소액 품목이 조용히 교체.
원본코드 vs 개정연결 진입·퇴출 2007 vs 2025 품목 구성(지속·진입·퇴출)
V

Chapter 5

반도체의 세 층 — 칩, 장비, 소재

칩은 세계 최강, 소부장은 수입 의존 (2007–2025)

반도체 관련 품목만 떼어내 칩(메모리)·제조장비·소재 세 층으로 나눠 본 기술통계 챕터. HS 코드 정의는 관세청 '반도체 HS 표준해석 지침'(2023) 기반 선행 연구(윤승환 2024)를 따랐다.

  • 칩은 거대한 흑자(2025년 +799억, 전체 수출의 20.7%) — 단일 품목군으로 압도적.
  • 제조장비는 20년 내내 적자(2025년 −147억, 수입이 수출의 2배).
  • 칩은 아시아에 팔고, 장비는 네덜란드(ASML)·일본·미국에서 사온다.
2025년 반도체 3층 교역(칩·장비·소재) 반도체 3층 무역수지 추이
VI

Chapter 6

데이터베이스 구축 과정

원자료에서 검증된 DB까지의 전 과정

이 DB를 처음부터 다시 만들고 공개하기까지 — 왜 만들었는지, 어떤 원칙으로 설계했는지, 데이터를 어떻게 쌓고 어떤 함정을 만났는지, 무엇을 검증하고 어떻게 배포했는지. 데이터베이스에 익숙하지 않은 독자도 읽도록 용어를 풀어 썼다.

  • 원본 XML 5만여 개 → 파이프라인 6단계 → 통합 검증(FAIL 0).
  • fact는 raw, 연결·참조는 dim — 특정 분석에 치우치지 않는 중립 설계.
  • 함정(나미비아 NA·잠정월·다대다·폐지코드)을 고치지 않고 목록으로 보존.