패스트캠퍼스 챌린지

패스트캠퍼스 환급 챌린지 38일차 : 9개 도메인 프로젝트로 끝내는 백엔드 웹 개발 (Java/Spring) 초격차 패키지 Online 강의 후기

ssoonearth 2025. 5. 8. 16:30

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://abit.ly/lisbva

 

 

 

 

 

패스트캠퍼스의 '9개 도메인 프로젝트로 끝내는 백엔드 웹 개발 (Java/Spring) 초격차 패키지 Online' 강의 수강 38일차!
오늘은 커뮤니티 피드 서비스의 알림 기능 환경 세팅 작업을 진행하였다.

 

웹 푸시 알림을 구현하기 위해 FCM(Firebase Cloud Messaging)을 사용할 예정이다.

 

프로세스

1. 서버와 클라이언트 모두 설정값 추가

2. 클라이언트 쪽에서 로그인 할 때에 유저의 토큰 값을 firebase에 요청

3. 서버에서는 토큰과 유저 정보를 저장하고, 이후 알림이 필요할 때에 전송

 

firebase console에 접속하여 프로젝트를 생성하였다.

이후, firebase config script 태그를 복사하여 프로젝트의 login.html에 붙여넣었다.

 

메세지을 보내기 위해서는 vapidKey가 필요하기 때문에, 프로젝트 설정 > 클라우드 메세징 > 웹 푸시 인증서에서 vapidKey를 발급받았다.

이후, login.html에 넣어주었다.

 

프론트에서 설정된 키 값을 서버로 전달하면, 서버는 그 값을 통해 파이어베이스에 푸시 요청을 하게 된다.

이런 요청을 위해 서버에서도 프로젝트 설정값을 같이 넣어주어야 한다.

프로젝트 설정 > 서비스 계정에서 새 비공개 키 생성을 누르면 json 파일이 다운로드된다.

 

프로젝트의 resource 하위에 해당 json 파일을 추가하고,

fcm:
  certification: fast-campus-adminsdk.json

sdk값을 읽을 수 있도록, application-yml 파일에 위와 같이 추가하였다.

 

@Slf4j
@Component
public class FcmConfig {

    @Value("${fcm.certification}")
    private String fcmApplicationCredentials;

    @PostConstruct
    public void initialize() throws IOException {
        ClassPathResource resource = new ClassPathResource(fcmApplicationCredentials);

        try (InputStream is = resource.getInputStream()) {
            FirebaseOptions options = FirebaseOptions.builder()
                    .setCredentials(GoogleCredentials.fromStream(is))
                    .build();
            
            if (FirebaseApp.getApps().isEmpty()) {
                FirebaseApp.initializeApp(options);
                log.info("FirebaseApp initialized");
            }
        }
    }

}

스프링부트가 실행될 때에 이니셜라이즈해주는 설정 파일도 추가하였다.

 

 

public record LoginRequestDto(String email, String password, String fcmToken) {
}

LoginRequestDto의 파라미터에 fcmToken값을 추가해주었다.

 

로그인 컨트롤러에 dto.getFcmToken()을 출력하는 코드를 추가한 후에 어플리케이션을 실행하여 로그인을 해보았더니, 토큰값이 잘 받아와지는 것을 확인할 수 있었다.

 

 

 

알림 기능 세팅이라 했을 때 뭔가 복잡하고 어려울 것 같았는데, firebase에서 기능을 간편하게 제공해주어서 쉽게 따라할 수 있었다.