[React Native] JSI Architecture
์นดํ
๊ณ ๋ฆฌ : Development
ํ๊ทธ: development, · React-Native · reactnative · JSI · Turbo Modules · Fabric · Codegen
ํ๊ทธ: development, · React-Native · reactnative · JSI · Turbo Modules · Fabric · Codegen
- ๐ฅ 1. ๊ธฐ์กด ์ํคํ ์ฒ (Bridge Architecture)
- ๐ฅ 2. JSI Architecture
- ๐ฅ 3. JSI ์ํคํ ์ฒ๋ก ๊ฐ์ ธ์ฌ ์ ์๋ ๋ณํ
- ๐ฅ 4. Codegen
- ๐ฅ 5. ์ ๋ฆฌ
๐ฅ 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 ๊ฐ ์ ๊ทผ ๋ถ๊ฐ
๐ฅ 2. JSI Architecture
1. JS์ Native์ ์ง์ ์ ์ธ ์ํธ์์ฉ
- JS์ C++ ๊ฐ ์ธํฐํ์ด์ค๋ก ์ํธ ๊ฐ ์ง์ ์ปค๋ฎค๋์ผ์ด์ ์ด ๊ฐ๋ฅํจ
- ์ ๋ฆฌํ์๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ์ปจํ ์คํธ ์์์ ๋ค์ดํฐ๋ธ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉ ํ ์ ์์
2. Turbo Modules์ Lazy Load
- ๊ธฐ์กด ์ํคํ ์ฒ์์ ๋ชจ๋์ ์ฒซ ์คํ์ ๋ชจ๋ ๋ก๋ ํ๋ค๋ฉด Turbo Modules๋ ํ์ํ ๋๋ง ๋ก๋๊ฐ ๊ฐ๋ฅ
๐ฅ 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 ์์ง์ ์ฌ์ฉํ๊ณ ์์.
- ๋ค์ดํฐ๋ธ ๋ชจ๋์ ์ฒ์์ ๋ชจ๋ ๋ค ๋ก๋ํ์ง ์๊ณ ํ์ํ ๋ ๋ก๋ํ๋ ๋ฐฉ์.
- ์ ์ ํ์ ์ฒดํน์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ค์ดํฐ๋ธ ์ฝ๋ ๊ฐ ํธํ์ฑ ๊ฐํ.