본문 바로가기

WebHacking

WebHacking - (7)우편번호 DB 만들기 (MySQL)

주소 검색 기능을 구현하기 위해서 일단 MySQL DB에 우편번호를 Import 시켜보자.

https://www.epost.go.kr/search/zipcode/cmzcd002k01.jsp 우체국 홈페이지에 들어가서 지역별 DB를 다운받는다.

 

해당 파일을 다운받은 후에 압축을 풀어준다. (용량이 꽤 크다..)

 

파일 하나를 열어보면 칼럼명을 "|" 기준으로 나와있고 아래로 주소들이 기입되어 있다.

우편번호|시도|시도영문|시군구|시군구영문|읍면|읍면영문|도로명코드|도로명|도로명영문|지하여부|건물번호본번|건물번호부번|건물관리번호|다량배달처명|시군구용건물명|법정동코드|법정동명|리명|행정동명|산여부|지번본번|읍면동일련번호|지번부번|구우편번호|우편번호일련번호

 

아래 코드를 이용해서 MySQL에 zipcode 테이블을 만들어준다.

1
CREATE TABLE zipcode ( zipcode VARCHAR(5NULL, sido VARCHAR(25NULL, sido_en VARCHAR(20NULL, sigungu VARCHAR(30NULL, sigungu_en VARCHAR(30NULL, eupmyun VARCHAR(20NULL, eupmyun_en VARCHAR(25NULL, doro_code VARCHAR(12NULL, doro VARCHAR(40NULL, doro_en VARCHAR(50NULL, under_yn VARCHAR(1NULL, buildno1 VARCHAR(5NULL, buildno2 VARCHAR(4NULL, buildnum VARCHAR(25NULL, multiple VARCHAR(1NULL, buildname VARCHAR(70NULL, dong_code VARCHAR(10NULL, dong VARCHAR(20NULL, ri VARCHAR(20NULL, dong_hj VARCHAR(30NULL, mount_yn VARCHAR(1NULL, jibun1 VARCHAR(4NULL, eupmyundong_no VARCHAR(2NULL, jibun2 VARCHAR(4NULL, zipcode_old VARCHAR(7NULL, zipcode_seq VARCHAR(3NULL, idx INT(10UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
cs

 

테이블을 만들어줬으니 데이터들을 테이블에 밀어넣어 줘야한다.

LOAD DATA 명령어를 이용해서 쉽게 데이터를 밀어넣을 수 있다.

LOAD DATA 문법은 검색해보면 알 수 있지만, 간단하게 설명하면 앞 부분부터 DB 파일(강원도.txt, 경기도.txt 등등)을 webhack DB내의 zipcode 테이블에 밀어넣을 건데 Character-set은 UTF-8이고, 필드 구분문자는 '|' 으로 나누고, 제목이 포함된 첫 줄은 생략한다.

이렇게 생각하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
LOAD DATA LOCAL INFILE '/var/www/html/zipcode_DB/강원도.txt' INTO TABLE webhack.zipcode CHARACTER SET 'utf8' FIELDS TERMINATED BY '|' IGNORE 1 LINES;
LOAD DATA LOCAL INFILE '/var/www/html/zipcode_DB/경기도.txt' INTO TABLE webhack.zipcode CHARACTER SET 'utf8' FIELDS TERMINATED BY '|' IGNORE 1 LINES;
LOAD DATA LOCAL INFILE '/var/www/html/zipcode_DB/경상남도.txt' INTO TABLE webhack.zipcode CHARACTER SET 'utf8' FIELDS TERMINATED BY '|' IGNORE 1 LINES;
LOAD DATA LOCAL INFILE '/var/www/html/zipcode_DB/경상북도.txt' INTO TABLE webhack.zipcode CHARACTER SET 'utf8' FIELDS TERMINATED BY '|' IGNORE 1 LINES;
LOAD DATA LOCAL INFILE '/var/www/html/zipcode_DB/광주광역시.txt' INTO TABLE webhack.zipcode CHARACTER SET 'utf8' FIELDS TERMINATED BY '|' IGNORE 1 LINES;
LOAD DATA LOCAL INFILE '/var/www/html/zipcode_DB/대구광역시.txt' INTO TABLE webhack.zipcode CHARACTER SET 'utf8' FIELDS TERMINATED BY '|' IGNORE 1 LINES;
LOAD DATA LOCAL INFILE '/var/www/html/zipcode_DB/대전광역시.txt' INTO TABLE webhack.zipcode CHARACTER SET 'utf8' FIELDS TERMINATED BY '|' IGNORE 1 LINES;
LOAD DATA LOCAL INFILE '/var/www/html/zipcode_DB/부산광역시.txt' INTO TABLE webhack.zipcode CHARACTER SET 'utf8' FIELDS TERMINATED BY '|' IGNORE 1 LINES;
LOAD DATA LOCAL INFILE '/var/www/html/zipcode_DB/서울특별시.txt' INTO TABLE webhack.zipcode CHARACTER SET 'utf8' FIELDS TERMINATED BY '|' IGNORE 1 LINES;
LOAD DATA LOCAL INFILE '/var/www/html/zipcode_DB/세종특별자치시.txt' INTO TABLE webhack.zipcode CHARACTER SET 'utf8' FIELDS TERMINATED BY '|' IGNORE 1 LINES;
LOAD DATA LOCAL INFILE '/var/www/html/zipcode_DB/울산광역시.txt' INTO TABLE webhack.zipcode CHARACTER SET 'utf8' FIELDS TERMINATED BY '|' IGNORE 1 LINES;
LOAD DATA LOCAL INFILE '/var/www/html/zipcode_DB/인천광역시.txt' INTO TABLE webhack.zipcode CHARACTER SET 'utf8' FIELDS TERMINATED BY '|' IGNORE 1 LINES;
LOAD DATA LOCAL INFILE '/var/www/html/zipcode_DB/전라남도.txt' INTO TABLE webhack.zipcode CHARACTER SET 'utf8' FIELDS TERMINATED BY '|' IGNORE 1 LINES;
LOAD DATA LOCAL INFILE '/var/www/html/zipcode_DB/전라북도.txt' INTO TABLE webhack.zipcode CHARACTER SET 'utf8' FIELDS TERMINATED BY '|' IGNORE 1 LINES;
LOAD DATA LOCAL INFILE '/var/www/html/zipcode_DB/제주특별자치도.txt' INTO TABLE webhack.zipcode CHARACTER SET 'utf8' FIELDS TERMINATED BY '|' IGNORE 1 LINES;
LOAD DATA LOCAL INFILE '/var/www/html/zipcode_DB/충청남도.txt' INTO TABLE webhack.zipcode CHARACTER SET 'utf8' FIELDS TERMINATED BY '|' IGNORE 1 LINES;
LOAD DATA LOCAL INFILE '/var/www/html/zipcode_DB/충청북도.txt' INTO TABLE webhack.zipcode CHARACTER SET 'utf8' FIELDS TERMINATED BY '|' IGNORE 1 LINES;
cs

 

혹시라도 다운받은 파일이 UTF-8이 아니라면 먼저 UTF-8로 먼저 변환을 시켜줘야 한다.

이래도 DB에 한글이 깨진다면 MySQL 설정파일에서 Character-set을 UTF-8로 변경해줘야 한다.

 

참고사이트 : http://www.ivps.kr/2020/03/20/mysql-%EC%9A%B0%EC%B2%B4%EA%B5%AD-%EC%9A%B0%ED%8E%B8%EB%B2%88%ED%98%B8-db-%ED%8C%8C%EC%9D%BC-table-%EC%97%90-%EC%A0%80%EC%9E%A5%ED%95%98%EA%B8%B0/