remagine
다음 주소 api 만들어 보기 <1> 본문
다음 주소 api를 따라서 만들어보자
최근 정부에서는 공공데이터를 공개적으로 제공하고 있고
이를 통해 독자적인 DB를 구축해서 서비스를 제공할 수 있다.
주소 api 같은 경우 , 회사가 독자적인 DB를 가지고 있다면 유용할 수 있어서
이번에 만들기로 했다.
1. DB 구축하기
일단 DB제공처는 행정자치부, 우체국 2군대가 있다.
https://docs.google.com/document/d/1g8qYv1fkfzZsEX0xNHLtVKaiS8QhRiOKOdzcqnNAR-k/edit 에 짧게 분석해보았다.
같은 검색결과를 보장한다면
더 단순한 구조의 우체국을 선택했다.
2. 우체국 Data 분석하기
우체국 Data는 전국 17개의 시도별로 txt 파일을 제공한다.
제공되는 데이터는 "|" (파이프라인)으로 구분되고
Row수는 약 620만개
업데이트는 1개월마다 실시되면 35만 Row가 변경,삭제,삽입된다.
지번주소와 도로명 주소가 M:N 맵핑 처리 되지 않아
동일한 값의 Data가 있는 문제가 있다.
작업내용
1. Data를 받아서 제공되는 api문서, data관련 문서, 주소 표기 규칙을 상세히 숙지했다.
2. 상기 규칙과 법령에 따라 필요한 컬럼을 구분해 냈다.
3. 테이블을 만들어봤다.
4. 구분해낸 컬럼들을 법령 규칙에 따라 조합하는 쿼리를 만들어 냈다.
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 32 33 34 35 36 37 38 39 40 41 | SELECT ZIPCODE AS 새우편번호 , sido || ' ' || sigungu || CASE WHEN eupmyun = '' THEN '' ELSE ' ' || eupmyun END ||' '|| road_name || CASE WHEN is_under = '2' THEN ' 공중' WHEN is_under = '1' THEN ' 지하' ELSE '' END ||' '|| building_num1 || CASE WHEN building_num2 = 0 THEN '' ELSE '-' || building_num2 END || CASE WHEN building_detail = '' THEN '' ELSE '(' || building_detail || ')' END AS 도로명주소 , sido || ' ' || sigungu || CASE WHEN eupmyun = '' THEN CASE WHEN (bub_dong IS NOT NULL ) THEN (' ' || bub_dong || ' ' || JIBUN1 || CASE WHEN JIBUN2 = 0 THEN '' ELSE '-' || JIBUN2 END) || (CASE WHEN building_detail = '' THEN '' ELSE '(' || building_detail || ')' END) END ELSE (' ' || eupmyun || ' ' || RI || ' ' || JIBUN1 || CASE WHEN JIBUN2 = 0 THEN '' ELSE '-' || JIBUN2 END) || CASE WHEN building_detail = '' THEN '' ELSE '(' || building_detail || ')' END END AS 지번주소 FROM ZIPCODE WHERE bub_dong = '합정동' ORDER BY 도로명주소 | cs |
더럽다...
Comments