본문 바로가기
NCloud

[NCP] GeoLocation 사용

by ungyuun 2023. 11. 26.

 

프로젝트에 위치기반 서비스를 위해 네이버의 GeoLocation 서비스를 사용하려고 한다. 

본인의 공인아이피를 입력하여 위치정보를 응답받을수 있다. 나는 행정동 정보, 위도, 경도가 필요했다.

GeoLocation 사용 방법이 공식 사이트에 잘 정리 돼 있다.

 

public void run(final String ip) throws Exception {
    final String requestMethod = "GET";
    final String hostName = "https://geolocation.apigw.ntruss.com";
    final String requestUrl= "/geolocation/v2/geoLocation";

    final Map<String, List<String>> requestParameters = new HashMap<String, List<String>>();
    requestParameters.put("ip", Arrays.asList(ip));
    requestParameters.put("ext", Arrays.asList("t"));
    requestParameters.put("responseFormatType", Arrays.asList("json"));

    SortedMap<String, SortedSet<String>> parameters = convertTypeToSortedMap(requestParameters);

    String timestamp = generateTimestamp();
    System.out.println("timestamp: " + timestamp);

    String baseString = requestUrl + "?" + getRequestQueryString(parameters);
    System.out.println("baseString : " + baseString);

    String signature = makeSignature(requestMethod, baseString, timestamp, accessKey, secretKey);
    System.out.println("signature : " + signature);

    final String requestFullUrl = hostName + baseString;
    final HttpGet request = new HttpGet(requestFullUrl);
    request.setHeader("x-ncp-apigw-timestamp",timestamp);
    request.setHeader("x-ncp-iam-access-key",accessKey);
    request.setHeader("x-ncp-apigw-signature-v2",signature);

    final CloseableHttpResponse response;
    response = httpClient.execute(request);

    final String msg = getResponse(response);
    System.out.println(msg);
}

 

헤더 요청에 타임스탬프와 Access Key ID , Access Key ID 값과 Secret Key로 암호화한 서명인 signature를 작성하여 GET 요청한다. 다음과 같은 JSON응답이 나온다.

 

{
	"returnCode": 0,
        "requestId": "16248f0d-07ae-4a0f-847a-65c12a4faa0f",
        "geoLocation":{
            "country": "KR",
            "code": "1162010100",
            "r1": "서울특별시",
            "r2": "관악구",
            "r3": "봉천동",
            "lat": 37.477962,
            "long": 126.95346,
            "net": "Korea Telecom"
        }
}

 

이 geoLocation 정보를 토대로 위치정보 서비스를 하여 다음 포스트에 작성해보겠다.