Ktor를 사용해 FCM 알림 서버를 구축했다. Ktor 3버전으로 마이그레이션하면서 겪은 라이브러리 충돌 이슈와 해결 과정을 공유한다. 불필요한 삽질을 줄이고 싶은 분들에게 도움이 되길 바란다.
Ktor 3 버전이상을 사용한다면 Koin 설정이 핵심이다. 기존 koin-ktor를 사용하면 런타임 에러가 발생하므로 반드시 koin-ktor3를 사용해야 한다.
[versions]
ktor = "3.3.3"
koin = "4.1.0-Beta8"
[libraries]
# Ktor 3 대응을 위한 전용 라이브러리 사용
koin-ktor = { module = "io.insert-koin:koin-ktor3", version.ref = "koin" }
CallLogging 플러그인을 분리해서 설치하다가 발생한 에러다. Ktor는 동일한 플러그인의 중복 설치를 허용하지 않는다.
install(CallLogging) 블록 하나에 level, format, callIdMdc 설정을 모두 통합했다.서버 실행 시 RoutingKt 클래스를 찾지 못하는 문제가 발생했다. 이는 Ktor 3와 Koin 버전 간의 호환성 문제였다.
koin-ktor3로 라이브러리를 교체하여 즉시 해결했다.유지보수와 확장성을 고려해 Domain, Data, Presentation 계층을 분리했다.
계층 분리를 통해 코드가 명확해지고 테스트가 용이해졌다.
실제 테스트를 통해 확인한 두 방식의 차이점이다.
참고: Topic 전송 시 클라이언트가 해당 주제를 미리 구독하고 있어야 하며, 서버와 주제 이름을 정확히 일치시켜야 한다.

FCM 서버 구축 시 messageId가 정상적으로 반환된다면 백엔드 로직은 성공이다.
그럼에도 기기에 알림이 오지 않는다면 앱의 권한 설정이나 토픽 구독 여부를 확인해보면 된다.