카카오 페이 데모
프로젝트때 썼던 카카오 페이 코드를 Spring에서 사용할 수 있는 객체를 활용하여 더 사용하기 좋은 코드로 바꿔보자 한다.
원래 프로젝트에서 썼던 inputStream, outputStream으로 값을 보내거나 BufferedReader로 결과 값을 받는 것은 다른 블로그에서 많이 볼 수 있는 방식이었다.
이미 카카오페이기능을 만들어 두었으나 프로젝트 후반에 선생님께서 더 좋은 방식을 가르쳐주셔서 이 방법을 적용해볼려고 한다.
request body
- MultiValueMap 하나의 key에 여러 value값을 넣을 수 있다.
단건결제를 진행할 것 이므로 카카오 페이에서 필수적으로 보내야하는 parameter값을 넣는다.
MultiValueMap<String, String> parameters = new LinckedMultiValueMap<String, String>();
In Spring
request header
- HttpHeaders HTTP 요청 또는 응답 헤더를 나타내는 데이터 구조 MultiValueMap<String, String> 구현 객체 header값 지정시 set(String key, String value)로 key에 header 이름, value에 header value를 넣어 만들었다.
HttpHeaders header = new HttpHeaders();
HTTP request
- HttpEntity 헤더와 바디으로 구성된 HTTP 요청 또는 응답 엔터티를 포함하는 클래스 카카오에 POST방식으로 요청 하므로 값을 요청 바디부에 넣어야 한다.
- MultiValueMap에 전달할 데이터를 넣고
- HttpEntity에 body와 header객체를 전달하여 요청 엔티티를 만든다.
HttpEntity<바디에 들어갈 데이터 제네릭클래스> requestEntity = new HttpEntity<>(바디에 들어갈 데이터객체, HttpHeaders객체);
- RestTemplate
REST API 호출 후 응답을 받는 동기 방식(요청과 응답이 동시에 일어난다.)
(spring framework 5부터 WebClient의 사용을 권장하고 있다. 동기 비동기 방식 둘다 사용가능한 방식)
나의 spring version에는 없어서 일단 RestTemplate을 사용했다.
- postForObject로 요청할 url과 요청엔티티, 응답으로 받을 클래스타입를 입력받아 요청 후 지정한 응답 클래스 타입에 해당하는 객체로 결과값을 받는다.
RestTemplate template = new RestTemplate();
ReadyResponse readyResponse = template.postForObject(url, requestEntity, ReadyResponse.class);
BufferedReader로 값을 받지 않고 사용자 지정객체로 받을 수 있어서 무척 편리한 방법이다. 코드량도 줄어들고!