EXCEL - VBA

VBA - vworld 사이트에서 토지 특성 조회(6) : 디버깅

별동산 2025. 3. 17. 08:17
반응형

1. 법정동코드 가져오는 URL 확인

가. 지역 창은 실패

사이트에 접속해서 정보를 가져오는 것이므로 URL이 제대로 됐는지가 제일 중요합니다.

 

        ' 법정동 코드 조회 검색 URL 만들기(domain 지정안해도 됨)
        base_url = "https://api.vworld.kr/req/address"
        params = "?service=address&request=getcoord&version=2.0&crs=epsg:4326"
        params = params & "&address=" & WorksheetFunction.EncodeURL(dong & " " & jibun)
        params = params & "&refine=true&simple=false&format=xml&type=parcel"
        params = params & "&key=CEB52025-E065-364C-9DBA-44880E3B02B8"
        
        
        ' search_url을 base_url과 params의 결합으로 지정
        search_url = base_url & params

 

맨 아래 줄에서 base_url과 params를 &(결합) 연산자로 연결하여 search_url을 만들므로

 

위 화면과 같이 search_url 다음 value 줄의 왼쪽 기둥을 클릭하여 중단점을 설정하고,

F5키 또는 아래 화면의 실행 아이폰을 눌러 실행하면 

 

아래와 같이 중단점에서 실행을 멈추게 됩니다.

 

이때 지역 창을 보면 각종 변수들의 이름과 값, 그리고 형식이 표시됩니다. 이때 지역 창이 보이지 않으면 보기에서 지역 창을 누르면 됩니다.

 

위 화면 중간을 보면 search_url의 값이 보이는데, 오른쪽이 잘려서 잘 보이지 않습니다.

이 때 마우스 오른쪽 버튼을 누른 후  값을 복사하면

 

search_url 값이 아래와 같이 보이는데,

: search_url : "https://api.vworld.kr/req/address?service=address&request=getcoord&version=2.0&crs=epsg:4326&address=%EC%84%9C%EC%9A%B8%ED%8A%B9%EB%B3%84%EC%8B%9C%20%EC%A2%85%EB%A1%9C%EA%B5%AC%20%"

 

search_url : "과 마지막 "을 제외한 파란색으로 표시된 URL을 복사한 후 크롬 창의 주소 입력 줄에 붙여 넣고 엔터 키를 누르면 아래와 같이 "필수 파라미터인 key가 없어서 요청을 처리할 수 없습니다."란 에러 메시지가 표시됩니다.

 

그래서 코드를 살펴보니 아래 2줄에 해당하는 refine, simple, format, key 값이 모두 없습니다.

params = params & "&refine=true&simple=false&format=xml&type=parcel"
params = params & "&key=CEB52025-E065-364C-9DBA-44880E3B02B8"

 

더 자세히 보니 주소도 일부 잘렸습니다.

 

나. 직접 실행 창에서 확인 성공

이제 직접 실행 창에

? search_url

이라고 입력하고 엔터 키를 누르면 마찬가지로 오른쪽이 안 보이지만

 

https부터 마우스로 끈 후 아래로 내려서

 

URL을 모두 선택한 후 복사하고, 크롬의 URL 입력 줄에 붙여 넣고 실행하면 값이 잘 표시됩니다.

 

복사된 URL은 아래와 같습니다.

https://api.vworld.kr/req/address?service=address&request=getcoord&version=2.0&crs=epsg:4326&address=%EC%84%9C%EC%9A%B8%ED%8A%B9%EB%B3%84%EC%8B%9C%20%EC%A2%85%EB%A1%9C%EA%B5%AC%20%EC%B2%AD%EC%9A%B4%EB%8F%99%201-1&refine=true&simple=false&format=xml&type=parcel&key=CEB52025-E065-364C-9DBA-44880E3B02B8

다. 변수에 커서 올려놓기

WorksheetFunction.EncodeURL 함수를 제거하고, 실행한 후 search_url을 확인하면

아래와 같이 주소가 한글 그대로 표시되고, "서울특별시 종로구 청운동 1-1"과 같이 중간에 공백이 들어가 있습니다.

https://api.vworld.kr/req/address?service=address&request=getcoord&version=2.0&crs=epsg:4326&address=서울특별시 종로구 청운동 1-1&refine=true&simple=false&format=xml&type=parcel&key=CEB52025-E065-364C-9DBA-44880E3B02B8

 

위 주소를 복사한 후 주소 입력 줄에 붙여 넣고 실행하면 크롬에서는 문제가 없는데,

 

If pnu = "" then 왼쪽 기둥에 중단점을 설정한 후 F5키를 눌러 실행을 멈추게 하고, pnu에 마우스 커서를 올려놓으면 pnu 값이 보이는데, ""로 빈칸으로 표시됩니다.

 

크롬에 붙여 넣어서 실행하는 것과 VBA에서 실행하는 결과가 다르다는 것을 알 수 있습니다.

 

라. 재설정(실행 중지)

이제 표준 도구모임에서 재설정 아이콘을 눌러 실행을 멈춘 후 

 

원래대로 WorksheetFunction.EncodeURL 함수를 dong과 jibun 앞에 추가한 후 다시 실행하면

pnu 값이 '1111010100100010001'로 잘 구해집니다.

 

2. 토지특성속성 구하기

아래와 같이 search_url을 만든 후 xmlHttp로 토지특성속성 중 면적, 기준연도, 공시지가를 구하면 value 배열에 저장되는데,

 

지역창을 보면 value변수가 있는데, 왼쪽에 +표시가 있고, 오른쪽 형식을 보면 Variant 형태로 0부터 2까지 요소가 3개인 것을 알 수 있습니다.

 

value의 왼쪽 +를 누르면 값 3개가 보이는데, 모두 String 문자열입니다.

 

3. 토지특성속성 셀에 입력하기

F5키를 눌러 매크로를 모두 실행한 후 파일 - '닫고 Excel로 돌아가기' 메뉴를 눌러 워크시트로 돌아가서

        ' 검색 결과 표시
        ' 주소 표시
        ws.Cells(i, 3) = dong & " " & jibun
        
        ' 면적
        ws.Cells(i, 4) = value(0)
        
        ' 개별 공시지가 기준연도
        ws.Cells(i, 5) = value(1)
        
        ' 개별 공시지가
        ws.Cells(i, 6) = value(2)

 

확인하면 D열부터 F열까지의 값이 문자가 아니라 숫자로 입력되어 있습니다.

문자라면 왼쪽 정렬이 돼야 하는데, 오른쪽 정렬된 것은 숫자라는 것입니다.

 

D2셀에서 F2키를 누른 후 '(작은따옴표)를 입력하고 엔터 키를 누르면

왼쪽 정렬이 되고

 

아래는 숫자이기 때문에 "이상하다"고 왼쪽 위 모서리에 녹색 점과 경고 아이콘이 표시되고, '이 셀의 숫자는 텍스트로 서식이 지정되었거나 아포스트로키가 앞에 옵니다.'라고 설명해 줍니다.

 

이상 간단하게 디버깅하는 방법을 알아봤습니다.

반응형