FCM ๊ธฐ๋ฐ ํตํฉ ์๋ฆผ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ์ ํตํ ํํธํ๋ ๋ชจ๋ํฐ๋ง ํ๊ฒฝ ํตํฉ
๐ Why I built my own push notification tool for CI/CD and Home Assistant
AI ์์ฝ
Context
Home Assistant ๋ฐ CI/CD ํด์ ์๋ฆผ ํ์คํ ๋ฆฌ ๋ถ์ฌ์ ๋จ์ ํ ์คํธ ์ค์ฌ์ ์๋ฆผ ์ ์ฝ์ผ๋ก ์ธํ ๊ฐ์์ฑ ์ ํ ๋ฐ์. ๊ธฐ์กด Chat App ํ์ฉ ๋ฐฉ์์ ํํฐ๋ง ํ๊ณ ๋ฐ ๋ก์ปฌ ์ ์ฅ ๋ฐฉ์ ์ฑ์ ๋ฐ์ดํฐ ํ๋ฐ์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์ ์ฉ ์๋ฆผ ์ธํ๋ผ ํ์์ฑ ๋๋.
Technical Solution
- Node.js ๋ฐ TypeScript ๊ธฐ๋ฐ Monolith ์ํคํ ์ฒ ์ค๊ณ๋ฅผ ํตํ API ํตํฉ ๊ด๋ฆฌ ๋ฐ ๊ฐ๋ฐ ํจ์จ์ฑ ํ๋ณด
- FCM(Firebase Cloud Messaging) ๋์ ์ ํตํ Android ๋๋ฐ์ด์ค ๋์ ์ค์๊ฐ Push Notification ์ ์ก ์ฒด๊ณ ๊ตฌ์ถ
- PlanetScale MySQL ํ์ฉ์ผ๋ก ์๋ฆผ ์ด๋ ฅ์ Persistent Storage ๊ตฌํ ๋ฐ ๋๋ฐ์ด์ค ๊ฐ ๋ฐ์ดํฐ ๋๊ธฐํ ๋ณด์ฅ
- Dot Notation ๊ธฐ๋ฐ์ JSON Parsing ๋ก์ง์ ๊ตฌํํ์ฌ ์ธ๋ถ Webhook ๋ฐ์ดํฐ์ ๋์ ์ถ์ถ ๋ฐ ์ปค์คํ ํฌ๋งทํ ์ง์
- Kotlin Compose ๊ธฐ๋ฐ ํด๋ผ์ด์ธํธ ๊ตฌํ์ ํตํด Rich Media(Image, Video, GIF) ๋ ๋๋ง ๋ฐ ์นดํ ๊ณ ๋ฆฌ๋ณ ํํฐ๋ง UI ์ ๊ณต
- Vercel ๊ธฐ๋ฐ Web Dashboard ๊ตฌ์ถ์ ํตํ ์ฌ์ฉ์ ์จ๋ณด๋ฉ ํ๋ก์ธ์ค ๊ฐ์ ๋ฐ API ์ค์ ์ธํฐํ์ด์ค ์ ๊ณต
์ค์ฒ ํฌ์ธํธ
- ์๋ฆผ ์๋น์ค ์ค๊ณ ์ ๋จ์ ์ ์ก์ ๋์ด ๊ฒ์ ๊ฐ๋ฅํ Persistent History ์ ๊ณต ์ฌ๋ถ ๊ฒํ - ์ธ๋ถ ์๋น์ค ์ฐ๋์ ์ํ Webhook ์์ ์, Dot Notation ๋ฑ์ ํ์ฉํ ์ ์ฐํ ๋ฐ์ดํฐ ๋งคํ ๊ตฌ์กฐ ์ค๊ณ - ์ด๊ธฐ MVP ๋จ๊ณ์์ ์ฌ์ฉ์ ์ง์ ์ฅ๋ฒฝ์ ๋ฎ์ถ๊ธฐ ์ํ Web-based ์ค์ ์ธํฐํ์ด์ค ์ฐ์ ๊ตฌ์ถ ๊ณ ๋ ค