본문 바로가기

프로그래밍/JAVA & SPRING

[LifeSoft] spring 24강 도로명 주소(daum api)

반응형

 

14. 도로명 주소

가. 도로명 주소 사이트

 

- 행정자치부 http://www.judo.go.kr

- 개발자센터에서 API 신청 가능

https://www.juso.go.kr/addrlink/devAddrLinkRequestWrite.do?returnFn=write&cntcMenu=URL

 

나. 우편번호, 주소 서비스 방법

 

1) 직접 구축

209년 4월 현재 건물 DB 다운로드 141MB, 압축풀면 1.72GB

https://www.juso.go.kr/addrlink/addressBuildDevNew.do?menu=mainJusoDb

 

- 예를 들어 세종시 자료를 엑셀에서 읽어들임(구분자:|)

- 텍스트 파일을 엑셀로 읽어서 (구분자 |) csv로 변환한 후 필요한 컬럼만 선택한 후 저장

위의 주소로 다운로드 받고 압축해제한다.

build_sejong.txt을 엑셀로 열어본다.

원본파일: Windows (ANSI)로 하고

구분기호에서 탭 체크해제, 기타체크 하이픈('|') 입력 - 다음 - 마침

- 데이터를 import할 테이블을 미리 생성한 후

- SQL Developer에서 import하여 테이블로 저장

- 단점은 용량도 커서 비용이 많이 들고 업데이트 되면 다시 작업을 해줘야 한다.

 

2) API 사용

* 다음 API

- http://postcode.map.daum.net/guide

키를 발급 받을 필요가 없다.

 

다. 실습예제

 

1) menu.jsp

<a href="${path}/member/address.do">도로명 주소</a>

2) MemberController.java 에 method 추가 

@R​equestMapping("address.do")

public String address() {

  return "member/join";

}

3) join.jsp

우편번호 : <input type="text" id="post_code" name="zipcode" readonly size="10">
<input type="button" onclick="showPostcode()" value="우편번호 찾기">
주소 : <input type="text" id="address1" name="address1" size="50">
상세주소: <input type="text" id="address2" name="address2">

 

스크립트 입력

<script src="http://dmaps.daum.net/map_js_init/postcode.v2.js"></script>
function showPostcode() {
 alert();
 new daum.Postcode({
  oncomplete : function(data) {
   // 팝업에서 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분.
    
   // 각 주소의 노출 규칙에 따라 주소를 조합한다.
   // 내려오는 변수가 값이 없는 경우엔 공백('')값을 가지므로 이를 참고하여 분기한다.
   var fullAddr = ''; // 최종 주소 변수
   var extraAddr = ''; // 조합형 주소 변수
   // 사용자가 선택한 주소 타입에 따라 해당 주소 값을 가져온다.
   if(data.userSelectedType === 'R') {
    // 사용자가 도로명 주소를 선택
    fullAddr = data.roadAddress;
   } else { // 지번 주소 선택 (J)
    fullAddr = data.jibunAddress;
   }
   // 사용자가 선택한 주소가 도로명 타입일때 조합한다.
   if(data.userSelectedType === 'R') {
    // 법정동명이 있을 경우 추가한다.
    if(data.bname !== '') { extraAddr += data.bname; }
    // 건물명이 있을 경우 추가한다.
    if(data.buildingName !== '') {
     extraAddr += (extraAddr !== '' ? ', '+data.buildingName : data.buildingName );
    }
    // 조합형주소의 유무에 따라 양쪽에 괄호를 추가하여 최종 주소를 만든다.
    fullAddr += (extraAddr !== '' ? ' (' + extraAddr + ') ' : ''); 
   }
    
   // 우편번호와 주소정보를 해당 필드에 넣는다. 5자리 새 우편번호 사용
   document.getElementById('post_code').value = data.zonecode;
   document.getElementById('address1').value = fullAddr;
   // 커서를 상세주소 필드로 이동한다.
   document.getElementById('address2').focus();
  }
 }).open();
}