๐ŸŽ‰ berenickt ๋ธ”๋กœ๊ทธ์— ์˜จ ๊ฑธ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๐ŸŽ‰
Mobile
React Native
12-native-module-others

1. React Native ๋™์ž‘ ์›๋ฆฌ

  • Android / iOS Native Project ์•ˆ์— React-Native Project๊ฐ€ ์žˆ๋‹ค.
  • Thread๋ž€?
    • ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์‹ค์ œ๋กœ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ์ฃผ์ฒด
    • ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ฒ˜๋ฆฌ ํ•˜๋Š” ์ฃผ์ฒด
    • (like ์Œ์‹์ ์—์„œ ์Œ์‹์„ ๋งŒ๋“œ๋Š” ํ–‰์œ„์™€ ๋น„์Šท)
  • React-Native Thread (1)
    • Main Thread or UI Thread
    • Native ์˜์—ญ์— ๋ ˆ์ด์•„์›ƒ์„ ๊ทธ๋ ค์ฃผ๋Š” ์—ญํ• 
  • React-Native Thread (2)
    • JavaScript Thread
    • ์ž‘์„ฑํ•œ Javascript๊ฐ€ ์‹คํ–‰ ๋˜๋Š”๊ณณ
  • React-Native Thread (3)
    • Native Module Thread
    • Native Module์„ ๋‹ค๋ฃฐ๋•Œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š” Thread
    • ํŠน์ • ๋ฆฌ์†Œ์Šค๋“ฑ์„ ์š”์ฒญํ•˜๊ณ ์ž ํ• ๋•Œ ์‚ฌ์šฉ
  • React-Native Thread (4)
    • Shadow Thread
    • virtual DOM์œผ๋กœ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด Layout์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋„๋ก ๊ณ„์‚ฐํ•ด์ฃผ๋Š” ์—ญํ• 

1.1 React Native intialize process

1
Main Thread โ†’ JS Thred โ†’ Shadow Thread โ†’ Native Module Thread
  • Diffing : virtual DOM๊ณผ ์‹ค์ œ DOM element๋ฅผ ๋น„๊ตํ•˜๋ฉฐ ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ์ฒดํฌ
  • React-Native Bridge
    • Javascript์™€ Native๊ฐ€ ์„œ๋กœ ์†Œํ†ต ํ•˜๋Š” ํ• ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ์—ญํ• 

2. Native Module

  • Native Module ์ด๋ž€ Native API๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ๊ฒƒ.
    • ์ฃผ๋กœ ํ˜„์žฌ ์œ„์น˜, wifi ์ƒํƒœ ๋“ฑ native ์˜์—ญ์—์„œ๋งŒ ์•Œ๊ณ  ์žˆ๋Š” ์ •๋ณด์— ์ ‘๊ทผํ•˜๋Š”๊ฒƒ
    • ๋˜๋Š” image processing ์ฒ˜๋Ÿผ ์—ฐ์‚ฐ์ด native์˜ ๋†’์€ performance๊ฐ€ ํ•„์š”ํ• ๋•Œ ์‚ฌ์šฉ
  • Native Module
    • ๋กœ์ง/์—ฐ์‚ฐ์— ๋Œ€ํ•œ Native Module
    • ์–ด๋–ค Native Library์˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ํ•  ๋•Œ ์‚ฌ์šฉ
  • Native UI Component
    • View์— ๋Œ€ํ•œ Native Module
    • ์ฃผ๋กœ ์นด๋ฉ”๋ผ ๋“ฑ ์—ฐ์‚ฐ์ด ๋งŽ์€ View์— ๋Œ€ํ•ด์„œ ์ž‘์„ฑ

3. New Architecture

3.1 Why New Architecture ?

Bridge๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ณธ์งˆ์ ์ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ํ•˜๊ธฐ ์œ„ํ•จ


3.2 Bridge๊ฐ€ ๊ฐ€์ง„ ์ œํ•œ์ 

3.2.1 It was asyncronous (๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ)

  • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ : ์–ด๋–ค ์ž‘์—…์ด ๋๋‚ ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์ž‘์—…์„ ๋ฐ”๋กœ ์‹คํ–‰ํ•˜๋Š”๊ฒƒ
  • ์ž‘์—…์ด ๋๋‚ฌ๋Š”์ง€ ๋ณด์žฅ์ด ๋˜์ง€ ์•Š์•„, ๋๋‚ฌ์„๋•Œ์— ๋ณ„๋„ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”

3.2.2 It was single threaded (์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ)

  • Javascript๊ฐ€ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ์—์„œ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Bridge๋„ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋กœ ๋™์ž‘ ํ•จ

3.2.3 It imposed extra overheads (๋ณ€ํ™˜์‹œ ๋“œ๋Š” ๊ณผ๋„ํ•œ ๋น„์šฉ)

  • Bridge๋กœ ์ด๋™ ํ•˜๊ฒŒ ๋ ๋•Œ JSON Object ๋ณ€ํ™˜ํ•˜๋Š” ๋น„์šฉ์ด ํผ

3.3 New Architecture

  • ๊ธฐ์กด์— ์žˆ๋˜ Bridge๋ฅผ ๋ฒ„๋ฆฌ๊ณ , JSI๊ฐ€ ํ•ด๋‹น ์—ญํ• ์„ ๋Œ€์‹  ํ•˜๋„๋ก ์ˆ˜์ •
  • JSI : Javascript Interface, C++ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ํ• ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์—ญํ• 

3.3.1 Old Architecture

Bridge๋ฅผ ํ†ตํ•ด Native Module๊ณผ Javascript ๋กœ์ง๊ฐ„ ํ†ต์‹ 

1
JS โ†’ Bridge โ†’ Native UI
2
โ†’ Module

3.3.2 New Architecture

Bridge๋ฅผ ํ†ตํ•ด Native Module๊ณผ Javascript ๋กœ์ง๊ฐ„ ํ†ต์‹ 

1
JS โ†’ JSI Fabric โ†’ Native UI
2
Turbo Native Module โ†’ Module

3.4 New Architecture๋ฅผ ์ ์šฉํ•˜๋ฉฐ ์–ป์€๊ฒƒ

  1. ๋™๊ธฐ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋จ
    • C++ ๋ชจ๋“ˆ๋กœ ์ง์ ‘ ์ ‘๊ทผ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ณด๋‹ˆ ๋น„๋™๊ธฐ ํ†ต์‹ ์ด ์•„๋‹ˆ์–ด๋„ ๋จ
  2. ๋™์‹œ์„ฑ
    • Javascrript์—์„œ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์— ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์žˆ์Œ
  3. Overhead๊ฐ€ ์ค„์–ด๋“ฌ
    • JSON Object๋กœ ๋ณ€ํ™˜ ํ•˜์ง€ ์•Š๊ณ  C++ ์–ธ์–ด๋กœ ํ†ต์‹ ํ•˜๊ฒŒ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ
  4. iOS, Android๊ฐ„ ๋‚ด๋ถ€ ๋„ค์ดํ‹ฐ๋ธŒ ๋ชจ๋“ˆ ์ฝ”๋“œ ๊ณต์œ  ๊ฐ€๋Šฅ
    • C++์ด ์ถ”๊ฐ€๋จ์œผ๋กœ ์ธํ•˜์—ฌ ํ”Œ๋žซํผ์ด ๋‹ค๋ฅด๋”๋ผ๋„ ํ•œ๊ฐœ์˜ ์ฝ”๋“œ๋กœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
  5. ํƒ€์ž…์˜ ์•ˆ์ •์„ฑ
    • ์ž๋™์œผ๋กœ ์ƒ์„ฑ ๋˜๋Š” ์ฝ”๋“œ ๋ ˆ์ด์–ด์— ์˜ํ•ด์„œ ์ž๋™์œผ๋กœ ํƒ€์ž…์„ ์ƒ์„ฑ ํ•˜๋„๋ก ๋˜์–ด์žˆ์Œ

4. New Architecture

4.1 Fabric

  • Fabric์ด๋ž€ ?
    • New Architecture์˜ ์ƒˆ๋กœ์šด rendering system.
    • ์ด์ „ Architecture์—์„œ๋Š” UI Manager๊ฐ€ ๋‹ด๋‹นํ•˜๋˜ ๋ถ€๋ถ„
  • Fabric ๊ฐœ์„ ์ 
    • Shadow Thread์—์„œ ์ƒˆ๋กœ์šด Shadow Tree๋ฅผ ๊ณ„์‚ฐํ•˜๋˜ ๋กœ์ง์„ C++ ๋กœ์ง์œผ๋กœ ๋ณ€ํ™˜ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ˆ˜์ •
    • onLayout, onMeasure๋“ฑ View์˜ ์œ„์น˜, ์‚ฌ์ด์ฆˆ๋“ฑ์„ ๊ณ„์‚ฐํ•˜๋˜ ๋กœ์ง์„ ๋น„๋™๊ธฐ์—์„œ ๋™๊ธฐ ํ•จ์ˆ˜๋กœ ๋ณ€ํ™˜ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ํผํฌ๋จผ์Šค ์ด๋“

4.2 Turbo NativeModule

  • Turbo NativeModules
    • ๊ธฐ์กด Architecture์—์„œ๋Š” NativeModule๋กœ ์‚ฌ์šฉ๋˜๋˜ ๊ฒƒ
    • Bridge๊ฐ€ ์‚ฌ๋ผ์ง€๊ฒŒ ๋˜๋ฉด์„œ ์ถ”๊ฐ€๋จ
  • Turbo NativeModules ์žฅ์ 
    1. Platform ์ „๋ฐ˜์ ์œผ๋กœ Typecheck๊ฐ€ ์ž˜๋จ
    2. ํ”Œ๋žซํผ ๋ณ„ ์ฝ”๋“œ ๊ณต์œ ๊ฐ€ ์‰ฌ์›€ (C++๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ๊ณต์œ )
    3. Native Module Lazy Loading์ด ์ ์šฉ๋จ
      • Lazy Loading : ์ตœ์ดˆ์— ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ๋กœ๋“œ ํ•˜๋Š”๊ฒƒ์ด ์•„๋‹Œ, ํ•„์š” ํ• ๋•Œ ๋กœ๋“œํ•˜๋Š” ๋ฐฉ์‹.
      • (์ตœ์ดˆ ๋กœ๋“œ์‹œ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•จ)
    4. JSI ์‚ฌ์šฉ์œผ๋กœ ์ธํ•˜์—ฌ Native์™€ Javascript์ฝ”๋“œ๊ฐ„ ํ†ต์‹ ์ด ํšจ์œจ์ 
      • JSON Object๋กœ ๋ณ€ํ™˜ ์—†์ด C++ ์ฝ”๋“œ๋งŒ์œผ๋กœ ํ†ต์‹  ๊ฐ€๋Šฅ

4.3 CodeGen

  • CodeGen
    • 3rd-party library์—์„œ ์ œ๊ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค์— ๋งž๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด
    • JSI ๊ด€๋ จ ์ฝ”๋“œ๋“ค์„ ๋งŒ๋“ค์–ด ์ฃผ๋Š”๊ฒƒ
    • ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œ ํ• ๋•Œ ์ž๋™์œผ๋กœ ์‹คํ–‰ (๋นŒ๋“œ ์‹œ๊ฐ„์— ์˜ํ–ฅ)
  • New Architecture
    • 2022๋…„ ๋ง ํ˜„์žฌ, ์•„์ง๊นŒ์ง€๋Š” ์‹คํ—˜์ ์ธ ๋ถ€๋ถ„๋“ค์ด ๋งŽ์Œ
    • ์•ˆ์ •ํ™” ๋œ ๋’ค ์ •์‹ ๋ฆด๋ฆฌ์ฆˆ ์˜ˆ์ •

5. Hermes

  • Facebook์—์„œ ๋งŒ๋“  javascript Engine
  • Bytecode ํ˜•ํƒœ๋กœ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ ํ•˜์—ฌ ์ €์žฅ ํ•ด ๋‘” ๋’ค ์‚ฌ์šฉ
  • [Hermes Announcement]
    • ์•ฑ ์ตœ์ดˆ ๋กœ๋”ฉ์‹œ jsbundle ํŒŒ์ผ์„ ์ฝ์–ด์™€ ๋™์ž‘ ๊ฐ€๋Šฅํ•œ javascript๋กœ compile ํ•˜๊ฒŒ ๋จ
    • ์ด ๊ณผ์ •์ด ๋Œ€๋žต 4์ดˆ(Android ๊ธฐ์ค€) ์ •๋„ ๊ฑธ๋ฆฌ๋Š”๊ฒƒ์œผ๋กœ ํŒŒ์•…๋จ
    • ์•ฑ ๋นŒ๋“œ ์‹œ๊ฐ„์— parse์™€ compile๋“ฑ ํ•„์š”ํ•œ ์ž‘์—…์„ ๋นŒ๋“œ ํ•  ๋•Œ ํ•˜๋„๋ก ํ•จ
    • Bytecodeํ˜•ํƒœ๋กœ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ ํ•ด๋‘๋ฉด ์‹คํ–‰๋งŒ ์‹œํ‚ค๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ
  • ๋˜๋‹ค๋ฅธ ์žฅ์ 
    • ์‚ฌ์šฉํ•˜๋Š” Memory์˜ ๊ฐ์†Œ (๊ธฐ์กด 185mb -> 136mb)
    • AAB / APK ํฌ๊ธฐ ๊ฐ์†Œ (๊ธฐ์กด 41mb -> 22mb)
  • ์ ์šฉ ๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธ
    • Hermes์˜ ์žฅ์ ์„ ์˜จ์ „ํžˆ ๋ณด๊ธฐ ์œ„ํ•ด์„œ๋Š” release build Type์œผ๋กœ ํ™•์ธ

6. Wrap-up

์‚ฌ์šฉํ•˜๋Š” Thread

  • Main Thread : ์‹ค์ œ๋กœ UI๋“ค์ด ๊ทธ๋ ค์ง€๋Š” thread
  • Javascript Thread : JS๊ฐ€ ๋™์ž‘ํ•˜๋Š” thread
  • NativeModule Thread : Native Module ๋™์ž‘์„ ์œ„ํ•œ thread
  • Shadow Thread : virtalDOM์„ ์‹ค์ œ ๋ฐ˜์˜ํ•  ํ™”๋ฉด์œผ๋กœ ๋ณ€ํ™˜ ํ•˜๋Š” thread

Bridge

  • Javascript์™€ Native๊ฐ„ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š”๊ฒƒ
  • JSON์œผ๋กœ ๋“ค์–ด์™€์„œ JSON์œผ๋กœ ๋‹ค์‹œ ๋„˜๊ฒจ์ฃผ๊ฒŒ ๋˜์–ด์žˆ์Œ
  • New Architecture : Bridge๋ฅผ ํ†ตํ•ด Native Module๊ณผ Javascript ๋กœ์ง๊ฐ„ ํ†ต์‹ 
  • Hermes : ์•ฑ ๋นŒ๋“œ ์‹œ๊ฐ„์— parse์™€ compile๋“ฑ ํ•„์š”ํ•œ ์ž‘์—…์„ ๋นŒ๋“œ ํ•  ๋•Œ ํ•˜๋„๋ก ํ•จ

7. react-native-reanimated

  • React-Native์—์„œ Animation์„ Frame drop ์—†์ด ์‚ฌ์šฉ๊ฐ€๋Šฅ ํ•˜๋„๋ก ๋งŒ๋“  ํŒจํ‚ค์ง€
  • React-Native Animated๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋‹จ์ (๋ณ‘๋ชฉ ํ˜„์ƒ)์„ ํ•ด๊ฒฐ
  • react-native-reanimated
    • animation ๊ด€๋ จ๋œ ์ž‘์—…์„ ๋ชจ๋‘ Main Thread์—์„œ ์‹คํ–‰
    • worklet์„ ์ด์šฉํ•˜์—ฌ JS Thread๋กœ ์ „๋‹ฌ

7.1 worklet, shared values

  • worklet : ์ž‘์€ ์กฐ๊ฐ์˜ javascript ์กฐ๊ฐ
    • ๋ทฐ ์†์„ฑ์„ ์—…๋ฐ์ดํŠธ ํ•˜๊ฑฐ๋‚˜, ์ด๋ฒคํŠธ์— ๋ฐ˜์‘ํ• ๋•Œ UI Thread์—์„œ ๋ฐ”๋กœ ์‹คํ–‰ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” JS ์กฐ๊ฐ
    • worklet ์ƒ์„ฑ๋ฐฉ๋ฒ•
      • ํ•จ์ˆ˜ ์ƒ๋‹จ์— worklet์ด๋ผ๋Š” string์„ ์ถ”๊ฐ€
  • SharedValues
    • JS Thread์™€ Main Thread ๋ชจ๋‘์—์„œ ์ฝ๊ธฐ ๋˜๋Š” ์ˆ˜์ •์ด ๊ฐ€๋Šฅ ํ•œ ๊ฐ’
    • Main Thread์—์„œ๋Š” ๊ฐ’์ด ๋ณ€๊ฒฝ๋จ์„ ๋ฐ”๋กœ ๊ฐ์ง€ ํ•  ์ˆ˜ ์žˆ์–ด ์ฝ๊ธฐ์— ํŠนํ™”๋จ

8. FCM

  • Push Notification ์ด๋ž€ ?
    • ์„œ๋ฒ„์—์„œ ์„ค์น˜๋œ ์•ฑ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๊ณ , ์•ฑ์—์„œ ์ „๋‹ฌ๋œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š”๊ฒƒ
  • Push : Message๋ฅผ ์ „๋‹ฌ ํ•˜๋Š” ๊ฒƒ
  • Notification : Message๋ฅผ ๋ณด์—ฌ ์ฃผ๋Š” ๊ฒƒ

8.1 Push Notification ์ข…๋ฅ˜

  • Data Message
  • ๋ฐ์ดํ„ฐ๋งŒ ์ „๋‹ฌ ํ•ด์ฃผ๋Š” ํ‘ธ์‹œ
  • Notification์€ ๋ณ„๋„๋กœ ๋„์šฐ์ง€ ์•Š์Œ
  • ์•ฑ์˜ ์„ค์น˜ ์—ฌ๋ถ€ ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ฐฑ์‹ ์ด ํ•„์š” ํ• ๋•Œ ์‚ฌ์šฉ
  • Notification Message
  • ์‹ค์ œ๋กœ ์œ ์ €์—๊ฒŒ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ
  • ๋‹จ์ˆœ ๊ด‘๊ณ ์„ฑ ๋ฉ”์‹œ์ง€, ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€ ์ˆ˜์‹  ๋“ฑ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ

9. Jest

9.1 Mocking

  • ๊ฐ€์งœ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ
  • e.g.) HTTP ์š”์ฒญ์‹œ ํŠน์ • ๊ฐ’์„ Response๋กœ ์ง€์ •

9.2 without Mocking

  • Mocking ์—†์ด Test๋ฅผ ๋Œ๋ฆฌ๊ฒŒ ๋œ๋‹ค๋ฉด, ์‹ค์ œ๋กœ ์„œ๋ฒ„๋กœ ์š”์ฒญ์ด ๊ฐ€๊ฒŒ ๋จ
  • ์ธ์ฆ์ด ํ•„์š” ์—†๋Š” API๋Š” ๋ฌธ์ œ ์—†์ด ๋™์ž‘
  • ์ธ์ฆ์ด ํ•„์š” ํ•œ API๋Š” ์š”์ฒญ ์‹คํŒจ๋กœ ์ธํ•œ failed
  • ์ธ์ฆ์ด ํ•„์š”ํ•œ API์™€, ์•„๋‹Œ API๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ๊ฐ๊ฐ ์ƒํ™ฉ์— ๋งž๊ฒŒ ํ˜ธ์ถœ
  • ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์ฑ™๊ฒจ์•ผ ํ• ๊ฒŒ ๋„ˆ๋ฌด ๋งŽ์Œ
  • Native Module์€ Native API๋ฅผ ์‚ฌ์šฉ ํ•˜๊ฒŒ ๋˜์–ด์žˆ์Œ
  • Jest๋Š” ํ•ธ๋“œํฐ์ด ์•„๋‹Œ Local PC ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ ๋จ
  • Native API (์œ„์น˜, ์นด๋ฉ”๋ผ ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฌด์กฐ๊ฑด failed ์ฒ˜๋ฆฌ

9.3 with Mocking

  • ์‘๋‹ต๊ฐ’์„ ๋ณ„๊ฐœ๋กœ ์„ ์–ธํ•˜์—ฌ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์ธ์ฆ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ์‚ฌ์šฉ๊ฐ€๋Šฅ
  • API ์š”์ฒญ์‹œ, ์„ฑ๊ณต ๋˜๋Š” ์‹คํŒจ์‹œ์— ๋Œ€ํ•œ ์‘๋‹ต๊ฐ’ ์ •์˜ ๊ฐ€๋Šฅ
  • Native API ํ˜ธ์ถœ์‹œ์—๋„ ๋˜๋Œ๋ ค ๋ฐ›๋Š” ๊ฐ’์„ ์ •์˜ ๊ฐ€๋Šฅ

9.4 spyOn

  • ๋ชฐ๋ž˜ ์ •๋ณด๋ฅผ ๋นผ๋‚ด์˜ค๋Š” ๊ธฐ๋Šฅ
  • ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ ๋ ๋•Œ ์–ด๋–ค ๊ฐ’๊ณผ ํ•จ๊ป˜ ํ˜ธ์ถœ๋˜์—ˆ๋Š”์ง€ ํŒŒ์•… ๊ฐ€๋Šฅ

10. Storybook

  • UI ์ปดํฌ๋„ŒํŠธ๋“ค์„ ์ƒํƒœ ๋ณ„๋กœ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋„๊ตฌ
  • ์ƒํƒœ๋ฅผ ์ œ์–ด๋ฅผ ํ•˜๋ฉฐ ๋งž๊ฒŒ ๋ Œ๋”๋˜๋Š”์ง€ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธ ๊ฐ€๋Šฅ
  • react-native๋ฟ๋งŒ ์•„๋‹ˆ๊ณ  Frontend ์ „๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋„๊ตฌ
  • ๋„์ž…์˜ ๊ฐ€์žฅ ํฐ ๊ณ ๋ฏผ Point
    • ๋ชจ๋“  ์•ฑ์˜ ๊ธฐ๋Šฅ๋“ค์„ ์ „๋ถ€ ๋Œ๋ ค๋ณด์ง€ ์•Š๋Š” ์ด์ƒ ๋ชจ๋“  ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋Š”๊ฒƒ์€ ์‚ฌ์‹ค์ƒ ๋ถˆ๊ฐ€๋Šฅ
  • ๋„์ž… ๊ฒฐ์ •์˜ ์ด์œ 
    • ๋””์ž์ธ ์‹œ์Šคํ…œ ์ ์šฉ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋„์ž…์„ ํ•ด๋ณด๊ณ ์ž research
    • ๋””์ž์ด๋„ˆ์™€ ๊ฐœ๋ฐœ์ž๊ฐ„ ๊ฐ™์€ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ ์ž ๊ฒฐ์ •
  • Story ?
    • UI ์ปดํฌ๋„ŒํŠธ ํ•˜๋‚˜์— ๋Œ€ํ•œ ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š”๊ฒƒ
    • Component์™€ Story๋Š” 1:N์˜ ๊ด€๊ณ„
  • ์ฃผ์š” Add-on #1
    • @storybook/addon-ondevice-knobs
    • props ์ œ์–ด๋ฅผ ํ†ตํ•ด์„œ ์ƒํƒœ๋ฅผ ๋ฐ”๊ฟ” ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” addon
  • ์ฃผ์š” Add-on #2
    • @storybook/addon-ondevice-notes
    • ์„ค๋ช…์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” addon