JAVA (SPRING)

[JAVA] 카카오 알림톡 API 구현 (Ncloud 환경)

박현국 2025. 4. 15. 20:56

 

알림톡 플로우

1. 카카오 비즈니스 계정 / 채널 등록.
2. 템플릿 등록
3. Ncloud 알림 서비스 설정 (서비스아이디, accessKey, secretKey, plusfriendId)
4. 서버에서 알림톡 발송 API 호출
5. 응답 처리 & 실패 대비

알림톡 API

https://api.ncloud-docs.com/docs/ko/ai-application-service-sens-alimtalkv2

 

알림톡 API

 

api.ncloud-docs.com

해당 링크에서 알림톡에 필요한 오픈 API 가 있는데, 필자는 해당 가이드 참고하여 개발하였음.

 

 

먼저 개발하기 위한 조건이 있다.

위의 알림톡 플로우에 3번까지는 되어있어야 알림톡을 발송할 수 있다.

 

 

그리고 해당 API 가이드 문서가 많아 보이지만, 실제로 개발해보면 공통적인 요소들 즉, HtttpHeader 값이나, 전체적인 구조들이 상당히 비슷하다. 

 

 

구현 과정

1. Ncloud API 에 나와있는 암호화 encoding 코드 가져오기

  • Ncloud 에서 발급받은 secretKey 를 HmacSHA256 방식으로 signature 을 만들고(HMAC 알고리즘 키를 만든다) , Base64 로 인코딩 하는 작업을 한다. 

해당 메서드는 알림톡 API 요청 시 signature 헤더로 사용된다.

// Ncloud API 참조
private String makeSignature(String method, String requestUri, String timestamp, String accessKey, String secretKey ) throws NoSuchAlgorithmException, InvalidKeyException {
    String space=" ";
    String newLine = "\n";
    String message = method + space + requestUri + newLine + timestamp + newLine + accessKey;

    SecretKeySpec signingKey = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8),"HmacSHA256");
    Mac mac = Mac.getInstance("HmacSHA256");
    mac.init(signingKey);
    byte[] rawHmac = mac.doFinal(message.getBytes(StandardCharsets.UTF_8));
    return Base64.getEncoder().encodeToString(rawHmac);
}

 

 

 

2. apiUri 및 HttpHeader 설정

  • apiUri 는 각각 사용하고자 하는 API 가이드에 맞게 사용하면 된다.
  • api 가이드에 맞는 헤더를 보내준다.
// http 헤더
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("x-ncp-apigw-timestamp", timestamp);
headers.set("x-ncp-iam-access-key", ACCESS_KEY);
headers.set("x-ncp-apigw-signature-v2", signature);

 

3. restTemplate 을 통한 요청

  • apiuri 는 내가 사용하고자 하는 api
  • method 는 httpMethod 인지
  • httprequest 는 앞서 설정한 httpheader
  • CParam.class 는 서버로부터 올 응답을 어떤 타입의 데이터로 받을건지 
HttpEntity<CParam> entity = restTemplate.exchange(apiUri, method, httpRequest, CParam.class);

 

 

4. 실제 템플릿에 맞게 요청 해보기 (성공했다면 이런 식으로 옴)