반응형
서론
- 사내 클라우드 서비스 모니터링 관련 프로젝트를 시작하게 되면서 Naver / KT / AWS 클라우드를 연동하게 되었다.
- 대중적인 AWS와는 달리 네이버와 KT는 예시 코드가 부족하여 직접 삽질하면서 얻은 결과물을 정리해야겠다고 판단하여 작성하게 되었다.
API 연동
- api 연동은 Rest API와 네이버 클라우드 공식 가이드를 참고하여 진행했다.
- 기본적인 signature 만드는 방식에 대해서는 가이드 문서에 자세하게 설명되어 있으니 가이드 문서 참고!
- Java 예시 코드
@Autowired protected RestTemplate restTemplate; /** * ncloud 서버 리스트를 조회한다. * * @return Map<String, String> * @author Cheoljin * @create-date : 2021. 8. 5. */ @SuppressWarnings({ "unchecked", "rawtypes" }) public String getServerList() throws Exception { // "/server/v2/getServerInstanceList" final String uri = OpenApiUtils.getNaverOpenApiUrl(OpenApiUrls.GET_NAVER_SERVER_INSTANCE_LIST); // openApiHost = "https://ncloud.apigw.ntruss.com" Map<String, Object> result = restTemplate.exchange(openApiHost + uri, HttpMethod.GET, new HttpEntity(getNcloudUserApiHeader(HttpMethod.GET, uri)), Map.class).getBody(); } /** * HTTP 요청 헤더 (ncloud api 요청 시 헤더에 작성 필요) * * @param HttpMethod * @param String * @return HttpHeaders * @author Cheoljin * @create-date : 2021. 8. 5. */ private HttpHeaders getNcloudUserApiHeader(HttpMethod method, String url) { try { MediaType mediaType = new MediaType("application", "json", Charset.forName("UTF-8")); String timeStamp = String.valueOf(System.currentTimeMillis()); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.add(OpenApiHeader.X_NCP_APIGW_TIMESTAMP, timeStamp); httpHeaders.add(OpenApiHeader.X_NCP_IAM_ACCESS_KEY, accessKey); httpHeaders.add(OpenApiHeader.X_NCP_APIGW_SIGNATURE, makeSignature(timeStamp, method.name(), url)); httpHeaders.setContentType(mediaType); return httpHeaders; } catch (Exception ex) { return null; } } /** * 인증서 작성 * * @param String : 현재 시간 * @param String : http 메서드 * @param String : url 정보 * @return String * @author Cheoljin * @create-date : 2021. 8. 5. */ private String makeSignature(String timeStamp, String method, String url) throws Exception { String message = new StringBuilder() .append(method) .append(" ") .append(url) .append("\n") .append(timeStamp) .append("\n") .append(accessKey) .toString(); SecretKeySpec signingKey = new SecretKeySpec(secretKey.getBytes("UTF-8"), "HmacSHA256"); Mac mac = Mac.getInstance("HmacSHA256"); mac.init(signingKey); byte[] rawHmac = mac.doFinal(message.getBytes("UTF-8")); String encodeBase64String = Base64.encodeBase64String(rawHmac); return encodeBase64String; };
SDK 연동
- SDK 연동은 요즘 Java를 통해 클라우드 연동을 진행하는 곳에서 스프링을 쓰지 않을 이유는 없을테니 메이븐을 기반으로 진행했다.
- 우선 Naver Cloud 플랫폼에서는 js / python / java / go 등의 언어를 지원한다.
- 해당 리파지토리를 로컬에 체크아웃하고(모른다면, 블로그의 깃허브 카테고리 참고), 다운 받은 로컬 프로젝트 경로에서 /services/server 로 이동하고, CLI를 켠다.
- CLI에서 mvn install 명령어를 입려하면, 자동으로 메이븐 디펜던시가 있는 경로(.m2)에 생성이 돼있다.
- 생성된 것을 확인하고, 스프링의 pom.xml 디펜던시에 다음과 같이 추가한다.
<dependency> <groupId>com.ncloud</groupId> <artifactId>server</artifactId> <version>1.1.1</version> </dependency>
- 이후 사용 방법은 깃허브 Readme 참고!
반응형
LIST