본문 바로가기

Story/php

도로명 주소 api 안전행정부 제공

반응형

도로명 주소를 이번에 안전행정부에서 open api 형태로 제공한다.

물론 기존에도 제공을 했었지만 다음과 협업을 통해서 http://postcode.map.daum.net/guide 에서 제공한 이후로

보도자료를 통해 "안전행정부는 최신의 주소 정보를 이용자가 보다 편리하게 활용할 수 있도록 바뀌는 주소정보를 매일 자동으로 제공해 주는 시스템을 구축해 11월부터 시범운영한 뒤 ‘15년부터 전체 민간기업 등으로 서비스를 확대할 계획이다." 라고 소개했다.

홈페이지도 개편이 되고 실제 운영할 시스템이 이 open api 일거란 생각이 들어 이번에 적용하게 되었다.

 

적용하는 방법을 순서대로 설명하면

http://www.juso.go.kr/addrlink/addrLinkRequestMain.htm?cntcMenu=URL 에서 주소연계서비스를 신청한다.

 

아이핀으로 인증받은후 위의 양식에 맞춰 신청서를 작성한다.

URL 에는 http:// 를 제외한 도메인 주소를 넣어주고 IP 를 모를경우 ping 을 통해서 IP 주소를 확인 후 입력해준다.

 

신청 후 약 1시간 밖에 지나지 않았는대 SMS 로

"[도로명주소] 연계신청이 (승인) 되었습니다. www.juso.go.kr 사이트에서 확인하세요." 라는 문자가 도착했다.

 

승인완료 후 받은 승인키와 연계가이드를 사용하여 실제 적용하면 되는대 여기서 제공하는건 jsp 만 제공한다.

하지만 전혀 걱정할 필요 없다 jsp 로 프로그램 처리된것이 아니라 단지 값을 받아 처리하는 정도일뿐이다.

따라서 asp 든 php 든 변경해서 사용이 가능하다.

 

가이드에서 받은 소스를 보면

- Sample.jsp

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script language="javascript">

function goPopup(){
// 주소검색을 수행할 팝업 페이지를 호출합니다.
// 호출된 페이지(jusopopup.jsp)에서 실제 주소검색URL(http://www.juso.go.kr/addrlink/addrLinkUrl.do)를 호출하게 됩니다.
var pop = window.open("./jusopopup.php","pop","width=570,height=420, scrollbars=yes, resizable=yes");
}


function jusoCallBack(roadFullAddr,roadAddrPart1,addrDetail,roadAddrPart2,engAddr, jibunAddr, zipNo, admCd, rnMgtSn, bdMgtSn){
// 팝업페이지에서 주소입력한 정보를 받아서, 현 페이지에 정보를 등록합니다.
document.form.roadFullAddr.value = roadFullAddr;
document.form.roadAddrPart1.value = roadAddrPart1;
document.form.roadAddrPart2.value = roadAddrPart2;
document.form.addrDetail.value = addrDetail;
document.form.engAddr.value = engAddr;
document.form.jibunAddr.value = jibunAddr;
document.form.zipNo.value = zipNo;
document.form.admCd.value = admCd;
document.form.rnMgtSn.value = rnMgtSn;
document.form.bdMgtSn.value = bdMgtSn;
}

</script>
<title>주소 입력 샘플</title>
</head>
<body>
<form name="form" id="form" method="post">

<input type="button" onClick="goPopup();" value="팝업_domainChk"/>
<div id="list"></div>
<div id="callBackDiv">
<table>
<tr><td>도로명주소 전체(포멧)</td><td><input type="text" style="width:500px;" id="roadFullAddr" name="roadFullAddr" /></td></tr>
<tr><td>도로명주소 </td><td><input type="text" style="width:500px;" id="roadAddrPart1" name="roadAddrPart1" /></td></tr>
<tr><td>고객입력 상세주소 </td><td><input type="text" style="width:500px;" id="addrDetail" name="addrDetail" /></td></tr>
<tr><td>참고주소 </td><td><input type="text" style="width:500px;" id="roadAddrPart2" name="roadAddrPart2" /></td></tr>
<tr><td>영문 도로명주소 </td><td><input type="text" style="width:500px;" id="engAddr" name="engAddr" /></td></tr>
<tr><td>지번 주소 </td><td><input type="text" style="width:500px;" id="jibunAddr" name="jibunAddr" /></td></tr>
<tr><td>우편번호 </td><td><input type="text" style="width:500px;" id="zipNo" name="zipNo" /></td></tr>
<tr><td>행정구역코드 </td><td><input type="text" style="width:500px;" id="admCd" name="admCd" /></td></tr>
<tr><td>도로명코드 </td><td><input type="text" style="width:500px;" id="rnMgtSn" name="rnMgtSn" /></td></tr>
<tr><td>건물관리번호 </td><td><input type="text" style="width:500px;" id="bdMgtSn" name="bdMgtSn" /></td></tr>
</table>
</div>

</form>
</body>
</html>

 

 

- jusoPopup.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<%
//request.setCharacterEncoding("UTF-8"); //한글깨지면 주석제거
String inputYn = request.getParameter("inputYn");
String roadFullAddr = request.getParameter("roadFullAddr");
String roadAddrPart1 = request.getParameter("roadAddrPart1");
String roadAddrPart2 = request.getParameter("roadAddrPart2");
String engAddr = request.getParameter("engAddr");
String jibunAddr = request.getParameter("jibunAddr");
String zipNo = request.getParameter("zipNo");
String addrDetail = request.getParameter("addrDetail");
String admCd = request.getParameter("admCd");
String rnMgtSn = request.getParameter("rnMgtSn");
String bdMgtSn = request.getParameter("bdMgtSn");
%>
</head>
<script language="javascript">
function init(){
var url = location.href;
var confmKey = "승인키";
var inputYn= "<%=inputYn%>";
if(inputYn != "Y"){
document.form.confmKey.value = confmKey;
document.form.returnUrl.value = url;
document.form.action="http://www.juso.go.kr/addrlink/addrLinkUrl.do"; //인터넷망
//document.form.action="http://10.182.60.22/addrlink/addrLinkUrl.do"; //내부행망
document.form.submit();
}else{
opener.jusoCallBack("<%=roadFullAddr%>","<%=roadAddrPart1%>","<%=addrDetail%>","<%=roadAddrPart2%>","<%=engAddr%>","<%=jibunAddr%>","<%=zipNo%>", "<%=admCd%>", "<%=rnMgtSn%>", "<%=bdMgtSn%>");
window.close();
}
}
</script>
<body onload="init();">
<form id="form" name="form" method="post">
<input type="hidden" id="confmKey" name="confmKey" value=""/>
<input type="hidden" id="returnUrl" name="returnUrl" value=""/>
</form>
</body>
</html>

 

 

위 소스를 보면 알겠지만 jusoPopup.jsp 에서 http://www.juso.go.kr/addrlink/addrLinkUrl.do 로 값을 전달한 후 결과를 받아서 값을 부모창으로 전달하는게 jsp 에 전부이다. (물론 인코딩에 대한 부분이 더 있을수는 있겠다.)

 

php를 예를 들면 위의 소스에서

opener.jusoCallBack("<%=roadFullAddr%>","<%=roadAddrPart1%>","<%=addrDetail%>","<%=roadAddrPart2%>","<%=engAddr%>","<%=jibunAddr%>","<%=zipNo%>", "<%=admCd%>", "<%=rnMgtSn%>", "<%=bdMgtSn%>");

 

를 다음과 같이 바꿔주고 이 이외의 jsp 부분을 주석 처리하면 된다.

 

opener.jusoCallBack("<?php echo $_POST['roadFullAddr']?>","<?php echo $_POST['roadAddrPart1']?>","<?php echo $_POST['addrDetail']?>","<?php echo $_POST['roadAddrPart2']?>","<?php echo $_POST['engAddr']?>","<?php echo $_POST['jibunAddr']?>","<?php echo $_POST['zipNo']?>", "<?php echo $_POST['admCd']?>", "<?php echo $_POST['rnMgtSn']?>", "<?php echo $_POST['bdMgtSn']?>");

 

신청하고 적용하는대 몇시간밖에 걸리지 않았다.

 

실제 안전행정부에서 제공하는 open api , 다음 에서 제공하는 api 를 다 사용해 보니 안전행정부것은 아직 검색페이지에서 오류가 자주 발생하는 편이고 사용자 UI 나 개발자 편의성에서도 다음보다 떨어지는것 같다.

 

제일 중요한 점이 앞으로도 안정적인 서비스를 제공받는게 목적이라 일반 기업인 다음보다는 안정행정부것을 사용하고 싶은대 당분간 서비스 안정화를 기대해 봐야 할거 같다.

 

보도자료 : http://www.mospa.go.kr/frt/bbs/type010/commonSelectBoardArticle.do;jsessionid=QFeT9CK64dsaL611FSTyNX0CaMj7Mo10GsdEELCi5h76kwZXqxCr1JFvsCvmqswh.mopwas52_servlet_engine1?bbsId=BBSMSTR_000000000008&nttId=43971

반응형