๐Ÿ”” 41. React Native ์•Œ๋ฆผ ๊ธฐ๋Šฅ ์ •๋ฆฌ โ€” ๋กœ์ปฌ vs ํ‘ธ์‹œ ์•Œ๋ฆผ, ๊ตฌํ˜„ ์ „๋žต๊นŒ์ง€

JM_Devยท2025๋…„ 5์›” 20์ผ
0
post-thumbnail

๋ชจ๋ฐ”์ผ ์•ฑ์—์„œ ์•Œ๋ฆผ(Notification)์€ ํ•„์ˆ˜ ๊ธฐ๋Šฅ์ด๋‹ค.
์œ ์ €์˜ ์ดํƒˆ์„ ์ค„์ด๊ณ , ์•ฑ์œผ๋กœ ๋‹ค์‹œ ๋Œ์•„์˜ค๊ฒŒ ๋งŒ๋“œ๋Š” ํ•ต์‹ฌ UX ์š”์†Œ์ด๊ธฐ๋„ ํ•˜๋‹ค.

React Native์—์„œ ์•Œ๋ฆผ์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค:

  1. ๋กœ์ปฌ ์•Œ๋ฆผ(Local Notification) โ€” ๊ธฐ๊ธฐ ๋‚ด๋ถ€์—์„œ ์Šค์ผ€์ค„๋œ ์•Œ๋ฆผ
  2. ํ‘ธ์‹œ ์•Œ๋ฆผ(Push Notification) โ€” ์„œ๋ฒ„์—์„œ ์ „๋‹ฌ๋˜์–ด ์•ฑ ์™ธ๋ถ€์— ํ‘œ์‹œ๋˜๋Š” ์•Œ๋ฆผ

โœ… 1. ๋กœ์ปฌ ์•Œ๋ฆผ (Local Notification)

ํŠน์ • ์‹œ๊ฐ„์— ๊ธฐ๊ธฐ ๋‚ด์—์„œ ์ž๋™์œผ๋กœ ์•Œ๋ฆผ์„ ๋ฐœ์ƒ์‹œํ‚ด

๋Œ€ํ‘œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: react-native-push-notification

npm install react-native-push-notification
import PushNotification from 'react-native-push-notification';

PushNotification.localNotification({
  title: "์•Œ๋ฆผ ์ œ๋ชฉ",
  message: "์ด๊ฑด ๋กœ์ปฌ ์•Œ๋ฆผ์ž…๋‹ˆ๋‹ค!",
});
  • ์•ฑ์ด ๊บผ์ ธ ์žˆ์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์ฆ‰์‹œ ์•Œ๋ฆผ
  • ํƒ€์ด๋จธ ์•Œ๋ฆผ, ๋ฐ˜๋ณต ์•Œ๋ฆผ ๋“ฑ ์„ค์ • ๊ฐ€๋Šฅ
  • iOS, Android ๋ชจ๋‘ ์ง€์›ํ•˜์ง€๋งŒ ์„ค์ •์ด ๋‹ค๋ฆ„

โœ… ๊ฐ„๋‹จํ•œ ๊ธฐ๋Šฅ์—๋Š” ์ ํ•ฉ
โŒ ์•ฑ์ด ์™„์ „ํžˆ ์ข…๋ฃŒ๋˜๋ฉด ์ œํ•œ์ 


โœ… 2. ํ‘ธ์‹œ ์•Œ๋ฆผ (Push Notification)

์„œ๋ฒ„์—์„œ FCM, APNs๋ฅผ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ , ๊ธฐ๊ธฐ์—์„œ ์ˆ˜์‹ 

๊ฐ€์žฅ ๋งŽ์ด ์“ฐ๋Š” ๋ฐฉ์‹: Firebase Cloud Messaging (FCM)

npm install @react-native-firebase/app
npm install @react-native-firebase/messaging

๊ธฐ๋ณธ ํ๋ฆ„

  1. ์•ฑ์—์„œ ํ† ํฐ ๋ฐœ๊ธ‰ ๋ฐ›๊ธฐ
  2. ์„œ๋ฒ„์— ํ† ํฐ ๋“ฑ๋ก
  3. ์„œ๋ฒ„ โ†’ FCM ์„œ๋ฒ„๋กœ ๋ฉ”์‹œ์ง€ ์ „์†ก
  4. FCM โ†’ ์œ ์ € ๋””๋ฐ”์ด์Šค๋กœ ์•Œ๋ฆผ ํ‘œ์‹œ

์˜ˆ์‹œ ์ฝ”๋“œ

import messaging from '@react-native-firebase/messaging';

useEffect(() => {
  messaging().onMessage(async remoteMessage => {
    Alert.alert('ํ‘ธ์‹œ ์•Œ๋ฆผ', remoteMessage.notification?.title);
  });
}, []);

โœ… ์•ฑ ๊บผ์ง„ ์ƒํƒœ์—์„œ๋„ ์ˆ˜์‹  ๊ฐ€๋Šฅ
โœ… ๋ฐฑ์—”๋“œ ์—ฐ๋™ ๊ฐ€๋Šฅ
โŒ ์„œ๋ฒ„ ์„ค์ •, ์ธ์ฆ, ํ”Œ๋žซํผ๋ณ„ ๋Œ€์‘ ํ•„์š”


๐Ÿ” ๋กœ์ปฌ vs ํ‘ธ์‹œ ์•Œ๋ฆผ ๋น„๊ต

ํ•ญ๋ชฉ๋กœ์ปฌ ์•Œ๋ฆผํ‘ธ์‹œ ์•Œ๋ฆผ
๋ฐœ์ƒ ์ฃผ์ฒด์•ฑ ๋‚ด๋ถ€ (ํด๋ผ์ด์–ธํŠธ)์„œ๋ฒ„
์•ฑ ์ƒํƒœ ํ•„์š”์•ฑ ์‹คํ–‰ ์ค‘ ํ•„์š”์•ฑ ์ข…๋ฃŒ ์ƒํƒœ๋„ ๊ฐ€๋Šฅ
์‚ฌ์šฉ ์˜ˆ์‹œ์•ฝ ๋ณต์šฉ ๋ฆฌ๋งˆ์ธ๋”, ์˜ˆ์•ฝ ์•Œ๋ฆผ๋งˆ์ผ€ํŒ…, ์ปค๋ฎค๋‹ˆํ‹ฐ, ๋ฉ”์‹œ์ง€
์„ค์ • ๋‚œ์ด๋„์‰ฌ์›€์–ด๋ ค์›€ (Firebase ๋“ฑ ์—ฐ๋™)

๐Ÿง  ์•Œ๋ฆผ ๊ตฌํ˜„ ์‹ค์ „ ํŒ

  • ์•Œ๋ฆผ ๊ถŒํ•œ ์š”์ฒญ์€ ์•ฑ ์‹œ์ž‘ ์‹œ์  or ์„ค์ • ํŽ˜์ด์ง€์—์„œ ๋ช…์‹œ์ ์œผ๋กœ
  • iOS๋Š” ๋ณ„๋„ ๊ถŒํ•œ ์š”์ฒญ์ด ํ•„์ˆ˜ (requestPermissions)
  • Android๋Š” Android 13๋ถ€ํ„ฐ ์•Œ๋ฆผ ๊ถŒํ•œ ํ•„์š”
  • ์•Œ๋ฆผ ํƒญ ์‹œ ํŠน์ • ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•˜๋ ค๋ฉด ๋”ฅ๋งํฌ ์ฒ˜๋ฆฌ ํ•„์š”

๐Ÿ“ ๋‚ด๊ฐ€ ๋А๋‚€ ์ 

์ฒ˜์Œ์—” ๋กœ์ปฌ ์•Œ๋ฆผ๋งŒ ์จ๋„ ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ,
์œ ์ € ๋ฆฌํ…์…˜์„ ๋†’์ด๋ ค๋ฉด ํ‘ธ์‹œ ์•Œ๋ฆผ์€ ๊ฑฐ์˜ ํ•„์ˆ˜๋ผ๋Š” ๊ฑธ ๋А๊ผˆ๋‹ค.
Firebase ์—ฐ๋™์€ ์–ด๋ ต์ง€๋งŒ ํ•œ ๋ฒˆ ๊ตฌ์ถ•ํ•ด๋‘๋ฉด
๋งˆ์ผ€ํŒ…, ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง€, ์ปค๋ฎค๋‹ˆํ‹ฐ ์•ฑ์—์„œ ๊ต‰์žฅํžˆ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์ด ๋œ๋‹ค.


๐Ÿ”” โ€œ์•Œ๋ฆผ์€ UX์˜ ์‹œ์ž‘์ด์ž, ์•ฑ๊ณผ ์œ ์ €๋ฅผ ์ž‡๋Š” ๋‹ค๋ฆฌ๋‹ค.โ€


profile
๊ฐœ๋ฐœ์ž๋กœ ์ทจ์—…์„ ์ค€๋น„ ์ค‘ ์ด๋ฉฐ, ์—ด์‹ฌํžˆ ๊ณต๋ถ€ ์ค‘ ์ž…๋‹ˆ๋‹ค!

0๊ฐœ์˜ ๋Œ“๊ธ€