11월 7일 연구일지(FCM, Spring Boot환경에서 Http 통신)

Posted by , November 08, 2017
TIL
Series ofTIL

주의

이 문건은 과거 Hexo 블로그 (2017-11-08) 에서 이동된 문서입니다.

시간이 지남에 따라 최신 기술과 다를 수 있으니 주의 바랍니다.


thumbnail


오늘의 주제

근무하는 회사에서 Android 앱 개발과 앱에서 사용하는 데이터를 위해 서버에서 Rest api 부분을 개발하였습니다.

또한 알림 부분도 구현을 해야 해서 FCM을 사용하였습니다.

근데 Android에서 FCM을 사용하면 토큰을 생성하여 서버에 전달을 하게 되는데,
이 토큰이 갱신이 되거나 새로운 기기에서 설치 시 토큰의 유효성을 검사해야 했었습니다.

모두 공개하기는 힘들지만 서버에 클라이언트의 FCM토큰을 받아서 저장을 하는데,
만약 유효하지 않은 토큰까지 계속 저장할 경우 향후에 문제가 될 것 같았습니다.

그래서 FCM 토큰의 유효성을 체크하는 것을 알아봤고, 두 가지 주제에 대해 포스팅해보고자 합니다.

1. FCM 토큰 유효성 검사
2. Spring에서 Http Request

그리고 주제를 통해 달성할 최종 목표는 스케쥴러를 활용하여 일정시간이 되면 미사용 토큰 제거입니다.


FCM 토큰 유효성 검사

토큰 유효성은 이곳에서 참고했습니다.

이 부분은 자세하게 포스팅하여 해당 문서와 함께 업데이트 예정입니다.

여기서 토큰을 전달하여 유효성을 체크하는 부분은 방법이 생겼습니다.

하지만 Spring boot에서 어떤 식으로 Http 통신을 해야 할지가 다음 문제였습니다.


Spring에서 Http 요청

이 주제는 Spring Framework의 RestTemplate를 사용하여 해결하게 되었습니다.

Java에서 Http 통신을 하기 위한 방법은 다양했지만, Spring에서 제공하는 기능을 이용하는게 더 빠를것 같아서 RestTemplate를 사용하게 되었습니다.

참고로 요청 시 Header 정보에 Authorization 정보를 담아야 하는데 이 부분은 아래와 같이 입력해야 됩니다. (Key-value 형식)

"Authorization", "key=[Your api key]"


최종 목표?

스케쥴러를 담당하는 서비스로직에서 쉽게 구현을 하였습니다.

그런데 API를 PostMan 등으로 요청해보면 유효할 경우 Http Ok(200)과 함께 Json 형식으로 정보가 응답됩니다.

하지만 유효하지 않은 토큰일 경우 404가 오고 잘못된 경우 400이 옵니다.

200은 괜찮지만 200이 아닌 400, 404 등의 응답은 try catch로 받아서 처리해야 했습니다.

아래의 코드를 참고해주시길...
(자세한 설명은 향후 포스팅 업데이트에서 다룰 예정입니다.)

try{
    new RestTemplate().exchange(checkUrl+token.getToken(), HttpMethod.GET, new HttpEntity<>(headers), String.class);
} catch (RestClientException e) {
//FCM 토큰이 존재하지 않거나 문제가 있는 경우 -> 삭제
}