반응형

우편번호는 아래 링크 사이트를 통해 최신 데이터를 받을 수 있습니다.

 

https://www.epost.go.kr/search/zipcode/cmzcd002k01.jsp

 

우편번호 DB와 검색기 소개 - 우편번호 안내

우편번호 검색기란? 우편번호 검색기 바로가기 ※ 우편번호를 검색하거나 고객이 보유한 다량의 주소록에 올바른 우편번호를 자동으로 생성해 주는 프로그램입니다.

www.epost.go.kr

 

1. 테이블 생성

 

ZIPDB라는 우편번호를 저장할 수 있는 테이블을 생성합니다.

 

저는 데이터베이스를 TEST라는 곳에서 아래 테이블을 생성하였습니다.

 

CREATE TABLE IF NOT EXISTS ZIPDB (
ZONE_NO VARCHAR(5) not null COMMENT '구역번호(우편번호)', 
CTPRVN VARCHAR(20) COMMENT '시도', 
CTPRVN_ENG VARCHAR(40) COMMENT '시도영문', 
SIGNGU VARCHAR(20) COMMENT '시군구', 
SIGNGU_ENG VARCHAR(40) COMMENT '시군구영문', 
EUP_MYEON VARCHAR(20) COMMENT '읍면', 
EUP_MYEON_ENG VARCHAR(40) COMMENT '읍면영문', 
RN_CODE VARCHAR(12) COMMENT '도로명코드', 
RN VARCHAR(80) COMMENT '도로명', 
RN_ENG VARCHAR(80) COMMENT '도로명영문', 
UNDGRND_AT VARCHAR(1) COMMENT '지하여부(0:지상, 1:지하)', 
BDNBR_MNNM INT(5) COMMENT '건물번호본번', 
BDNBR_DUCA INT(5) COMMENT '건물번호부번', 
BULD_MANAGE_NO VARCHAR(25) COMMENT '건물관리번호', 
MUCH_DLVR_OFFIC_NM VARCHAR(40) COMMENT '다량배달처명(null)', 
SIGNGU_BDNBR_NM VARCHAR(200) COMMENT '시군구용건물명', 
LEGALDONG_CODE VARCHAR(10) COMMENT '법정동코드', 
LEGALDONG_NM VARCHAR(20) COMMENT '법정동명', 
LI_NM VARCHAR(20) COMMENT '리명', 
ADSTRD_NM VARCHAR(40) COMMENT '행정동명', 
MNTN_AT VARCHAR(1) COMMENT '산여부(0:토지, 1:산)', 
LNM_MNNM INT(4) COMMENT '지번본번', 
EMD_SN VARCHAR(2) COMMENT '읍면동일련번호', 
LNM_DUCA INT(4) COMMENT '지번부번', 
OLD_ZIP VARCHAR(6) COMMENT '구 우편번호(null)', 
ZIP_SN VARCHAR(3) COMMENT '우편번호일련번호(null)'

 ENGINE = INNODB 
 DEFAULT CHARSET=utf8
 ;

 

 -- 인덱스 (구역번호 5자리 신 우편번호)
CREATE INDEX ZIPDB_IX1 ON zipdb(ZONE_NO);

-- 인덱스 (시도,시군구,읍면)
CREATE INDEX ZIPDB_IX2 ON zipdb(CTPRVN, SIGNGU, EUP_MYEON);

-- 인덱스(도로명코드)
CREATE INDEX ZIPDB_IX3 ON zipdb(RN_CODE);

-- 인덱스 (도로명)
CREATE INDEX ZIPDB_IX4 ON zipdb(RN);

 

 

2. 데이터 로드
우편번호 사이트의 모든 zip 값들을 서버에 /tmp/zip 폴더에 업로드
다만! 파일을 반드시 utf8로 변경 합니다.(메모장 열고 다른이름 저장에서 UTF8로 지정하면 됨.)

 

실행한 MariaDB는 10.3 버전으로 약간의 문법이 다릅니다.

 

다음 명령을 실행하여 LOAD DATA 문장을 자동으로 만듭니다.

 

# ls -lsa /tmp/zip/*.txt | awk '{print "LOAD DATA INFILE " "\x27" $10 "\x27" " INTO TABLE ZIPDB character set " "\x27" "utf8" "\x27" " fields terminated by " "\x27" "|" "\x27" " IGNORE 1 LINES;"}' 

 

아래 문장은 root 계정으로 local 시스템에 TEST 데이터베이스에 접속하라는 의미입니다.

# mysql -u root -p --local-infile=1 TEST (접속) 

 

MariaDB [TEST]> LOAD DATA INFILE '/tmp/zip/강원도.txt' INTO TABLE ZIPDB character set 'utf8' fields terminated by '|' IGNORE 1 LINES; 

 

위와 같이 수행하면 아래 그림과 같이 오류가 없는 경우 Query OK와 함께 Insert된 수가 출력됩니다.

 

2019.11.01 일 데이터 기준으로 약 1.3GB의 용량이 입력됩니다.

건수 : 3,112,960 건 

 

 

 

반응형

+ Recent posts