내일배움캠프 flutter 앱개발 9기 과정을 수료하고, 다시 독학의 길로 들어섰다.
캠프에서 코딩 말고도 많은 것들을 보고 들으며 내 미래의 대한 이정표가 더 가파르지만 높은 곳을 향하게 되었다.
AI 시대에서 더욱 진전하기 위해 죽기살기로 노력해야겠다.
최종 프로젝트를 하며, FCM에 대해 학습했다.
이해가 안되면 넘어가지 못 하는 성격 때문일까, 그래도 이거 하나만큼은 완벽하게 이해하게 된 듯 하다.
FCM은 Cloude Message를 의미한다.
FCM 서버에 디바이스의 고유 토큰값(FCM Token)을 기억한 뒤, 해당 디바이스에 메세지를 뿌려주는 역할이다.
FCM의 메세지는 두가지 종류가 있다.
백그라운드나 앱이 종료되어 있을때도 작동하는 백그라운드 메세지와 앱이 켜져있을 때 작동하는 인앱 메세지가 있다.
FCM을 사용하기 위해서는 Xcode, AppstoreDeveloper 설정과 APNs 인증키 등록이 필요하다.
APNs 인증키는 Apple 서버와 FCM 서버 간의 신뢰 관계를 구축하는 토큰 기반의 인증 방식이다.
전에는 P12 인증서를 사용했지만, 보안상의 문제와 관리 관점에서의 편리성을 위해 p8로 변경했다.
기본적인 작동원리는 이와 같다.
하지만, 우리는 앱 자체적인 백단을 가지고 있지 않기 때문에 firebase의 functions 기능을 사용했다.
firestore의 fcm 컬렉션에 새로운 문서가 작성됨과 동시에 FCM을 전송하도록 설정했다.
이벤트를 감지하고 FCM 서버에 요청을 보내는 로직은 백단과 동일하다.
비유로 간단히 요약하자면 다음과 같다.
FCM 서버는 메세지를 전달해주는 우체국(우체부)의 역할을 한다.
클라이언트(앱)과 functions는 편지를 쓰고, 우체국에 전달하는 발신인 역할을 한다.
APNs는 아이폰 사용자를 마지막으로 확인하는 지역 배달소 역할을 하게 된다.
끝으로 인증키는 APNs에 접근할 수 있도록 하는 열쇠 정도라고 할 수 있다.