티스토리 뷰
FCM 이란?
Firebase Cloud Messaging 의 줄임말로, 메시징 기능을 클라우드 서버에서 제공해주는 구글의 서비스이다.
개요
프로젝트를 하는 도중에 FCM 을 사용해 볼 수 있는 기회가 생겼다. 용도는 특정 알림 기능을 모바일 단말에 푸시로 전달하는 것이었다. 기존에 구현되어 있는 기능이었으나, 최근에 FCM Legacy API 가 만료됨에 따라 V1 으로 마이그레이션하는 작업을 하게 되었다.
FCM 동작 플로우
프로젝트 생성
먼저 FCM 은 위에서 언급한대로 클라우드 서버에서 기능을 제공하기 때문에, 어떤 프로젝트 하위에서 푸시를 주고받을 건지 정해야 한다. 그래서 프로젝트를 생성하면 아래와 같은 페이지로 관리가 가능하다:
관리자 페이지는 프로젝트별로 생성이 되고, 프로젝트 정보는 아래 항목들을 포함한다:
- 프로젝트 이름
- 프로젝트 ID
- 프로젝트 번호
- Web API 키
private key 생성
이후 좌측 네비게이션 바에 있는 Project Overview 항목 오른쪽의 톱니바퀴를 누르면, Project settings 메뉴를 확인할 수 있다. Service accounts 탭에 Generate new private key 버튼을 누르면 FCM 을 사용하기 위한 인증에 필요한 key 를 생성할 수 있다.
단말 토큰 생성
private key 가 푸시 자체를 보내기 위한 인증에 필요하다면, 각 단말이 FCM 을 사용하는지 여부는 단말 토큰을 통해 인증하게 된다. 이 토큰은 각 단말을 분별하는 데에 사용된다. 최초에 앱을 설치할 때 생성되며, 나의 경우 RDB 에 저장해두고 관리하고 있었다.
Spring 에서 FCM 활용하기
의존성 라이브러리 추가
다른 모든 기능과 마찬가지로, 빌드 시에 관련 라이브러리에 대한 의존성을 갖고 있어야 Spring 어플리케이션 내에서 FCM 을 사용할 수 있다. 아래는 Maven 으로 빌드된 프로젝트에서 의존성을 추가하는 방법이다:
<dependency>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-admin</artifactId>
<version>9.3.0</version>
</dependency>
firebase-admin 은 SDK 형태로 만들어져서 코드로 구현 시 FCM 의 기능들을 편리하게 사용할 수 있게 도와준다.
아래는 firebase-admin 라이브러리를 활용한 코드의 예시이다:
package framework.config;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import javax.annotation.PostConstruct;
import java.io.FileInputStream;
import java.io.IOException;
/**
* @deprecated Firebase Admin SDK 방식은 아직 적용되지 않았으므로
* 우선은 {@link api.presence.bo.service.PushNotificationServiceImpl} 활욯.
*/
@Deprecated
@Configuration
public class FirebaseConfig {
@Value("#{config['firebase.admin.sdk.key.name']}")
private String FIREBASE_KEY_NAME;
@PostConstruct
public void initFirebase() throws IOException {
Resource resource = new ClassPathResource("/" + FIREBASE_KEY_NAME);
FileInputStream stream = new FileInputStream(resource.getFile());;
try {
GoogleCredentials googleCredentials = GoogleCredentials.fromStream(stream);
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(googleCredentials)
.build();
FirebaseApp.initializeApp(options);
} catch (Exception e) {
e.printStackTrace();
} finally {
stream.close();
}
}
}
위와 같이, 단순히 클래스들을 import 하여 연관된 메서드들을 호출하는 것만으로도 FCM 사용이 가능하다.
다음 글에서는 이렇게 세팅된 FCM 을 통해 구체적으로 어떻게 푸시 메시지를 주고 받을 수 있는지 알아보겠다.
'Project' 카테고리의 다른 글
Kafka 메시지 브로커 활용기 - 1 (1) | 2024.12.03 |
---|---|
레디스 활용기 - 2 (1) | 2024.07.08 |
레디스 활용기 - 1 (1) | 2024.05.28 |
@@sql_mode 변경 방법 (0) | 2024.05.23 |
plugin org.asciidoctor.convert was not found 에러 해결 (0) | 2023.05.05 |
- Total
- Today
- Yesterday
- N+1
- 역직렬화
- ci/cd
- 알고리즘
- Firebase
- 코테
- Spring Boot
- google cloud
- json web token
- FCM
- @RequestBody
- 가상 서버
- Java Data Types
- docker
- DeSerialization
- 실시간데이터
- LazyInitializationException
- 프로그래머스
- JPA
- 지연 로딩
- JPQL
- gitlab
- DTO
- 깃랩
- 인증/인가
- JOIN FETCH
- 도커
- 기지국 설치
- spring
- Jackson
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |