๐Ÿ› 49. React Native ๋””๋ฒ„๊น… & ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง ์™„์ „ ์ •๋ฆฌ โ€” ๋ฒ„๊ทธ ์ถ”์ ๋ถ€ํ„ฐ ์„ฑ๋Šฅ ์ง„๋‹จ๊นŒ์ง€

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

React Native ์•ฑ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด
๋ฒ„๊ทธ๋Š” ๋ฐ˜๋“œ์‹œ ์ƒ๊ธด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋Œ€๋ถ€๋ถ„์€ ๋””๋ฐ”์ด์Šค์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ์•ฑ์˜ ๋””๋ฒ„๊น… ๋Šฅ๋ ฅ์€ ์•ฑ ํ’ˆ์งˆ์„ ๊ฒฐ์ •์ง“๋Š” ํ•ต์‹ฌ์ด๋‹ค.

์ด๋ฒˆ ๊ธ€์€ React Native ์•ฑ์„ ๋””๋ฒ„๊น…ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•๋“ค์„
์‹ค์ „ ๊ธฐ์ค€์œผ๋กœ ์ •๋ฆฌํ•œ ๊ธ€์ด๋‹ค.


โœ… 1. ๋กœ๊ทธ ํ™•์ธ

๐Ÿ”ง ๊ธฐ๋ณธ ๋กœ๊ทธ: console.log

  • ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋กœ๊ทธ ๋ฐฉ๋ฒ•
  • iOS: Xcode ์ฝ˜์†”
  • Android: npx react-native log-android or Android Studio Logcat

๐Ÿ”ง ๊ฐœ์„  ๋กœ๊ทธ: react-native-logs

npm install react-native-logs
const logger = createLogger();
logger.info('ํŽ˜์ด์ง€ ์ง„์ž…');
logger.error('์—๋Ÿฌ ๋ฐœ์ƒ', error);

โœ… ๋กœ๊ทธ ๋ ˆ๋ฒจ ๊ด€๋ฆฌ (info, warn, error)
โœ… ๋กœ๊ทธ ๊ธฐ๋ก ํŒŒ์ผ ์ €์žฅ ๊ฐ€๋Šฅ
โœ… ํ”„๋กœ๋•์…˜ ๋ชจ๋“œ์—์„  ๋กœ๊ทธ ์ˆจ๊ธฐ๊ธฐ ๊ฐ€๋Šฅ


๐Ÿš€ 2. ๋””๋ฒ„๊น… ํˆด

๐Ÿงฉ React Native Debugger

  • Redux ์ƒํƒœ, ๋„คํŠธ์›Œํฌ ์š”์ฒญ, ์ฝ˜์†” ๋กœ๊ทธ๋ฅผ ํ†ตํ•ฉ ํ™•์ธ
  • redux-devtools-extension๊ณผ ํ†ตํ•ฉ ๊ฐ€๋Šฅ
  • flipper๋ณด๋‹ค ์„ค์ •์ด ๋‹จ์ˆœํ•ด์„œ ๋น ๋ฅด๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
brew install --cask react-native-debugger

๐Ÿงฉ Flipper

  • Meta์—์„œ ๋งŒ๋“  RN ๊ณต์‹ ๋””๋ฒ„๊น… ํˆด
  • ๋„ค์ดํ‹ฐ๋ธŒ ๋ทฐ ๊ณ„์ธต, AsyncStorage, ์ด๋ฏธ์ง€, ๋„คํŠธ์›Œํฌ, ์„ฑ๋Šฅ ๋“ฑ ์‹œ๊ฐํ™”
  • react-native-flipper ์„ค์น˜ ํ•„์š”
npm install react-native-flipper

โœ… ๋””๋ฐ”์ด์Šค ์—ฐ๊ฒฐํ•ด์„œ ์‹ค์‹œ๊ฐ„ ๋””๋ฒ„๊น…
โœ… ๋„ค์ดํ‹ฐ๋ธŒ์™€ JS ๋ธŒ๋ฆฌ์ง€ ์—ฐ๊ฒฐ ์ƒํƒœ ํ™•์ธ ๊ฐ€๋Šฅ


๐Ÿ“ˆ 3. ์„ฑ๋Šฅ ๋ถ„์„

โฑ๏ธ ๋ Œ๋”๋ง ์‹œ๊ฐ„ ์ธก์ •

const start = performance.now();
// ๋ Œ๋”๋ง ์ฝ”๋“œ
const end = performance.now();
console.log(`๋ Œ๋”๋ง ์‹œ๊ฐ„: ${end - start}ms`);

๐Ÿง  React Profiler

  • ์ปดํฌ๋„ŒํŠธ ๋ฆฌ๋ Œ๋”๋ง ์‹œ๊ฐ„ ๋ถ„์„
  • React.memo, useMemo, useCallback ๋“ฑ ์ตœ์ ํ™” ํŒ๋‹จ ๊ธฐ์ค€ ์ œ๊ณต

๐Ÿ› ๏ธ 4. ์—๋Ÿฌ ๋ฆฌํฌํŒ… ์„œ๋น„์Šค ์—ฐ๋™

๐Ÿ”” Sentry (์—๋Ÿฌ ์ถ”์  ์„œ๋น„์Šค)

npm install @sentry/react-native
npx @sentry/wizard -i reactNative
  • ์•ฑ์—์„œ ๋ฐœ์ƒํ•œ JS/๋„ค์ดํ‹ฐ๋ธŒ ์—๋Ÿฌ๋ฅผ ์„œ๋ฒ„์— ์ž๋™ ์ „์†ก
  • ๋ฐœ์ƒ ์‹œ์ , ์ŠคํƒํŠธ๋ ˆ์ด์Šค, ์œ ์ € ์ •๋ณด ๋“ฑ ์ž๋™ ์ˆ˜์ง‘
  • ํฌ๋ž˜์‹œ ์ถ”์ , ์Šฌ๋ž™/์ด๋ฉ”์ผ ์•Œ๋ฆผ ์—ฐ๋™ ๊ฐ€๋Šฅ

โœ… ์‹ค์„œ๋น„์Šค ์•ฑ์—์„œ๋Š” ๊ฑฐ์˜ ํ•„์ˆ˜


๐Ÿงช ํ…Œ์ŠคํŠธ ๋””๋ฐ”์ด์Šค์—์„œ ์ž์ฃผ ํ™•์ธํ•  ๊ฒƒ

ํ•ญ๋ชฉํ™•์ธ ํฌ์ธํŠธ
์Šคํฌ๋กค ์ง€์—ฐFlatList ์ตœ์ ํ™”, ์ด๋ฏธ์ง€ ์šฉ๋Ÿ‰ ํ™•์ธ
ํ™”๋ฉด ๊นœ๋นก์ž„๋ฆฌ๋ Œ๋”๋ง ์›์ธ ์ฒดํฌ (state ์ถ”์ )
๋‹ค๊ตญ์–ด ์˜ค๋ฅ˜๋ฒˆ์—ญ ๋ˆ„๋ฝ ํ‚ค, fallback ํ™•์ธ
๋„คํŠธ์›Œํฌ ์‹คํŒจAPI ์—๋Ÿฌ ์‹œ UI fallback ์ œ๊ณต

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

์•ฑ์„ ํ…Œ์ŠคํŠธํ•  ๋•Œ๋Š” ์ž˜ ๋Œ์•„๊ฐ€์ง€๋งŒ
๋ฐฐํฌ ํ›„์—์•ผ ํ„ฐ์ง€๋Š” ์ด์Šˆ๊ฐ€ ํ•ญ์ƒ ์ƒ๊ฒผ๋‹ค.
๊ทธ๋Ÿด ๋•Œ๋งˆ๋‹ค ๋””๋ฒ„๊น… ํˆด๊ณผ ๋กœ๊ทธ๊ฐ€ ๋ถ€์กฑํ•ด์„œ ๊ณ ์ƒํ•œ ์ ์ด ๋งŽ๋‹ค.

์ง€๊ธˆ์€ Flipper + Sentry + react-native-logs ์กฐํ•ฉ์œผ๋กœ
๋””๋ฒ„๊น…, ์—๋Ÿฌ ์ถ”์ , ์„ฑ๋Šฅ ๋ถ„์„๊นŒ์ง€ ํ•œ ๋ฒˆ์— ์ปค๋ฒ„ํ•˜๊ณ  ์žˆ๋‹ค.


๐Ÿž โ€œ์•ฑ์˜ ์™„์„ฑ๋„๋Š” ๋ณด์ด๋Š” ๊ฒƒ๋ณด๋‹ค, ๋ณด์ด์ง€ ์•Š๋Š” ๊ณณ์—์„œ ๊ฒฐ์ •๋œ๋‹ค.โ€


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

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