개요
이 DB가 무엇을 담고, 왜 만들었고, 어떤 원칙 위에 서 있는지를 소개한다.
고지. 관세법령정보포털은 10단위 세율이 참고용이며 법적 효력이 없다고 밝힌다. 실행세율은 이 저장소가 조문을 해석해 만든 파생값이다. 세액 계산이나 수입신고에는 관세법 별표 관세율표와 해당 규정(조정관세·할당관세·양허관세 규정, FTA 협정문)의 원문을 확인할 것.
무엇인가. 한국에 수입되는 물품은 HSK(한국 품목분류) 10자리 코드로 분류되고, 코드마다 그해에 적용되는 관세율이 정해져 있다. 그런데 한 코드에 세율이 하나가 아니다 — 기본세율이 있고, WTO에 약속한 협정세율이 있고, 정부가 해마다 정하는 조정·할당관세가 있고, 상대국이 어디냐에 따라 FTA 협정세율이 있다. 이 DB는 관세법령정보포털(CLIP)이 연도별로 보여 주는 그 세율 전부를 2007년부터 2026년까지 받아 DuckDB 파일 하나(kcstariff.duckdb, 약 38MB)에 담은 것이다. 세율 화면의 문구는 그대로 보존하고(rate_txt), 그것을 숫자로 읽은 종가세율(물품 가격의 몇 %)과 종량세액(kg당 몇 원)을 옆에 두었다.
왜 만들었나. 세율 자료는 "지금 세율"만 구하기는 쉽다 — 관세청이 공공데이터포털에 「품목번호별 관세율표」 엑셀(15051179)을 올려 둔다. 문제는 과거다. 그 엑셀은 현행판과 직전판 하나뿐이라 "2013년에 이 코드의 세율이 얼마였나"를 답하지 못한다. 관세법령정보포털은 연도를 골라 옛 세율표를 보여 주지만 화면으로만 준다. 검색 조건에 류(HS 앞 2자리)를 주면 그 류의 10단위 코드 전부가 표 한 장에 오므로 코드 하나씩 물을 필요는 없지만, 류 97개를 해마다 돌아야 하고, 기본·탄력·양허 세율을 주는 화면과 FTA 세율을 주는 화면이 따로라 류마다 두 번씩 받아야 한다. 스무 해에 3,544번이다. 게다가 앞 화면은 탄력·양허 세율 칸이 처음에는 비어 있다가 화면이 열린 뒤 따로 채워지는 구조라, 화면을 그대로 저장해 표만 읽으면 기본세율밖에 안 보인다(데이터 함정 탭). 이 DB는 그 수집과 정리를 끝내 두어, 어느 코드의 세율이 어느 해에 얼마였고 어떻게 바뀌었는지를 바로 구할 수 있게 한다.
왜 "실행세율"이 따로 있나. 세율이 여럿이면 어느 것이 실제로 적용되는지를 정해야 한다. 관세법 제50조가 그 우선순위를 정하고, FTA 관세특례법 제5조가 협정세율과의 관계를 정한다. 건고추(0904210000)는 2025년에 기본세율 50%, 양허관세 270% 또는 kg당 6,210원, 한-미 FTA 18%가 함께 있는데, 조문을 따르면 적용 세율이 원산지에 따라 갈려서, 가령 협정이 없는 나라에서 온 수입에는 270%가, 미국산에는 18%가 적용된다. 이 DB는 그 판정을 코드×연도마다 해 두었다(fct_applied_rate, 237,990행). 어떤 규칙으로 정했는지는 실행세율 탭에, 조문 원문은 저장소의 실행세율_법령근거.md에 있다.
누구를 위한 것인가. 무역통계와 세율을 함께 놓고 보려는 연구자가 주 독자다. 무역통계 DB KCSDB2는 관세율이 없다고 명시하는데, 그 빈자리를 이 DB가 채운다. 두 파일을 함께 열고 연도와 코드로 이어 붙이면 "어떤 수입이 어떤 세율을 만났는가"를 코드 단위로 볼 수 있다. 반대로 이 DB가 답하지 못하는 것도 분명하다. FTA 세율은 특혜를 신청했을 때 적용될 수 있는 세율이지 실제로 낸 세율이 아니고(실제로 신청했는지는 자료에 없다), FTA 일곱 상대 밖의 협정(칠레·호주·RCEP 등)은 들어 있지 않으며, 관세율표 화면은 1월 1일 기준이라 하반기에 지정되는 할당관세 같은 연중 변경을 놓칠 수 있다.
2,024,063
tariff_rate 세율 행 (코드×연도×구분)
2007–2026
연도별 세율표 (20개 연도)
11,294–12,244
연도당 HSK 10단위 코드 수
24
세율 구분 (기본·WTO·탄력·양허·FTA 7)
237,990
fct_applied_rate 실행세율 행
설계 원칙 세 문장
이 DB의 결정은 KCSDB2와 같은 최상위 원칙에서 나온다 — 받은 것은 그대로 담고, 해석은 따로 둔다. 세율 자료에 맞춰 세 문장으로 압축하면 다음과 같다.
- 화면 문구를 그대로 보존한다. 「270% 또는 6,210원」처럼 화면에 보이는 문구를
rate_txt에 그대로 두고, 그것을 숫자로 읽은 종가(adval)와 종량(specific)을 옆에 병기한다. 숫자로 읽지 못한 문구는 하나도 없지만, 같은 세율을 두 화면이 다르게 적은 것(영화필름 「240원」 대 「0% 또는 240원」)은 고치지 않는다. 어느 쪽이 적용되는지는 이 표에서 정하지 않는다.
- 두 화면을 합치되 출처를 표시한다. 관세율표 화면(기본·탄력·양허)과 주요세율보기 화면(FTA)은 주는 것이 다르고, 둘을 합쳐야 실행세율이 된다. 어느 화면에서 온 행인지
source(table·main·fill·annex)로 갈라 두어, 한 화면을 못 받아 다른 화면으로 채운 행(fill, 902행)과 두 화면 모두에 없어 법령 별표에서 채운 행(annex, 2,466행)까지 출처가 드러난다.
- 해석은 파생표로 따로 두고 근거를 문서로 남긴다. 실행세율은
tariff_rate를 고쳐 만든 것이 아니라 별도 표 fct_applied_rate이고, 적용한 조문(관세법 제50조, FTA 특례법 제5조, 양허관세 규정 제6조)은 원문 그대로 문서에 있다. 판단이 갈릴 수 있는 곳(조정관세의 순위, 세율이 하나로 정해지지 않는 코드)은 값을 지어내지 않고 표시(rate_undetermined)로 남긴다.
DB 실물(kcstariff.duckdb)은 저장소가 아니라 Releases 첨부로 배포된다. 받는 방법은 받기·사용 탭 참조. 국가×HS10×월 수출입 실적(2007~)은 별도 DB KCSDB2에 있으며, 연도와 HS10 코드로 이 DB와 바로 이어 붙일 수 있다.
DB 구축
어디서 어떻게 받았고, 표를 어떻게 짰고, 무엇을 검증했는지 밝힌다.
어디서 받았나 — 화면 둘을 합친다
관세법령정보포털은 연도를 고르면 그해 1월 1일 기준 세율표를 보여 주는 화면을 2002년부터 제공한다. 화면은 둘이고 주는 것이 다르다. 관세율표 화면은 기본세율에 조정·할당·특별긴급·덤핑방지 같은 탄력세율과 WTO·농림축산물 양허세율을 더해 보여 주지만 FTA 세율은 없다. 주요세율보기 화면은 기본·WTO·아시아태평양 세율에 FTA 일곱 상대의 협정세율을 더해 보여 주고, 연중에 세율이 바뀌면 적용 기간을 나누어 준다 — 대신 조정·할당·양허는 없다. 실행세율을 만들려면 둘을 합쳐야 한다.
두 화면 모두 류(HS 앞 2자리)를 주면 그 류의 코드 전부를 한 번에 돌려준다. 그래서 연도당 97류 × 화면 둘, 스무 해에 3,544번을 요청했고(약 1시간 반, 원본 HTML 994MB) 그것을 data/raw/에 캐시했다. 캐시가 있으면 다시 받지 않고 적재만 하는 데 약 6분 걸린다(--parse-only).
두 화면이 주는 것과 주지 않는 것
| 관세율표 화면 | 주요세율보기 화면 |
| 화면 번호 | openULS0201005Q | openULS0201017Q |
| 주는 세율 | 기본 A · WTO C · 개도국 D·G1·G2 · 아시아태평양 E1~E3 · 국제협력 F · 덤핑방지 I · 조정 L · 할당 P1·P3 · 특별긴급 T1·T2 · 농림축산물 양허 W1·W2 | 기본 A · WTO C · 아시아태평양 E1~E3 · FTA 일곱 상대 FCN1(중국) FEU1(EU) FUS1(미국) FAS1(아세안) FIN1(인도) FVN1(베트남) FCA1(캐나다) |
| 주지 않는 것 | FTA 세율 전부. 연중 변경 표시 | 조정·할당·양허·특별긴급·덤핑방지 |
| 기준 시점 | 1월 1일. 하반기 지정분은 안 보인다 | 연중 변경을 기간으로 나눈다(한-EU는 해마다 7월 1일 인하) |
| 읽는 법 | 탄력·양허 칸이 표에서 비어 있고 페이지 스크립트 f_KorAdTax가 행 번호로 채운다 — 표와 스크립트를 행 번호로 잇는다 | 표 그대로. 머리글이 두 줄이라 마지막 줄에서만 구분기호를 읽는다 |
| 이 DB의 행 | 529,192 (source='table') | 1,491,503 (source='main', FTA 열만) |
기본·WTO·아시아태평양 세율은 두 화면에 다 나온다. 이 DB는 관세율표 화면의 값을 쓰고, 주요세율보기의 값은 검증에 쓴다(아래). 관세율표 화면을 받지 못한 곳(2011년 제90류)만 주요세율보기의 기본·WTO·아시아태평양 값으로 채우고 source='fill'(902행)로 표시했다. 두 화면 모두에 없는 세율(2017~2019년 정보기술협정 품목의 WTO 협정세율)은 양허관세 규정 별표에서 읽어 source='annex'(2,466행)로 넣었다(데이터 함정 탭).
표 구조
표는 여섯이다. 받은 것 셋(tariff_code·tariff_rate·meta_fetch), 코드표 하나(dim_rate_cd), 이 저장소가 계산한 것 둘(fct_applied_rate·dim_origin_regime). 받은 것과 계산한 것을 이름으로 갈라 두었다.
tariff_code — 그해 관세율표의 코드 (연도 × HS10), 238,015행
| 컬럼 | 출처 | 비고 |
year | 요청 연도 | 2007~2026. 그해 1월 1일 세율표 |
hs10 | 화면 품목번호 | 10자리 문자열. 연도당 11,294~12,244개, 스무 해 합쳐 서로 다른 코드 15,442개 |
name_ko | 화면 품명 | 잎 품명만 온다(「기타」·「냉동한 것」). 상위 품명은 KCSDB2의 dim_hs10_name_hist에 있다 |
source | 화면 | table 또는 fill |
tariff_rate — 세율 행 (연도 × HS10 × 세율 구분 × 적용 기간), 2,024,063행
| 컬럼 | 출처 | 비고 |
year, hs10 | 위와 같음 | |
rate_cd | 화면 구분기호 | 24종. 이름은 dim_rate_cd |
rate_txt | 화면 문구 | 그대로 보존. 「270% 또는 6,210원」·「41,583원」·「0%」 |
adval | 문구에서 읽음 | 종가세율(%). 종량세만 있으면 NULL(1,093행) |
specific | 문구에서 읽음 | 종량세액(원). 대부분 kg당. 9,701행에 있다 |
valid_from, valid_to | 화면 적용 기간 | 관세율표 화면은 1월 1일~12월 31일. 주요세율보기는 연중 변경이 있으면 구간으로 나뉜다 |
source | 화면 | table · main · fill |
dim_rate_cd · meta_fetch · dim_origin_regime
| 테이블 | 키 | 담는 것 |
dim_rate_cd | rate_cd | 세율 구분 24종의 이름과 어느 화면에서 왔는지(source). 아래 표 |
meta_fetch | page·year·ryu | 화면·연도·류마다 받은 시각과 크기. 3,544행. 무엇을 언제 받았는지의 기록 |
dim_origin_regime | stat_cd·regime | 원산지(ISO2, 관세청 stat_cd와 같다) → 협정 구분과 적용 연도. 49행. 이 저장소가 만든 표(실행세율 탭) |
fct_applied_rate의 열은 많아서(70열) 실행세율 탭에서 무리 지어 설명한다.
세율 구분 24종
구분기호는 관세법령정보포털이 쓰는 것을 그대로 따랐다. 기호 하나가 관세법의 세율 하나에 대응한다. 행수는 스무 해 합계이고, 연도는 이 DB에서 그 기호가 처음 나오는 해다 — FTA는 발효 연도, 덤핑방지관세는 포털이 2016년부터 표시한다.
세율 구분과 근거 조문
| 기호 | 이름 | 근거 | 화면 | 행수 | 연도 |
| 기본·협정 (제50조 ①·②2호) |
A | 기본세율 | 관세법 별표 관세율표 | 관세율표 | 237,997 | 2007~ |
C | WTO 협정세율 | 제73조 국제협력관세 (WTO 양허) | 관세율표 | 206,834 | 2007~ |
W1 · W2 | 농림축산물 양허관세 (추천 · 미추천) | 제73조, 양허관세 규정 별표 1의 나. W2는 기본세율보다 높아도 우선(제50조③ 단서) | 관세율표 | 4,450 · 5,188 | 2007~ |
E1 · E2 · E3 | 아시아·태평양 협정세율 (일반 · 방글라데시 · 라오스) | 제73조 (APTA) | 관세율표 | 41,508 · 11,660 · 11,429 | 2007~ |
D · G1 · G2 | WTO 개도국 · UN 개도국 · 최빈국 협정세율 | 제73조 | 관세율표 | 314 · 454 · 140 | 2007~ |
F | 국제협력관세 | 제73조 | 관세율표 | 2,736 | 2007~ |
| 탄력세율 (제50조 ②1호·3호) |
I | 덤핑방지관세 | 제51조. 원산지·공급자 조건부 | 관세율표 | 996 | 2016~ |
T1 · T2 | 농림축산물 특별긴급관세 (물량기준 · 가격기준) | 제68조. 물량·가격 조건부 | 관세율표 | 241 · 628 | 2007~ |
L | 조정관세 | 제69조 | 관세율표 | 997 | 2007~ |
P1 · P3 | 할당관세 (물량이내 추천 · 수입전량) | 제71조 | 관세율표 | 2,153 · 2,369 | 2007~ |
| FTA 협정세율 (FTA 관세특례법 제5조) |
FAS1 | 한-아세안 FTA (선택1) | 아세안 10개국 | 주요세율보기 | 259,056 | 2008~ |
FIN1 | 한-인도 CEPA | | 주요세율보기 | 197,175 | 2010~ |
FEU1 | 한-EU FTA | EU 27개국 (영국은 2011~2020) | 주요세율보기 | 381,558 | 2011~ |
FUS1 | 한-미 FTA | | 주요세율보기 | 190,919 | 2012~ |
FCN1 · FVN1 · FCA1 | 한-중국 · 한-베트남 · 한-캐나다 FTA | | 주요세율보기 | 154,290 · 154,281 · 154,224 | 2015~ |
FTA 행이 많은 것은 코드마다 해마다 한 행씩 있고, 한-EU는 7월 1일 인하로 해마다 두 구간이기 때문이다. 세율이 아예 없는 코드도 있다 — 이사화물 2424000000이 해마다 하나씩(2007·2008년은 두세 개 더) 세율 칸이 비어 있어, 실행세율 표는 코드 표보다 25행 적다.
검증
수집이 옳은지를 네 갈래로 확인했다. 두 화면이 서로 독립된 출처라는 점을 이용한 대조가 핵심이고, 여기에 알려진 값과 무역통계 커버리지, 그리고 세 번째 출처(품목 상세 화면)를 더했다.
두 화면 코드 집합 차이 연도당 1개
기본세율 일치 99.80%
WTO 세율 일치 99.97%
숫자로 못 읽은 세율 0행
알려진 값 8/8
품목 상세 대조 22,164행 어긋남 0
수입액 커버리지 99.92~100%
① 두 화면끼리. 관세율표와 주요세율보기의 코드 집합이 해마다 한 개만 다르다(관세율표에만 있는 2424000000. 2007년은 7006000000·8485909090이 더 있다). 두 화면에 함께 나오는 기본세율은 99.80%, WTO 세율은 99.97%가 같고, 어긋남은 전부 표기 차이다 — 영화필름 「240원」 대 「0% 또는 240원」, 설탕 「199.8원」 대 「200원」.
② 알려진 값 8건. 건고추 270%, 생강 377.3%, 고추다진양념 조정관세 45%와 한-중 44.5%, 냉동고추 27%, 냉동채소 기타 27%, 한-EU 2023년 소스 기타 11.2%→8.4%(7월)의 가중평균 9.79%. 스크립트가 적재할 때마다 이 값을 다시 확인한다.
③ 세 번째 출처. 포털의 품목 상세 화면(openULS0201007Q)은 코드 하나씩 보여 주는 다른 화면이다. 연구용으로 받은 285개 코드 × 2012~2026년에서 FTA 일곱 상대의 1월 1일 협정세율 22,164행을 이 DB와 맞대었더니 전부 일치했다. 주요세율보기 파싱이 독립 출처로 확인된 셈이다.
④ 무역통계 커버리지. KCSDB2의 그해 수입액 가운데 그해 세율표에 코드가 있는 몫이 99.98~100%, 종가 실행세율이 붙는 몫이 99.92~100%다. 2011년 제90류가 빠졌을 때 이 수치가 97.38%로 떨어져 발견했다(데이터 함정 탭).
⑤ 선택 세율의 규칙. 「270% 또는 6,210원」에서 어느 쪽이 적용되는지는 화면에 없다. 국가법령정보센터의 양허관세 규정 별표 1(2024.12.31 개정본, ZIP 안의 xlsx)에서 「양자 중 고액(율)」임을 확인했다. 종량 대안이 붙은 코드는 92개다.
실행세율
코드×연도마다 "실제로 적용되는 한 값"을 어떤 규칙으로 정했는지 밝힌다. 규칙은 조문을 옮긴 것이고, 판단이 필요했던 곳은 따로 적었다.
왜 필요한가
한 코드에 그해 세율이 여럿이다. 건고추 0904210000의 2025년 세율은 아홉 행이다 — 기본세율 50%, 농림축산물 양허관세 추천 50%·미추천 「270% 또는 6,210원」, 한-미 「18% 또는 414원」, 한-중·한-EU·한-베트남·한-캐나다 「270% 또는 6,210원」(한-EU는 상·하반기 두 행). 이 가운데 무엇이 적용되는지는 자료가 아니라 법이 정한다. 관세법 제50조는 세율 종류마다 우선순위를 두고, 어떤 세율은 "더 낮을 때만" 우선한다고 정한다. FTA 관세특례법 제5조는 협정세율이 그 결과보다 낮을 때만 적용한다고 정한다.
이 DB는 그 조문을 그대로 옮겨 코드×연도마다 무협정 세율(mfn, 협정이 없는 나라에서 올 때의 세율)과 원산지별 적용세율(applied_*)을 계산했다. 결과는 별도 표 fct_applied_rate(237,990행)이고, 원자료 tariff_rate는 손대지 않았다.
규칙 여섯 단계
-
무협정 세율의 바탕 — 할당·조정·기본 (제50조 ②3호)
할당관세 수입전량 P3가 있으면 그것, 아니면 조정관세 L, 아니면 기본세율 A. 할당관세 추천분 P1은 추천서가 있어야 적용되므로 넣지 않고 has_P1로 표시만 한다.
-
WTO·국제협력은 더 낮을 때만 (제50조 ③ 본문)
WTO 협정세율 C와 국제협력관세 F는 1단계의 값보다 낮을 때만 우선한다. 다만 농림축산물 양허관세 미추천 W2(양허관세 규정 별표 1의 나)는 기본세율보다 높아도 우선한다(③ 단서) — 건고추 270%가 기본세율 50%를 이기는 이유다. 단서는 기본·잠정세율에 대해서만 우선이라, 할당관세 P3가 있으면 그것을 따른다(겹침 12행, 카사바·옥수수 할당 0%). 추천분 W1은 표시만 한다(has_W1).
-
조건부 세율은 넣지 않는다 (제50조 ②1호)
덤핑방지관세 I와 특별긴급관세 T1·T2는 순위가 가장 높지만 원산지·공급자·물량·가격 조건이 붙는 추가 관세라 어느 수입에 적용되는지를 자료로 알 수 없다. has_I·has_T1·has_T2로 표시만 한다. 2025년에는 173·16·0개 코드다.
-
협정세율은 무협정 세율보다 낮을 때만 (FTA 특례법 제5조 ①)
FTA 일곱 상대와 아시아·태평양 협정(E1~E3)은 2단계까지의 무협정 세율보다 낮을 때만 적용한다. 한 나라에 협정이 둘이면 낮은 쪽이다 — 중국·인도는 FTA와 아시아·태평양 협정 중, 베트남은 한-베트남 FTA와 한-아세안 FTA 중, 라오스는 아세안과 아시아·태평양(라오스) 중. 원산지에서 협정으로 가는 대응은 dim_origin_regime에 있다.
-
연중 변경은 유효 일수로 가중평균
주요세율보기가 기간을 나누어 준 세율은 그해 유효 일수로 가중평균해 mfn·applied_*에 넣고, 1월 1일 값은 mfn_jan과 j_*에 따로 둔다. 한-EU 2023년 소스 기타의 11.2%(1~6월)→8.4%(7~12월)는 9.79%가 된다. 연도 단위 분석은 가중평균을, 월 단위 분석은 tariff_rate의 구간을 쓴다.
-
선택 세율은 종량 하한으로, 정해지지 않으면 미확정으로
「N% 또는 M원」(양자 중 고액)은 종가 N%를 세율로 쓰고, M÷N을 종량 하한 floor_won_kg(원/kg)으로 둔다 — 단가가 이 값 아래이면 종량세가 종가세를 넘는다. 건고추 6,210÷2.7 = 2,300원, 생강 931÷3.773 = 247원. 「N% 또는 0원」(113행)은 종량 대안이 아니므로 하한이 없다. 세율이 하나로 정해지지 않는 코드는 값을 지어내지 않고 rate_undetermined로 표시한다(아래 표, 530행).
예시 셋으로 따라가기
규칙을 실제 코드에 적용하면 이렇게 된다. 세율 열은 tariff_rate의 값이고, 결과 열은 fct_applied_rate의 값이다.
세율 행에서 실행세율까지
| 코드 · 연도 | tariff_rate에 있는 세율 | 무협정 세율 mfn | 원산지별 applied_* |
0904210000 건고추 · 2025 |
A 50% · W1 50% · W2 「270% 또는 6,210원」 · FUS1 「18% 또는 414원」 · FCN1·FEU1·FVN1·FCA1 「270% 또는 6,210원」 |
270 (mfn_regime='W2', ③ 단서로 기본세율에 우선). floor_won_kg 2,300 |
미국 18(협정이 더 낮다). 중국·EU·베트남·캐나다 270(협정이 같아 인하 없음). has_W1 참 |
2103909050 고추다진양념 · 2025 |
A 8% · C 54% · L 45% · FCN1 44.5% · FEU1 5.6%→2.8%(7/1) · FUS1 3% · FAS1 36% · FVN1 36% · FCA1 45% |
45 ('L'. WTO 54%는 조정관세보다 높아 우선하지 못한다) |
중국 44.5 · EU 4.19(5.6과 2.8의 일수 가중) · 미국 3 · 아세안·베트남 36 · 캐나다 45(협정이 같다) |
2103909090 소스 기타 · 2023 |
A 8% · C 54% · L 45% · FEU1 11.2%(1~6월)→8.4%(7~12월) |
45 ('L'), mfn_jan 45 |
EU 9.79 = 11.2×181/365 + 8.4×184/365. 1월 1일 값 j_FEU1 11.2 |
fct_applied_rate의 열 읽는 법
열이 70개라 무리로 읽는 것이 좋다. 앞쪽은 세율 구분별 입력값이고 뒤쪽이 결과다.
fct_applied_rate — 연도 × HS10, 237,990행
| 열 | 무리 | 뜻 |
year, hs10 | 키 | tariff_code와 같다. 세율이 없는 코드(이사화물 2424000000 등) 25행은 빠진다 |
r_A … r_FCA1 | 입력(가중) | 구분별 종가세율의 유효 일수 가중평균. A·C·F·L·P3·W2·W1·E1·E2·E3·FTA 7 |
j_A … j_FCA1 | 입력(1월 1일) | 같은 구분의 1월 1일 값 |
spec_A, spec_C, spec_W2 / txt_* | 입력(종량·문구) | 기본·WTO·양허의 종량세액(원)과 화면 문구. 종량 하한 계산과 사람 확인용 |
has_I, has_T1, has_T2, has_P1, has_W1, has_D, has_G1, has_G2 | 조건부 표시 | 그해 그 코드에 조건부·추천·개도국 세율이 있는지. 실행세율에는 넣지 않는다 |
mfn, mfn_regime, mfn_jan | 결과 | 무협정 세율(%)과 그것이 어느 규정에서 왔는지(A·C·W2·P3·F·L), 1월 1일 값. 스무 해 합계로 A 162,181 · C 65,755 · W2 5,176 · P3 2,367 · F 1,515 · L 996행 |
applied_cn, applied_eu, applied_us, applied_asean, applied_in, applied_vn, applied_ca | 결과 | 일곱 상대 원산지의 적용세율(%). 협정세율이 mfn보다 낮으면 협정세율, 아니면 mfn. 협정 발효 전 연도는 mfn |
applied_apta, applied_apta_bd, applied_apta_la, applied_la | 결과 | 아시아·태평양 협정(일반·방글라데시·라오스)과 라오스(아세안과 APTA 중 낮은 쪽) |
specific_won_kg, floor_won_kg | 결과 | mfn 규정이 선택 세율일 때의 종량세액과 종량 하한(원/kg). 1,092행. 2025년에는 59개 코드, 88원(고구마 신선)~33,298원(견사) |
rate_undetermined, undetermined_reason | 결과 | 세율이 하나로 정해지지 않는 코드의 표시와 사유. 530행 |
원산지에서 협정으로 — dim_origin_regime
무역통계의 원산지 코드(관세청 stat_cd, ISO2와 같다)를 이 DB의 협정 구분으로 잇는 표다. 49행이고 이 저장소가 만들었다. 한 나라에 협정이 둘이면 두 행이 있다(중국·인도·베트남·라오스). 협정 발효 전 연도에 그 나라에서 온 수입은 무협정 세율을 만난다.
협정 구분과 원산지, 적용 연도
| 구분 | 원산지 (ISO2) | 적용 연도 |
FEU1 한-EU | EU 27개국. 크로아티아 HR은 2013년부터, 영국 GB는 2011~2020년 | 2011~ |
FAS1 한-아세안 | BN KH ID LA MY MM PH SG TH VN | 2008~ |
FIN1 한-인도 | IN | 2010~ |
FUS1 한-미 | US | 2012~ |
FCN1 · FVN1 · FCA1 | CN · VN · CA | 2015~ |
E1 아시아·태평양 (일반) | CN IN LK MN | 2007~ |
E2 · E3 아시아·태평양 | BD · LA | 2007~ |
영국은 2021년부터 한-영 FTA(구분기호 FGB1)인데 이 DB의 일곱 상대에 없으므로 2021년 이후 영국산은 무협정 세율로 나온다. 그 밖의 협정 상대도 마찬가지다(데이터 함정 탭).
판단이 필요했던 곳
조정관세의 순위. 관세법 제69조의 조정관세는 2호(1순위, 협정세율보다도 우선)와 1·3·4호(3순위)로 나뉘는데 자료에는 구분기호 L 하나뿐이라 어느 호인지 알 수 없다. 3순위로 두었다. 고추다진양념(조정 45% 대 WTO 54%)처럼 결과가 같은 경우가 대부분이다.
양허 미추천과 할당의 겹침. W2와 P3가 함께 있는 12행은 할당관세를 따랐다. 제50조③ 단서가 기본·잠정세율에 대해서만 우선을 말하기 때문이다.
「N% 또는 0원」. 113행은 종량 대안이 아니라 하한 없음으로 읽었다.
세율 미확정 530행 (rate_undetermined = true)
undetermined_reason | 무엇 | 행 | 이유 |
specific_only | 영화필름 3706 등 종량세만 있는 코드 | 462 | 종가세율이 없어 % 단위로 나타낼 수 없다. specific_won_kg는 있다 |
rice_pre_tariffication | 쌀 1006, 2007~2014년 | 48 | 관세화(2015) 전이라 수입이 시장접근물량으로 제한되었고 물량 밖 세율이 없다. 기본 5%로 보이지만 세율이 아니다 |
two_annexes | 인삼 기타 1211209900 | 20 | 양허관세 규정 별표 1의 가(45%)와 나(20% / 754.3%)에 함께 올라 잔여 코드 안에서 물품 정의로 세율이 갈린다 |
연도별로 보면 2007~2014년 38행, 2015~2019년 32행(쌀 관세화), 2020~2021년 31행, 2022년부터 1행(영화필름 코드 폐지)이다. 분석에서는 이 행을 빼거나 specific_won_kg를 따로 다룬다.
근거 조문
적용한 조문은 관세법 제49조(세율의 종류)·제50조(세율 적용의 우선순위), 자유무역협정의 이행을 위한 관세법의 특례에 관한 법률 제5조(세율 적용의 우선순위), 세계무역기구협정 등에 의한 양허관세 규정 제6조(양허세율 우선적용물품)이다. 2026-09-12에 국가법령정보센터에서 확인한 원문과 구분기호의 대응표가 저장소의 docs/실행세율_법령근거.md에 있다. 법령이 바뀌면 그 문서와 scripts/02_build_applied_rate.py를 함께 고친다.
데이터 함정
DB를 만들며 실측으로 확인한, 모르고 쓰면 결과를 틀리게 만드는 지점들을 모았다.
"함정"은 DB의 버그가 아니다. 포털 화면의 구조, 세율 제도 자체의 성격, 그리고 자료가 답하지 못하는 범위에서 온다. 이 DB는 받은 것을 그대로 보존하는 것이 원칙이므로 이런 값을 임의로 고치지 않는다 — 대신 여기에 미리 목록으로 드러내, 분석하는 연구자가 각자 상황에 맞게 처리하도록 한다. 카드마다 무엇이 문제이고, 왜 그런지, 어떻게 대응했는지를 담았다. 수집 쪽 함정은 다시 만드는 사람에게, 제도 쪽 함정은 쓰는 사람에게 해당한다.
수집 — 화면을 받고 읽을 때
서버 응답 · source='fill'
표를 절반쯤 보내다 오류 안내문으로 끝내면서 200을 준다
2011년 관세율표 제90류는 9006519000 행에서 매번 「프로그램 오류발생」으로 끊긴다(호 단위로 받아도 같다). 상태 코드가 200이라 처음엔 그대로 캐시돼 코드 394개가 조용히 빠졌고, 그해 수입액 커버리지 97.38%로 드러났다. 지금은 스크립트가 문구로 가려내 캐시하지 않고, 그 류 446개 코드는 주요세율보기의 기본·WTO·아시아태평양 세율로 채운다(fill, 902행). 2010·2012년 제90류에 조정·할당·양허 세율이 없어 사실상 온전하다.
두 화면 모두 결측 · source='annex'
2017~2019년 정보기술협정 품목의 WTO 협정세율이 두 화면 모두에 없다
관세율표 화면도 주요세율보기 화면도 2017·2018·2019년에는 정보기술협정(ITA) 확대 품목의 WTO 협정세율 C를 싣지 않았다(2016년과 2020년에는 있다). 그해 세율표에 있고 앞뒤 해에는 C가 있던 코드가 해마다 822개(제85·90·84·37류가 대부분, 전체 수입액의 15~17%)다. 두 화면이 똑같이 비어 있어 두 화면 대조로는 드러나지 않았고, 연도 사이의 연속성 검사(앞뒤 해에는 있는데 그해에 없는 코드 수)로 찾았다. 빠진 채 두면 무협정 세율이 기본세율로 잡혀 일본·대만산 반도체의 실행세율이 약 8%p 과대가 된다. 양허관세 규정 별표 1의 다(2019.10.1 시행 판)에 코드마다 2017~2023년 연차별 세율 열이 있어 그 세 해의 값을 읽어 넣었다(source='annex', 2,466행, 채움표 data/fill/wto_c_ita_2017_2019.csv). 별표의 2020~2023년 열은 포털과 겹치는 코드 전부에서 일치한다. 2013년에도 제41~47류 259개 코드의 C가 빠졌으나 그 코드들은 C가 기본세율 이상이라 실행세율에 영향이 없어 채우지 않았다.
관세율표 화면 · f_KorAdTax
탄력·양허 칸은 표에서 비어 있다
관세율표 화면의 WTO·조정·할당·양허 칸은 HTML 표에 값이 없고, 페이지 끝의 스크립트 f_KorAdTax가 행 번호(korAdTax_N)로 나중에 채운다. 표의 칸만 읽으면 기본세율밖에 안 보여서 처음에 "캐시에는 기본세율뿐"이라고 잘못 판단했다. 스크립트 블록을 행 번호로 표에 잇는다.
주요세율보기 화면 · 머리글
머리글 첫 줄에도 'E1'이 있어 열이 하나 밀린다
주요세율보기의 표 머리글은 두 줄이고 첫 줄에도 구분기호 하나(E1)가 섞여 있다. 머리글 전체에서 구분기호를 모으면 열이 하나 밀려 값이 옆 구분에 붙는다. 마지막 줄에서만 읽는다.
코드 집합 · 표기
두 화면의 코드가 한 개 다르고, 같은 세율을 다르게 적는다
관세율표에만 있는 2424000000이 해마다 있고, 2007년은 7006000000·8485909090이 더 있다. 같은 세율의 표기도 다르다 — 영화필름 「240원」 대 「0% 또는 240원」, 설탕 「199.8원」 대 「200원」. 이 DB는 관세율표의 표기를 쓰고 고치지 않는다.
DuckDB · 파일 크기
표를 갈아 끼워도 파일이 줄지 않는다
DuckDB는 CREATE OR REPLACE로 표를 바꿔도 옛 자리를 되쓰지 않아 다시 적재할 때마다 파일이 커진다(한 번에 26MB → 53MB). 적재는 새 파일에 쓰고 바꿔 끼우며, 받은 기록(meta_fetch)만 옛 파일에서 옮겨 온다.
공공데이터포털 · 15051179
엑셀 자료는 과거를 주지 않는다
관세청이 공공데이터포털에 올리는 「품목번호별 관세율표」는 현행판과 직전판 하나뿐이다. 과거 연도는 포털 화면으로만 받을 수 있고, 그것이 이 DB를 만든 이유다. 엑셀은 현행 연도의 대조용으로만 쓴다.
제도 — 세율을 해석할 때
기준 시점 · 연중 변경
관세율표 화면은 1월 1일 기준이다
조정·할당관세는 연중에도 지정·해제되는데 관세율표 화면은 그해 1월 1일 상태만 보여 준다. 하반기 할당관세 지정은 이 DB에 없다. 품목 상세 화면으로 확인한 285개 코드에서는 아세안(727행)·WTO(328)·기본세율(270)에도 연중 구간이 둘 이상인 경우가 있었다. 연중 변경이 보이는 것은 주요세율보기의 FTA 열뿐이다(한-EU 7월 1일 인하 등). 화면의 기준일 변수에 연중 날짜를 주어도 응답은 1월 1일과 같다(2026-09-13 확인).
넓히려면. 할당관세·조정관세는 대통령령(할당관세 규정·조정관세 규정)의 별표로 정해지고 한 해에 여러 번 개정되므로, 국가법령정보센터에서 그 규정의 판본을 시행일 순으로 모아 별표(품목번호·세율·물량·적용 기간)를 합치면 연중 시간표가 나온다. 그러면 tariff_rate의 조정·할당 행에도 FTA 열처럼 valid_from·valid_to가 붙고, 실행세율의 유효 일수 가중평균이 그 구간을 그대로 받는다. 아직 하지 않았다.
선택 세율 · 종량 하한
「270% 또는 6,210원」은 높은 쪽이다
종가·종량 선택 세율은 양허관세 규정 별표 1에 「양자 중 고액(율)」로 명기되어 있다. 단가가 종량÷종가(건고추 kg당 2,300원) 아래이면 종량세가 적용되어 실효 세율이 270%를 넘는다. fct_applied_rate는 종가만 세율로 쓰고 하한을 floor_won_kg에 따로 둔다. 단가 분석에서는 이 하한을 함께 봐야 한다.
조건부 세율 · has_*
덤핑방지·특별긴급·추천 할당·추천 양허는 실행세율에 없다
순위는 높지만 특정 원산지·공급자·물량·가격에만 붙는 세율이라 어느 수입에 적용됐는지를 알 수 없다. has_I·has_T1·has_T2·has_P1·has_W1로 표시만 한다. 덤핑방지관세가 있는 코드의 특정 원산지 수입은 applied_*보다 높은 세율을 냈을 수 있다.
협정 범위 · 일곱 상대
그 밖의 FTA는 들어 있지 않다
칠레·EFTA·싱가포르·페루·튀르키예·호주·뉴질랜드·콜롬비아·영국·중미·이스라엘·캄보디아·필리핀·인도네시아·UAE·RCEP은 포털의 품목 상세 화면에만 있어 코드×연도마다 한 번씩 받아야 한다(전부 받으면 24만 회). 2025년 수입액 기준으로 일곱 상대가 59.7%, 그 밖의 협정 상대가 16.7%(일본 7.7%), 협정이 없는 나라가 23.6%다. 그 밖의 상대에서 온 수입에 mfn을 쓰면 세율을 높게 잡는다.
협정세율 · 활용
FTA 세율은 적용 가능 세율이지 납부 세율이 아니다
협정세율은 원산지 증명을 갖춰 특혜를 신청했을 때 적용된다. 신청하지 않으면 무협정 세율을 낸다. 특혜 활용 여부는 이 DB에도 무역통계에도 없다. applied_*는 "그 원산지에서 낼 수 있는 가장 낮은 세율"로 읽는다.
미확정 · 530행
세율이 하나로 정해지지 않는 코드가 있다
종량세만 있는 코드(영화필름), 두 별표에 함께 오른 코드(인삼 기타 1211209900), 관세화 전의 쌀(2007~2014)은 mfn이 있어도 세율로 읽으면 안 된다. rate_undetermined로 걸러 낸다. 스무 해 530행이고 2022년부터는 1행이다.
조정관세 · 순위
조정관세가 1순위인지 3순위인지 자료로 모른다
제69조 2호(협정세율보다 우선)와 1·3·4호(WTO 세율이 더 낮으면 진다)는 구분기호가 같은 L이다. 3순위로 두었고, 조정관세가 WTO 세율보다 낮은 대부분의 경우 결과는 같다. 조정관세가 WTO 세율보다 높은 코드에서는 mfn이 실제보다 낮을 수 있다.
법적 효력 · 고지
10단위 세율은 참고용이다
포털은 10단위 세율이 참고용이며 법적 효력이 없다고 밝힌다. 법적 세율은 관세법 별표(기본세율)와 각 규정의 별표에 있다. 이 DB로 세액을 계산하거나 신고하지 말 것. 연구에서 표본을 뽑아 별표와 대조하는 절차를 권한다 — 저장소의 02 스크립트가 대조 표본 CSV를 만들어 준다.
받기·사용
DB를 받아 로컬에서 분석하려는 연구자에게 필요한 것을 안내한다.
먼저 알아둘 것 — 받을 것이 둘로 나뉜다. 하나는 스크립트·문서가 담긴 GitHub 저장소이고, 다른 하나는 DB 파일 자체(kcstariff.duckdb, 약 38MB)다. DB 파일은 저장소에 넣지 않고 Releases에 첨부한다. 세율만 볼 것이면 DB 파일 하나로 충분하고, 무역통계와 함께 보려면 KCSDB2의 DB 파일도 받는다.
내려받기 v1.0-2026 · 2026-09-13 게시(DB 파일 같은 날 갱신: 2017~2019 WTO 세율 채움) · 세율표 2007~2026
-
패키지 설치
분석만 하므로 이것이면 된다 — conda나 특정 파이썬 버전은 필요 없다.
pip install duckdb pandas
-
DB 파일 받기
Releases 페이지에서 kcstariff.duckdb를 받는다(v1.0-2026 직접 내려받기, 38MB). 압축하지 않고 올리므로 그대로 쓴다. 저장소를 함께 받았으면 data/processed/에 놓는다 — 스크립트가 그 자리를 읽는다.
git clone https://github.com/pilsunchoi/KCSTARIFF.git # 스크립트·문서가 필요할 때만
-
열어 보기
DuckDB는 파일 하나에 접속하는 방식이라 서버가 필요 없다. read_only=True로 열면 실수로 원본을 바꿀 염려가 없다.
import duckdb
con = duckdb.connect("kcstariff.duckdb", read_only=True)
con.sql("SELECT year, count(*) FROM tariff_code GROUP BY 1 ORDER BY 1").show()
자주 쓰는 질의
한 코드의 세율 전부. 화면 문구 그대로와 적용 기간이 나온다.
con.sql("""
SELECT rate_cd, rate_txt, adval, specific, valid_from, valid_to, source
FROM tariff_rate WHERE hs10 = '0904210000' AND year = 2025
ORDER BY rate_cd, valid_from""").show()
실행세율의 시계열. 무협정 세율과 원산지별 적용세율을 해마다 본다.
con.sql("""
SELECT year, mfn, mfn_regime, applied_cn, applied_us, applied_eu, floor_won_kg
FROM fct_applied_rate WHERE hs10 = '0904210000' AND NOT rate_undetermined
ORDER BY year""").show()
무역통계와 조인. KCSDB2의 파일을 함께 붙이면 수입 한 건마다 그해 세율이 붙는다. 원산지별 세율까지 붙이려면 dim_origin_regime으로 협정을 찾은 뒤 applied_* 열을 고른다.
con = duckdb.connect()
con.execute("ATTACH 'kcsdb.duckdb' AS s (READ_ONLY)")
con.execute("ATTACH 'kcstariff.duckdb' AS tr (READ_ONLY)")
con.sql("""
SELECT f.yyyymm, f.stat_cd, f.hs10, f.imp_dlr, f.imp_wgt, r.mfn, r.applied_cn, r.floor_won_kg
FROM s.fact_trade f
JOIN tr.fct_applied_rate r ON r.year = f.yyyymm // 100 AND r.hs10 = f.hs10
WHERE f.hs10 = '0904210000' AND f.stat_cd = 'CN' AND f.yyyymm >= 202401""").show()
단위. 세율은 %(adval, mfn, applied_*), 종량세는 원(specific, 대부분 kg당), 종량 하한은 원/kg. 무역통계와 맞대려면 과세환율이 필요한데 이 DB에는 없다.
기준 시점. 한 해에 한 세율표(1월 1일 기준)이고 mfn·applied_*는 연중 변경의 유효 일수 가중평균이다. 월 단위로 보려면 tariff_rate의 valid_from·valid_to를 쓴다. 1월 1일 값은 mfn_jan·j_*.
걸러 낼 것. rate_undetermined가 참인 530행은 세율로 읽지 않는다. 덤핑방지·특별긴급이 있는 코드(has_I·has_T1·has_T2)는 특정 원산지 수입이 더 높은 세율을 냈을 수 있다.
협정 발효 전. 한-EU는 2011년, 한-미는 2012년, 한-중·한-베트남·한-캐나다는 2015년부터다. 그 전 연도의 applied_eu 등은 mfn과 같다. 일곱 상대 밖의 협정 상대는 이 DB가 다루지 않는다.
코드 개정. HS 개정(2012·2017·2022)과 국내 개정(2025·2026)으로 코드가 바뀐다. 개정을 건너는 시계열은 KCSDB2의 연계표(dim_hs10_to_2022 등)로 잇는다.
무엇이 들어 있나 — 표 전체 목록
이 DB에 있는 표 여섯이 전부다. 받은 것(tariff_·meta_)과 이 저장소가 계산한 것(fct_·dim_origin_)을 이름으로 갈라 두었다.
이 DB에 들어 있는 것 전부
| 테이블 | 담는 것 | 행수 | 기간 | 출처 |
| 받은 것 — 포털 화면 그대로 |
tariff_code | 연도 × HS10 코드와 잎 품명. 그해 관세율표에 있는 코드 전부 | 238,015 | 2007–2026 | 관세법령정보포털 관세율표 화면 (openULS0201005Q) |
tariff_rate | 연도 × HS10 × 세율 구분 × 적용 기간. 화면 문구·종가·종량·기간·출처 화면. 이 DB의 본체 | 2,024,063 | 2007–2026 | 관세율표 화면 + 주요세율보기 화면 (openULS0201017Q) + 양허관세 규정 별표 1의 다 (annex 2,466행) |
dim_rate_cd | 세율 구분 24종의 기호·이름·출처 화면 | 24 | — | 포털 화면 머리글 |
meta_fetch | 화면·연도·류마다 받은 시각과 크기 | 3,544 | — | 이 저장소의 수집 로그 |
| 계산한 것 — 이 저장소가 조문을 옮겨 만든 파생표 |
fct_applied_rate | 연도 × HS10 실행세율. 무협정 세율과 규정, 1월 1일 값, 원산지별 적용세율 11개, 종량 하한, 조건부 표시 8개, 미확정 표시 | 237,990 | 2007–2026 | tariff_rate + 관세법 제50조·FTA 특례법 제5조·양허관세 규정 제6조 |
dim_origin_regime | 원산지(ISO2) → 협정 구분과 적용 연도. 무역통계의 원산지에 협정세율을 붙일 때 쓴다 | 49 | 2007– | 이 저장소가 협정 발효일로 만듦 |
어디서 받았나
원천은 관세법령정보포털의 화면 둘이다. 여기에 규칙 확인용으로 국가법령정보센터의 조문과 별표를, 검증용으로 포털의 세 번째 화면과 무역통계 DB를 썼다. 세율 자료는 모두 무료이고 인증키가 필요 없다.
원천 자료와 받는 방법
| 원천 | 번호·주소 | 이 DB에서 | 비고 |
| 관세법령정보포털 관세율표 화면 | openULS0201005Q | tariff_code · tariff_rate (table) | 류 2자리(hsfdCd)와 연도(aplyYy)로 요청. 연도당 97회. 탄력·양허는 스크립트에서 읽는다 |
| 관세법령정보포털 주요세율보기 화면 | openULS0201017Q | tariff_rate (main · fill) | 같은 방식. FTA 일곱 상대와 연중 구간 |
| 관세법령정보포털 품목 상세 화면 | openULS0201007Q | 검증에만 | 코드 하나·연도 하나씩. 그 밖의 FTA 세율은 여기에만 있다. 2012년부터만 세율을 준다 |
| 국가법령정보센터 관세법·FTA 특례법·양허관세 규정 | law.go.kr | fct_applied_rate 규칙 | 조문 원문은 실행세율_법령근거.md. 양허관세 규정 별표 1은 ZIP 안 xlsx(선택 세율의 「양자 중 고액」 확인) |
| 공공데이터포털 품목번호별 관세율표 | 15051179 | 대조에만 | 관세청 XLSX. 현행판과 직전판만 있다. 같은 자료의 이용 조건(공공누리 제1유형)이 여기에 적혀 있다 |
| 무역통계 DB KCSDB2 | pilsunchoi.github.io/KCSDB2 | 커버리지 검증 | 있으면 수입액 가운데 세율이 붙는 몫을 계산한다. 없으면 건너뛴다 |
다시 만들기
DB를 받아 쓰는 사람은 여기가 필요 없다. 새 연도의 세율표가 나오면(해마다 1월) 스크립트 둘을 차례로 돌린다. 캐시가 없으면 첫 번째가 포털에서 스무 해를 다시 받는다(약 1시간 반).
python scripts/01_fetch_tariff.py # 두 화면을 류 단위로 받아 tariff_code·tariff_rate를 만든다. 캐시가 있으면 --parse-only (약 6분)
python scripts/02_build_applied_rate.py --load # 실행세율 파생표를 만들어 DB에 넣는다. 법령 대조 표본 CSV도 만든다
원본 캐시(약 1.2GB)는 data/raw/에 두고 올리지 않는다. 캐시를 다른 곳에 두었으면 환경변수 KCSTARIFF_RAW로, 무역통계 DB는 KCSDB2_PATH로 가리킨다. DuckDB는 표를 갈아도 파일이 줄지 않으므로 적재는 새 파일에 쓰고 바꿔 끼운다.
출처와 이용 조건
세율은 관세법령정보포털(unipass.customs.go.kr/clip)의 관세율표·주요세율보기 화면에서 받았다. 같은 자료를 관세청이 공공데이터포털에 「품목번호별 관세율표」(15051179)로 공개하며 이용허락범위는 공공누리 제1유형(출처표시)이다. 포털 화면 자체에는 공공누리 표시가 없다(2026-09-12 확인). 이 저장소의 파생표(fct_applied_rate·dim_origin_regime)는 그 자료를 가공한 것이며, 이용할 때 관세청과 이 저장소를 출처로 밝힐 것. 관세청이 이 DB를 후원하거나 특수 관계에 있지 않다.
연구
이 DB 위에서 수행하는 분석과 자료 문서를 모은다. 각 항목은 렌더된 문서(Markdown·표·그림)와 그 결과를 재현하는 노트북으로 연결된다.
여기 실릴 것은 이 DB로 무엇을 할 수 있는지 보이는 사례다. 방법의 예시이지 이 DB가 특정 분석을 전제한다는 뜻은 아니다. 첫 항목은 이 DB를 만든 과정과 다시 만드는 절차를 적은 자료 논문이고, 둘째 항목은 이 DB의 종량 하한으로 가격 과소신고를 검정한 첫 분석 논문이며, 셋째 항목은 FTA 협정세율 인하의 귀착을 묻는 연구의 계획서다(아직 계획 단계). 둘째·셋째의 소개글은 각 문서의 요약을 그대로 옮긴 것이다.
I
자료 논문 · 기록 문서
한국 HSK 10단위 연도별 실행세율 자료의 구축
관세법령정보포털 화면에서 원산지별 실행세율까지(2007~2026) — 본문 여덟 장과 재현 절차 부록
이 DB가 무엇이고 어떻게 만들었으며 어떻게 검증했는지를 학술논문의 형식을 빌려 적은 기록 문서다. 서론에서 기본세율·탄력세율·양허세율·협정세율·선택 세율·종량 하한·실행세율 같은 용어를 관세법 조문 번호와 영어 병기로 정의하고, 포털 세 화면의 수집과 함정(II장), 표 여섯의 구성(III장), 관세법 제50조의 우선순위를 코드×연도에 적용한 실행세율 규칙(IV장), 함께 만든 보조 자료 아홉 가지(V장), 검증 다섯 겹(VI장), 한계와 이용 조건(VII장)을 적었다. 부록 A는 자료 열넷마다 주소·요청 변수·파일 형식·읽는 법·확인된 함정과 다시 하는 순서를 적은 재현 절차이고, 쓰인 파이썬 프로그램 전부는 노트북 하나에 모았다.
- 관세율표 화면의 탄력·양허 칸은 표에 비어 있고 스크립트
f_KorAdTax가 행 번호로 채운다 — 표와 스크립트를 행 번호로 잇는다. 2011년 제90류는 서버가 표를 절반만 주고 상태 코드 200을 돌려줘 코드 394개가 조용히 빠졌고, 수입액 커버리지 검사로만 드러났다.
- 「270% 또는 kg당 6,210원」 같은 선택 세율은 양허관세 규정 별표 1이 「양자 중 고액」으로 정하므로 종량세를 종가세율로 나눈 값이 신고 가격의 하한이 된다 — 코드 92개, kg당 88원에서 3만 4천 원.
- 검증 다섯 겹: 두 화면 대조(기본세율 99.80%·WTO 99.97% 일치), 알려진 값 여덟, 품목 상세 화면과 22,164행 대조, 무역통계 커버리지 99.92~100%, 그리고 2025년 표본 214개를 관세법 별표 관세율표(HWP)·양허관세 규정 별표·조정관세 규정 별표에서 직접 읽어 전부 일치.
II
분석 논문 · 종량 하한과 가격 과소신고
종량 하한과 가격 과소신고: 한국 농산물 선택 세율의 증거
과소신고의 유인은 세율의 수준이 아니라 형태에서 온다 — 하한 검정, 건조생강 사건연구, 집행 지정의 이질성, 미러 갭 회귀
무엇을 보이나. 본 연구는 한국의 수입 통관 자료로 가격 과소신고(under-invoicing)의 유인이 세율의 수준이 아니라 세율의 형태에서 온다는 것을 보인다. 한국의 농림축산물 양허관세는 "270% 또는 kg당 6,210원 양자 중 고액"처럼 종가세와 종량세 가운데 높은 쪽을 적용하는 선택 세율이 많다. 이 형태에서는 신고 가격이 종량세를 종가세율로 나눈 값 아래로 내려가면 세액이 더 줄지 않으므로 그 값이 신고 가격의 하한 구실을 하고, 이 종량 하한이 실제 단가에 비해 낮은 물품일수록 과소신고로 줄일 수 있는 세액이 크다.
무엇으로. 자료는 연도별 HSK 10단위 세율(2007~2026)과 관세법 제50조의 우선순위로 만든 원산지별 실행세율, 양허관세 규정 별표 1의 종량 하한, 관세청의 사전세액심사 대상과 세 부처의 유통이력 신고물품 지정 목록, 원산지·월·HS10 단위의 수입 금액과 중량, 그리고 상대국 28개국이 보고한 대한국 HS6 수출이다.
무엇을 찾았나. 결과는 셋이다. 첫째, 종량 하한이 있는 코드(HSK 10단위 품목번호) 31개에서 하한 아래로 신고된 수입액은 0.1%이고 건고추·참깨·대두는 0이며, 건고추의 단가는 냉동고추 단가의 5배와 맞아 원가와 어긋나지 않는다. 둘째, 종량 하한이 사실상 없는 건조생강에서는 중국산 단가가 2012년 kg당 1.94달러에서 2020~2021년 0.46달러로 내려가 신선생강 단가의 10배 대비 3~4%가 되었고, 중국이 kg당 5달러로 보고한 물품을 한국은 0.45달러로 신고했다. 이 과소신고는 사전세액심사 대상 지정(2022년 3월)이 아니라 그보다 넉 달 앞선 언론 보도와 국정감사 직후(2021년 11월)에 끝났으며, 선행 사건일 기준의 사후 단가 상승은 로그 2.24(t 27)이고 공식 지정일 기준으로는 단절이 이미 지나가 있다. 셋째, 집행 지정의 효과는 지정 전에 과소신고가 있었는지에 달려 있다. 2016년 이후 지정된 사전세액심사 코드 가운데 중국산 단가를 지정 전후로 관측할 수 있는 31개 전체에서 평균 효과는 0이지만, 지정 전 원가 대비 단가 갭으로 나누면 과소신고가 있던 셋에서만 사후 단가가 로그 1.21 오르고 없던 22개에서는 오르지 않는다.
무엇을 뜻하나. 미러 갭 회귀에서 세율 수준의 계수가 0인 것도 세율이 높은 코드의 대부분에 종량 하한이 있기 때문으로 읽힌다. 코드 단위에서 수입자의 행태를 따라가는 이런 미시적 분석은 종량세를 얼마로 정할지(세율 설계)와 심사 자원을 어느 코드에 둘지(집행의 배분)에 근거를 준다.
III
연구 계획 · 계획 단계 — 분석 미착수
협정세율의 단계적 인하와 관세 귀착: 한국의 수입관세는 누가 부담하는가
FTA 일곱 상대의 철폐 일정을 변이로 귀착·무역 전환·시점 이연을 묻는다 — 아래는 연구계획서(2026-09-13)의 요약이며, 수치는 계획 단계의 탐침값이다
무엇을 묻나. 한국이 자유무역협정(FTA)으로 수입관세를 내리면 그 이득은 누구에게 가는가. 관세가 1%p 내렸는데 외국 수출자가 값을 그대로 두면 인하분은 전부 국내 수입자와 소비자에게 간다. 반대로 수출자가 관세 전 가격을 올리면 인하분의 일부 또는 전부를 수출자가 가져간다. 이 배분을 귀착이라 부르며, 관세 인하 뒤 수입 단가가 얼마나 움직이는지로 측정한다. 미국이 2018년에 관세를 올렸을 때는 수입 가격이 거의 움직이지 않아 미국 수입자가 다 부담했다는 결과가 여럿인데, 인하에서도 같은지는 알려져 있지 않다.
왜 지금 답할 수 있나. 자료가 둘 갖추어졌기 때문이다. 하나는 2007~2026년 스무 해의 HSK 10단위 세율에서 만든 원산지별 실행세율이고, 다른 하나는 2007년 1월부터 2026년 7월까지 원산지×월×HS10의 수입 금액과 중량이다. 두 자료가 같은 코드로 이어지고, HSK 개정을 건너는 연계표가 있어 15년짜리 철폐 일정을 한 코드로 끝까지 따라갈 수 있다. 변이는 협정마다 코드마다 다르게 정해진 철폐 일정에서 온다. 한-아세안(2008)부터 한-중·베트남·캐나다(2015)까지 일곱 협정이 같은 코드에 대해 즉시 철폐부터 20년 철폐까지 서로 다른 일정을 두었고, 그 일정은 협정을 맺을 때 정해져 그 뒤의 경기 변동과 무관하다. 실행세율이 전년보다 내린 코드×원산지×연도가 92,123개, 수입이 있는 코드×원산지×연도 셀이 612,420개, 월 단위로는 457만 셀이다. 일곱 상대는 2025년 수입액의 59.7%를 차지하고, 그 가운데 53.3%가 무협정 세율보다 낮은 협정세율을 받는다. 그 53.3%의 대부분(전체의 46.3%)은 협정세율이 이미 0%까지 내려간 물품이라 더 내릴 것이 없고, 남은 변이는 아직 단계 인하 중인 물품에 있다.
세 가지를 본다. 첫째, 협정세율이 1%p 내릴 때 관세 전 수입 단가가 얼마나 오르는가(귀착). 둘째, 같은 물품의 무협정 원산지 수입이 얼마나 빠지는가(무역 전환). 셋째, 인하일이 미리 알려져 있으므로 수입자가 직전 달의 수입을 미루고 직후 달로 몰아 넣는가(시점 이연). 셋째 물음의 열쇠는 한-EU 협정세율이 해마다 7월 1일에 내린다는 사실이다. 다른 협정은 1월 1일에 내려 연초 효과와 겹치지만, 7월 인하는 그 문제가 없다.