본문 바로가기
Project/소경관

[소경관] : 카카오 주소 API 사용하기

by 오주현 2022. 4. 21.
반응형

먼저, 카카오 주소 찾기 API를 제공하는 페이지에 접속한다.

 

Daum 우편번호 서비스

 

Daum 우편번호 서비스

우편번호 검색과 도로명 주소 입력 기능을 너무 간단하게 적용할 수 있는 방법. Daum 우편번호 서비스를 이용해보세요. 어느 사이트에서나 무료로 제약없이 사용 가능하답니다.

postcode.map.daum.net

설명이 워낙 잘 되어 있어서 사실 딱히 로직 정리가 필요하지는 않다.

 

팝업을 이용하여 도로명 주소와 지번 주소 모두 보여주기 탭에서 예제 코보기 눌러준다.

<input type="text" id="sample4_postcode" placeholder="우편번호">
<input type="button" onclick="sample4_execDaumPostcode()" value="우편번호 찾기"><br>
<input type="text" id="sample4_roadAddress" placeholder="도로명주소">
<input type="text" id="sample4_jibunAddress" placeholder="지번주소">
<span id="guide" style="color:#999;display:none"></span>
<input type="text" id="sample4_detailAddress" placeholder="상세주소">
<input type="text" id="sample4_extraAddress" placeholder="참고항목">

<script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
<script>
    //본 예제에서는 도로명 주소 표기 방식에 대한 법령에 따라, 내려오는 데이터를 조합하여 올바른 주소를 구성하는 방법을 설명합니다.
    function sample4_execDaumPostcode() {
        new daum.Postcode({
            oncomplete: function(data) {
                // 팝업에서 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분.

                // 도로명 주소의 노출 규칙에 따라 주소를 표시한다.
                // 내려오는 변수가 값이 없는 경우엔 공백('')값을 가지므로, 이를 참고하여 분기 한다.
                var roadAddr = data.roadAddress; // 도로명 주소 변수
                var extraRoadAddr = ''; // 참고 항목 변수

                // 법정동명이 있을 경우 추가한다. (법정리는 제외)
                // 법정동의 경우 마지막 문자가 "동/로/가"로 끝난다.
                if(data.bname !== '' && /[동|로|가]$/g.test(data.bname)){
                    extraRoadAddr += data.bname;
                }
                // 건물명이 있고, 공동주택일 경우 추가한다.
                if(data.buildingName !== '' && data.apartment === 'Y'){
                   extraRoadAddr += (extraRoadAddr !== '' ? ', ' + data.buildingName : data.buildingName);
                }
                // 표시할 참고항목이 있을 경우, 괄호까지 추가한 최종 문자열을 만든다.
                if(extraRoadAddr !== ''){
                    extraRoadAddr = ' (' + extraRoadAddr + ')';
                }

                // 우편번호와 주소 정보를 해당 필드에 넣는다.
                document.getElementById('sample4_postcode').value = data.zonecode;
                document.getElementById("sample4_roadAddress").value = roadAddr;
                document.getElementById("sample4_jibunAddress").value = data.jibunAddress;
                
                // 참고항목 문자열이 있을 경우 해당 필드에 넣는다.
                if(roadAddr !== ''){
                    document.getElementById("sample4_extraAddress").value = extraRoadAddr;
                } else {
                    document.getElementById("sample4_extraAddress").value = '';
                }

                var guideTextBox = document.getElementById("guide");
                // 사용자가 '선택 안함'을 클릭한 경우, 예상 주소라는 표시를 해준다.
                if(data.autoRoadAddress) {
                    var expRoadAddr = data.autoRoadAddress + extraRoadAddr;
                    guideTextBox.innerHTML = '(예상 도로명 주소 : ' + expRoadAddr + ')';
                    guideTextBox.style.display = 'block';

                } else if(data.autoJibunAddress) {
                    var expJibunAddr = data.autoJibunAddress;
                    guideTextBox.innerHTML = '(예상 지번 주소 : ' + expJibunAddr + ')';
                    guideTextBox.style.display = 'block';
                } else {
                    guideTextBox.innerHTML = '';
                    guideTextBox.style.display = 'none';
                }
            }
        }).open();
    }
</script>

이렇게 코드를 알아서 쫙 준다.

 

프로젝트 VIew 템플릿에 test.html을 만들어주고 복붙해서 돌려본다.

우편번호, 도로명주소, 지번주소, 상세주소, 참고항목 등의 값을 받을 수 있다.

 

이 중에서 나는 도로명주소만 필요하다.

<div class="form-floating">
      <input th:type="text" onclick="sample4_execDaumPostcode()" id="sample4_roadAddress" th:field="*{userAddr}" th:errorclass="field-error" th:class="form-control" placeholder="주소">
      <label for="sample4_roadAddress" th:text="#{label.userVo.userAddr}">주소</label>
      <div th:class="field-error" th:errors="*{userAddr}">주소 오류</div>
</div>

샘플에 들어있는 도로명주소 input 태그에서 id를 똑 뗴와서 내가 만들어둔 템플릿에 이식해주었다.

 

버튼 태그는 삭제하고 onclick=”sample4_execDaumPostcode()” 을 주소 input태그에 넣어줘서 주소를 입력하려고 클릭하면 팝업이 뜨도록 설정해 주었다.

 

<input type="hidden" id="sample4_postcode" placeholder="우편번호">
<input type="button" onclick="sample4_execDaumPostcode()" value="우편번호 찾기"><br>
<input type="hidden" id="sample4_jibunAddress" placeholder="지번주소">
<span id="guide" style="color:#999;display:none"></span>
<input type="hidden" id="sample4_detailAddress" placeholder="상세주소">
<input type="hidden" id="sample4_extraAddress" placeholder="참고항목">

그외 다른 입력칸은 필요가 없어서 일단 hidden 태그로 안 보이게만 설정을 해 뒀다.

 

나중에 리팩토링이 필요한 이유가 이거다. 일단 기능이 돌아가게 만들고 추후에 리팩토링 태그를 붙여둔 곳의 코드를 다듬어 줄 예정이다.

 

이후 값을 넣고 잘 들어오나 테스트를 해보니 정상적으로 값도 잘 받아지고 DB에도 잘 들어가는 것을 확인할 수 있었다.

 

https://ohju96.notion.site/API-f69dc0c693814eeebbfaeeb7cb1f5c63

 

카카오 주소🏠 찾기 API

먼저, 카카오 주소 찾기 API를 제공하는 페이지에 접속한다.

ohju96.notion.site

 

반응형

댓글