NCloud

[NCP] GeoLocation 사용

ungyuun 2023. 11. 26. 23:49

 

프로젝트에 위치기반 서비스를 위해 네이버의 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 정보를 토대로 위치정보 서비스를 하여 다음 포스트에 작성해보겠다.