Today I Learned …

[웹개발] 주소 검색 기능 (1) : 주소 DB 자체 구축 (MySql) 본문

Web/APM

[웹개발] 주소 검색 기능 (1) : 주소 DB 자체 구축 (MySql)

염베리 2021. 11. 16. 05:28

* 개인적인 공부 내용을 기록한 글입니다.


사담

드디어 주소 DB!

이제 개발은 진짜 끝이다.

 

설명

주소 검색 기능을 구현하는 과정은 크게 둘로 나눌 수 있다.

[1] 주소 DB 구축

[2] 회원가입 시 주소 검색 로직 구현

이번 포스팅에서는 API를 사용하지 않고 주소 DB를 구축하는 방법에 대해 다룬다.


주소 DB 구축 (MySql)

 

 

1. 우정사업본부 홈페이지 (= koreapost.go.kr) 에서 주소 DB를 다운받는다.

클릭하면 확대됩니다.

[1] 메인화면 > 정보공개 > 우정데이터 제공센터

[2] 우편데이터 제공 목록 > 우편번호DB

[3] 우편번호 DB란? > 우편번호 DB파일 바로가기

[4] 고시파일 내려받기 > 지역별 주소 DB > 받기

 

 

2. 다운받은 zipcode_DB의 압축을 풀고 각 파일의 이름을 숫자로 바꿔준다.

클릭하면 확대됩니다.

 

 

3. 다음의 MySql 환경 설정을 거쳐준다.

mysql> show global variables like 'local_infile';

  +---------------+-------+ 
  | Variable_name | Value |
  +---------------+-------+
  | local_infile  | OFF   |
  +---------------+-------+
  1 row in set (0.00 sec)

[1] local_infile : 현재 설정 확인

 mysql> set global local_infile=true;

  +---------------+-------+ 
  | Variable_name | Value |
  +---------------+-------+
  | local_infile  | ON    |
  +---------------+-------+
  1 row in set (0.00 sec)

[2] local_infile : ON으로 변경

mysql> exit
Bye

[3] MySql 종료

mysql --local_infile -u root -p

[4] local_infile : 옵션 껴서 MySql 재실행

 

 

4. 주소 데이터가 들어갈 테이블을 만들어준다.

CREATE TABLE IF NOT EXISTS `ZIPCODE` (
`ZIP_NO` VARCHAR(5) NULL COMMENT '우편번호',
`SIDO` VARCHAR(20) NULL COMMENT '시도',
`SIDO_ENG` VARCHAR(40) NULL COMMENT '시도(영문)',
`SIGUNGU` VARCHAR(20) NULL COMMENT '시군구',
`SIGUNGU_ENG` VARCHAR(40) NULL COMMENT '시군구(영문)',
`EUPMYUN` VARCHAR(20) NULL COMMENT '읍면',
`EUPMYUN_ENG` VARCHAR(40) NULL COMMENT '읍면(영문)',
`DORO_CD` VARCHAR(12) NULL COMMENT '도로명코드',
`DORO` VARCHAR(80) NULL COMMENT '도로명',
`DORO_ENG` VARCHAR(80) NULL COMMENT '도로명(영문)',
`UNDERGROUND_YN` CHAR(1) NULL COMMENT '지하여부',
`BUILD_NO1` DECIMAL(5,0) NULL COMMENT '건물번호본번',
`BUILD_NO2` DECIMAL(5,0) NULL COMMENT '건물번호부번',
`BUILD_NO_MANAGE_NO` VARCHAR(25) NULL COMMENT '건물관리번호',
`DARYANG_NM` VARCHAR(40) NULL COMMENT '다량배달처명',
`BUILD_NM` VARCHAR(200) NULL COMMENT '시군구용건물명',
`DONG_CD` VARCHAR(10) NULL COMMENT '법정동코드',
`DONG_NM` VARCHAR(20) NULL COMMENT '법정동명',
`RI` VARCHAR(20) NULL COMMENT '리명',
`H_DONG_NM` VARCHAR(40) NULL COMMENT '행정동명',
`SAN_YN` VARCHAR(1) NULL COMMENT '산여부',
`ZIBUN1` DECIMAL(4,0) NULL COMMENT '지번본번',
`EUPMYUN_DONG_SN` VARCHAR(2) NULL COMMENT '읍면동일련번호',
`ZIBUN2` DECIMAL(4,0) NULL COMMENT '지번부번' ,
`ZIP_NO_OLD` VARCHAR(4) NULL COMMENT '구우편번호' ,
`ZIP_SN` VARCHAR(2) NULL COMMENT '우편일련번호'
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;

 

 

5. zipcode_DB 디렉토리 내 모든 파일을 하나씩 테이블에 넣어준다.

mysql> LOAD DATA LOCAL INFILE "/home/choco/zipcode_DB/1.txt" INTO TABLE ZIPCODE CHARACTER SET 'utf8' FIELDS TERMINATED BY '|' IGNORE 1 LINES;
Query OK, 357571 rows affected, 2 warnings (4.70 sec)
Records: 357571  Deleted: 0  Skipped: 0  Warnings: 2

[1] "/home/choco/zipcode_DB/1.txt" 부분에 넣고자 하는 파일의 경로를 적어준다.

[2] 1.txt ~ 17.txt 까지 위 코드를 반복 실행하여 전부 넣어주면 된다.

 

 

6. 모든 작업이 완료된 DB의 모습은 다음과 같다.

[1] 주소 DB 구축 끝!

 

 

참고 포스팅

https://calen.tistory.com/49

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=mariapang&logNo=221512818793

프로필사진
berry
FE Developer, loves React & better DX
Comments