티스토리 뷰

우편번호 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
)
- 이정도로 해서 인덱스 걸면 빠르지는 않지만 써먹을 수 있을 정도의 속도는 나옴..
- 아는 사람이 살짝 손봐주면 더 빨라질 듯.. - 난 몰라서 대충 ㅠㅠ -
- Total
- Today
- Yesterday
- 사이판
- spring tutorial
- 전북
- SqlSessionfactory
- K리그
- 스프링
- PIC
- mybatis
- 펜탁스
- 부모님
- 캠핑장
- LG
- k-3
- 자바
- 텐트
- 리조트
- G3
- 스프링부트
- 톰캣
- Spring
- MySQL
- 여행
- 아마존
- 캠핑
- 강원도
- 세부
- 에닝요
- Java
- web.xml
- 카메라
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |