2016. 8. 25. 15:24ㆍ공부
우편번호 DB 다운로드 : 인터넷 우체국
( http://www.epost.go.kr/search/zipcode/cmzcd002k01.jsp )
- 개발중인 웹 어플리케이션에서 우편번호 검색이 필요해, 우편번호DB를 구축하다가 기억해야할 것들을 가볍게 정리해본다.
- 몇 달 전에 구축하고, 검색을 좀 더 원활하게 하기 위해 다시 구축하려니, 같은 문제를 다시 겪게 되어 정리함.
- 상단의 URL을 통해 우편번호 DB를 다운로드할 수 있음
우편번호 DB파일 바로가기를 클릭하면 데이터를 다운받을 수 있다
지역별 주소 DB를 다운로드 받으면 됨
- 인터넷 익스플로러로 접근하면 깨지고, 크롬으로 접근하면 잘되는 사이트네
- txt 파일로 제공
다운받은 txt 파일
- 다운로드 받아보니 용량이 엄청남..
- euc-kr 인가 ms949 인가 ? / 아무튼 ANSI
CREATE TABLE IF NOT EXISTS `zipcode` (
`zipCode` VARCHAR(5) NULL ,
`sido` VARCHAR(21) NULL COMMENT '',
`sidoE` VARCHAR(17) NULL COMMENT '',
`sigungu` VARCHAR(25) NULL COMMENT '',
`sigunguE` VARCHAR(27) NULL COMMENT '',
`eupmyun` VARCHAR(15) NULL COMMENT '',
`eupmyunE` VARCHAR(20) NULL COMMENT '',
`doroCode` VARCHAR(12) NULL COMMENT '',
`doro` VARCHAR(33) NULL COMMENT '',
`doroE` VARCHAR(46) NULL COMMENT '',
`underground` CHAR(1) NULL COMMENT '',
`buildingNo1` VARCHAR(5) NULL COMMENT '\'건물본번 + 건물부번\'',
`buildingNo2` VARCHAR(4) NULL COMMENT '',
`buildingManageNo` VARCHAR(25) NULL COMMENT '',
`daryang` VARCHAR(1) NULL COMMENT '',
`building` VARCHAR(60) NULL COMMENT '\'건물명\'',
`dongCode` VARCHAR(10) NULL COMMENT '\'건물명\'',
`dong` VARCHAR(16) NULL COMMENT '\'건물명\'',
`ri` VARCHAR(18) NULL COMMENT '',
`dongAdmin` VARCHAR(24) NULL COMMENT '',
`san` VARCHAR(4) NULL COMMENT '',
`zibun1` VARCHAR(4) NULL COMMENT '',
`zibunSerial` VARCHAR(2) NULL COMMENT '',
`zibun2` VARCHAR(4) NULL COMMENT '' )
ENGINE = InnoDB
- 대략 데이터베이스 구조는 위와 같음
- 해당 TXT 파일을 엑셀로 변환하려고 하면 파일이 너무 크거나, 내 시스템이 구려서 그런지 엑셀이 다운됨. ㅠㅠ
- 프로그램으로 돌리려면 엄청난 시간이 필요함..
- 다행이 mysql 에는 LOAD DATA 라는 명령어가 있음
mysql> LOAD DATA LOCAL INFILE '/home/iwan2fly/zip5/강원도.txt' INTO TABLE zipcode CHARACTER SET 'utf8' FIELDS TERMINATED BY '|' IGNORE 1 LINES;
Query OK, 329891 rows affected (14.22 sec)
Records: 329891 Deleted: 0 Skipped: 0 Warnings: 0
- 강원도가 14초 정도 걸림
- 가장 파일이 큰 경기도는 54초 정도 걸렸음
- 만약 프로그램 짜서 올리려고 했으면 ? / 상상할 수 없음
- 17개 파일이므로, 웹서핑하면서 대충 1시간 안에 쌈싸먹을 수 있음
- 아래 쿼리는 위 CREATE 문에 검색용 주소와 보여주기용 주소 칼럼을 추가해서 컬럼별로 나뉘어진 주소를 하나로 모았음
- 대략 우체국에서 우편번호 검색하면 나오는 것과 같은 형태
- 만들어진 주소로 정렬하면 우체국과는 정렬 순서가 조금 다름
- 우체국은 buindingNo 를 숫자로 저장해서 정렬하는 데 쓰는 듯.
UPDATE zipcode
SET searchAddressDoro = concat(
eupmyun,
doro,
buildingNo1,
CASE buildingNo2 WHEN 0 THEN ''
ELSE CONCAT('-',buildingNo2)
END,
CASE CONCAT(dong,building)
WHEN '' THEN ''
ELSE
CASE dong WHEN '' THEN CONCAT('(',building,')')
ELSE
CASE building WHEN '' THEN CONCAT('(',dong,')') ELSE CONCAT( '(',dong,',',building,')') END
END
END
),
searchAddressZibun = concat(
dong,
zibun1,
CASE zibun2 WHEN 0 THEN ''
ELSE CONCAT('-',zibun2)
END,
CASE CONCAT(building) WHEN '' THEN ''
ELSE CONCAT('(',building,')')
END
),
addressDoro = concat(
CASE eupmyun WHEN '' THEN '' ELSE CONCAT(eupmyun, ' ') END,
CASE doro WHEN '' THEN '' ELSE CONCAT(doro, ' ') END,
buildingNo1,
CASE buildingNo2 WHEN 0 THEN '' ELSE CONCAT('-',buildingNo2) END,
CASE CONCAT(dong,building)
WHEN '' THEN ''
ELSE
CASE dong WHEN '' THEN CONCAT(' (',building,')')
ELSE
CASE building WHEN '' THEN CONCAT(' (',dong,')') ELSE CONCAT( ' (',dong,',',building,')') END
END
END
),
addressZibun = concat(
CASE dong WHEN '' THEN '' ELSE CONCAT(dong, ' ') END,
zibun1,
CASE zibun2 WHEN 0 THEN ''
ELSE CONCAT('-',zibun2)
END,
CASE CONCAT(building) WHEN '' THEN ''
ELSE CONCAT(' (',building,')')
END
)
- 이정도로 해서 인덱스 걸면 빠르지는 않지만 써먹을 수 있을 정도의 속도는 나옴..
- 아는 사람이 살짝 손봐주면 더 빨라질 듯.. - 난 몰라서 대충 ㅠㅠ -