[React Native] JSI Architecture


๐Ÿ”ฅ 1. ๊ธฐ์กด ์•„ํ‚คํ…์ฒ˜ (Bridge Architecture)

1. UI thread

  • ๋ฉ”์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์•ˆ๋“œ๋กœ์ด๋“œ์™€ IOS์—์„œ View๋ฅผ ๋ Œ๋”๋ง

2. Shadow thread

  • Background Thread๋กœ ๋žœ๋”๋ง ์ „์— Yoga ํŒจํ‚ค์ง€๋กœ ๊ฐ ์š”์†Œ์˜ ๋ ˆ์ด์•„์›ƒ์„ ๊ณ„์‚ฐ

3. JS thread

  • React Native ๋กœ์ง์„ ๋‹ด๋‹น , ๋ฒˆ๋“ค๋ง ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ ์‹คํ–‰

์„ธ๊ฐœ์˜ Thread ๊ฐ„ ํ†ต์‹ ์€ ์ง์ ‘์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š๊ณ  Bridge๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง

๋ฐ์ดํ„ฐ๋Š” JSON ํ˜•ํƒœ๋กœ ์ด๋™๋˜๊ณ  ์ง๋ ฌํ™”(Serialisation) ์—ญ์ง๋ ฌํ™” (Deserialisation)๋กœ ๋ฌด๊ฑฐ์šด ์ž‘์—…์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง

  • Bridge๋ฅผ ์ด์šฉํ•œ JSON ๋ฐ์ดํ„ฐ ์ „์†ก์€ ๋ถˆํ•„์š”ํ•œ ์นดํ”ผ๊ฐ€ ๋ฐœ์ƒ
  • ๋น„๋™๊ธฐ์‹ ์ž‘์—…์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์„œ Bridge๊ฐ€ ํ˜ผ์žกํ•ด์ง

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๋„ค์ดํ‹ฐ๋ธŒ ์ชฝ์ด ์„œ๋กœ ์ง์ ‘ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์—†๊ณ , ๋˜ ๋น„๋™๊ธฐ์‹ JSON ๋ฉ”์‹œ์ง€์— ์˜์กดํ•จ
  • ๋ชจ๋“ˆ์ด ์•ฑ ์ฒซ ์‹คํ–‰์— ๋ชจ๋‘ ๋กœ๋“œ๋˜๋Š”๋ฐ ์ด๊ฑด ์•ฑ์˜ ์ดˆ๊ธฐ ๊ตฌ๋™ ์„ฑ๋Šฅ์— ์•…์˜ํ–ฅ์„ ๋ผ์นจ
  • ์œ ์ €์˜ ํ„ฐ์น˜์— ๋Œ€ํ•œ ๋ฐ˜์‘์ด ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‘๊ณ  ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๊ณ  ์ง„ํ–‰๋˜์–ด ๋Š๋ฆผ
  • Bridge๊ฐ€ Serialisation๋กœ ์ธํ•ด ๋Š๋ฆผ
  • UI ์š”์†Œ์— ๋””๋ ‰ํŠธ๋กœ JS thread ๊ฐ€ ์ ‘๊ทผ ๋ถˆ๊ฐ€

bridge

๐Ÿ”ฅ 2. JSI Architecture

1. JS์™€ Native์˜ ์ง์ ‘์ ์ธ ์ƒํ˜ธ์ž‘์šฉ

  • JS์™€ C++ ๊ฐ„ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ƒํ˜ธ ๊ฐ„ ์ง์ ‘ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ด ๊ฐ€๋Šฅํ•จ
  • ์ •๋ฆฌํ•˜์ž๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ปจํ…์ŠคํŠธ ์•ˆ์—์„œ ๋„ค์ดํ‹ฐ๋ธŒ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ์Œ

2. Turbo Modules์˜ Lazy Load

  • ๊ธฐ์กด ์•„ํ‚คํ…์ฒ˜์—์„  ๋ชจ๋“ˆ์„ ์ฒซ ์‹คํ–‰์— ๋ชจ๋‘ ๋กœ๋“œ ํ–ˆ๋‹ค๋ฉด Turbo Modules๋Š” ํ•„์š”ํ•  ๋•Œ๋งŒ ๋กœ๋“œ๊ฐ€ ๊ฐ€๋Šฅ

JSI

๐Ÿ”ฅ 3. JSI ์•„ํ‚คํ…์ฒ˜๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ณ€ํ™”

1. ๊ธฐ์กด ์•„ํ‚คํ…์ฒ˜์˜ ๋ณ‘๋ชฉ ์ง€์  ํ•ด๊ฒฐ

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋„ค์ดํ‹ฐ๋ธŒ ๊ฐ์ฒด ๋“ฑ ์ง์ ‘ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•ด์ ธ์„œ ์ง์ ‘ ์ปค๋ฎคํ‹ฐ์ผ€์ด์…˜์ด ๊ฐ€๋Šฅํ•ด์ง

2. Fabric

  • Facebook์ด C++๋กœ ๋งŒ๋“  ๋ Œ๋”๋ง ์‹œ์Šคํ…œ
  • UI Manager๊ฐ€ ์ง์ ‘ shadow Tree๋ฅผ C++์•ˆ์—์„œ ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ ์Œ (์†๋„ ๊ฐœ์„ )
  • ๋™๊ธฐ์‹ ์ž‘์—… / ์“ฐ๋ ˆ๋“œ ์„ธ์ดํ”„ ๋ฐฉ์‹์œผ๋กœ Javascript renderer (C++)๋ฅผ ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ์Œ
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ณ€์ˆ˜๋ฅผ ์ง์ ‘ ํ˜ธ์ถœ์„ ํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™”๊ฐ€ ํ›จ์”ฌ ์ค„์–ด๋“ฌ

3. Turbo Modules

  • ์œ ์ €์˜ ํ–‰๋™์„ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‘์–ด ๋Œ€์‘ ๊ฐ€๋Šฅํ•ด์ง
  • ์ „์ฒด์ ์ธ ์•ฑ ๋ฐ˜์‘ ์†๋„ ๊ฐœ์„ 

๐Ÿ”ฅ 4. Codegen

Facebook์˜ Codegen

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๋„ค์ดํ‹ฐ๋ธŒ ์‚ฌ์ด๋“œ ์ชฝ์˜ ํƒ€์ž… ์ฒด์ปค๋กœ ๊ธฐ์กด ๋Š์Šจํ•œ ํƒ€์ดํ•‘์„ ๊ฐ•๋ ฅํ•œ ํƒ€์ดํ•‘์„ ํ†ตํ•ด ์ •ํ™•ํ•œ ํƒ€์ž…์ด ์ „๋‹ฌ๋Œ
  • ์ƒˆ ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์—์„œ any ํƒ€์ž…์„ ์“ธ ์ˆ˜ ์—†์Œ

๐Ÿ”ฅ 5. ์ •๋ฆฌ

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๊ฐ€ ๋„ค์ดํ‹ฐ๋ธŒ UI ์š”์†Œ์˜ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ณ  ๋ฉ”์†Œ๋“œ๋„ ์ง์ ‘ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Œ.
  • ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ์— ์ง์ ‘ ๋ฐ”์ธ๋”ฉ ๋˜์–ด ์†๋„๊ฐ€ ํ–ฅ์ƒ๋จ.
  • JavaScript Core ์—”์ง„ ๋ง๊ณ  ๋‹ค๋ฅธ ์—”์ง„๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ, ์‹ค์ œ Hermes ์—”์ง„์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Œ.
  • ๋„ค์ดํ‹ฐ๋ธŒ ๋ชจ๋“ˆ์„ ์ฒ˜์Œ์— ๋ชจ๋‘ ๋‹ค ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ  ํ•„์š”ํ•  ๋•Œ ๋กœ๋“œํ•˜๋Š” ๋ฐฉ์‹.
  • ์ •์  ํƒ€์ž… ์ฒดํ‚น์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ ๊ฐ„ ํ˜ธํ™˜์„ฑ ๊ฐ•ํ™”.