FCM 푸시 알림 연동기 (2) – 백엔드(Backend) 전송 로직

지난 글에서 플러터 앱에서 토큰을 발급받아 서버로 던지는 것까지 처리했다. 이제 백엔드(Spring Boot)가 바통을 이어받을 차례다. “그냥 라이브러리 쓰고 매세지 보내면 끝 아닌가?” 라고 생각했지만, 막상 해보니 채팅 알림과 일반 알림을 구분해야 하고, 유저가 알림을 껐는지 체크하는 등 신경 쓸 로직이 꽤 있었다. 오늘은 FCM 초기화부터 실제 전송, 그리고 알림 설정 처리까지의 과정을 정리해본다. 1. Firebase 초기화 … 더 읽기

FCM 푸시 알림 연동기 (1) – 앱(Frontend) 설정 및 토큰 발급

이번 프로젝트에서 유사 채팅 기능을 구현하면서 푸시 알림(FCM)은 피할 수 없는 산이었다. 보통 개발 블로그들을 보면 프론트와 백엔드가 섞여 있어서 막상 적용하려니 헷갈리는 경우가 많았다. 그래서 이번 구현 과정은 앱(Frontend)과 서버(Backend) 설정으로 나누어 정리해두려 한다. 오늘은 그 첫 번째, 플러터 앱에서의 설정과 토큰 관리 이야기다. 1. 상황 채팅 앱인데 알림이 안 오면 시체다. 단순히 “구글링해서 나온 코드 복붙”으로 끝날 … 더 읽기

소셜 프로필 설정 (Flutter + GetX, Bonus+email 인증)

지난 글에서 소셜 로그인으로 사용자 인증까지 마쳤다. 하지만 우리 서비스(Tennis GG)에 필요한 건 ‘이메일’ 하나가 아니다. 테니스 실력(NTRP), 구력, 닉네임… 받아야 할 게 몇가지가 있다. 로그인 직후, 사용자를 붙잡아두고 자연스럽게 정보를 입력받는 과정(Onboarding Flow)을 어떻게 구현했는지 정리해본다. 먼저, 완성된 화면부터 보여드리겠습니다. 왜 이 글을 쓰게 되었는지 처음엔 그냥 긴 Form 하나 던져주고 “입력하세요” 할까 했다. 근데 나부터가 … 더 읽기

Flutter 소셜 로그인 (카카오/애플) 개발기

지난 백엔드 편에 이어, 이번에는 Flutter 앱 클라이언트에서 소셜 로그인을 붙이는 과정을 정리한다. 백엔드에서 아무리 잘 받아줘도, 클라이언트에서 토큰을 못 던져주면 말짱 도루묵이니까. 일단 결과물부터 보여드리면, 화면은 이런식으로 만들었고, 카톡 로그인 성공 시, 데이터 베이스에는 오른쪽과 같이 암호화된 임시 계정이 저장되었다. 왜 이 글을 쓰게 되었는지 소셜 로그인 라이브러리 kakao_flutter_sdk랑 sign_in_with_apple 가져다 쓰면 끝 아닌가? 싶었다. 그런데 막상 해보니 “카카오톡 … 더 읽기

카카오 & 애플 소셜 로그인 구현 삽질기 (Spring Boot + OAuth2)

이번에는 소셜[카카오(Kakao)와 애플(Apple)] 로그인을 실제로 구현하면서 겪은 과정들을 정리해본다. 왜 이 글을 쓰게 되었는지 사실 카카오 로그인만 붙이면 참 편했을 거다. 한국에서는 국민 앱이니까. 하지만 Apple App Store 심사 지침(Guideline 4.8)이 발목을 잡았다. 타사 소셜 로그인(구글, 카카오 등)을 쓰려면 반드시 ‘Sign in with Apple’도 같이 넣어야 한다는 조항 때문이다. 결국 울며 겨자 먹기로 두 가지를 다 구현하게 되었는데, … 더 읽기

AI 기반 테니스 플랫폼 TENNIS.GG 개발 로드맵: Flutter와 Antigravity의 만남

약 3년여간 테니스를 즐겨 치고 있습니다. 단순히 취미로 즐기던 저였지만 새로운 도전을 해보려고 합니다. 최근 직관했던 ‘현대 슈퍼매치’에서 알카라스와 시너의 박진감 넘치는 경기와 수많은 테니스 팬의 열기를 현장에서 직접 느끼며, 우리나라 테니스 커뮤니티와 인프라가 얼마나 빠르게 성장하고 있는지 실감했습니다. 하지만 동시에 동호인으로서 겪어온 불편함들도 떠올랐습니다. 완전 무료의 테니스 매칭앱이 없을까 라는 의문이 생겼고, 개발자로서의 한번 … 더 읽기

챗GPT 1년 구독 해지하고 Gemini로 갈아탄 이유 (feat. 클로드찍먹)

거의 1년 동안 내 통장에서 매달 22달러씩 꼬박꼬박 가져가던 챗GPT(ChatGPT) 플러스 구독을 해지했다. 꽤 오랜 기간 내 코딩 파트너였지만, 최근 개발 환경을 Antigravity 중심으로 개편하면서 “굳이 두 개를 다 써야 하나?”라는 의문이 들었기 때문이다. 결론부터 말하면 나는 Gemini (1년 구독) 로 환승했다. 소문 자자한 Claude는 잠시 찍먹해보다가 살벌한 사용량 제한에 혀를 내두르고 포기했는데, 그 의식의 흐름을 남겨본다. 1. 챗GPT에서 Gemini로 … 더 읽기

Antigravity 및 Gemini CLI 설치와 시행착오(PowerShell 보안 이슈 해결)

맨날 다트(Dart)랑 위젯 트리만 쳐다보다가, 이번에 들어가는 신규 프로젝트에서는 좀 다른 시도를 해보기로 했다. 바로 “개발 환경 자체를 AI-Native하게 바꿔보는 것”. 솔직히 코딩하다가 브라우저 켜서 ChatGPT한테 물어보고, 다시 안드로이드 스튜디오 돌아오고… 이 ‘컨텍스트 스위칭’ 비용이 너무 아깝다는 생각이 들었다. 터미널(Terminal)에서 리눅스 명령어 치듯이 AI랑 대화할 수 있다면? 그래서 구글의 Antigravity 프로젝트를 내 로컬 환경에 심어보기로 … 더 읽기