2024. 11. 22. 19:54ใStudy_Develop/React Native
์ผ๋จ ํ๋ฉด ๊ฐ๋ฐ์ ์์
๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง, ๊ฐ ํ์ผ์ ์๋ฏธ ๋ฑ๋ฑ์ ๋ํด์
๋จผ์ ๊ณต๋ถํด ๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์์!!
๊ทธ๋์ผ ์ด ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ๋ฅผ ์ข ๋ ์ ์ดํดํ๊ณ ์ฝ๋๋ฅผ ๊ตฌํํ ์ ์์ผ๋๊น์!
<๋ชฉ์ฐจ>
- Dom ์ด๋?
- ๊ฐ์ DOM ์ ์ฌ์ฉํด์ ๋ ๋๋ง์ ํ๋ React Native
- Thread ๋?
- ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ์ 4๊ฐ์ง Thread
- React Native ์ ํต์ฌ ์ํคํ ์ฒ Bridge
- Javascript์ ๋ค์ดํฐ๋ธ ์ฝ๋ ๊ฐ์ ๋ธ๋ฆฌ์ง ํต์
- React Native ์์ ์ํ๊ด๋ฆฌ๊ฐ ์ด๋ฃจ์ด์ง ๋, Thread์ ๋์์?
๊ฐ์ DOM์ด๋ ๊ฐ๋
์ด์ ์
๊ทธ๋ฅ DOM์ ๋ญ๊น์?
DOM ์ด๋?
Document Object Model ์ฆ ํ๊ตญ์ด๋ก ํ์ด ๋งํ๋ฉด ๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ์
๋๋ค.
์น ๋ฌธ์์ ๊ตฌ์กฐํ๋ ํํ!
์น ํ์ด์ง์ ์คํฌ๋ฆฝํธ ์ฌ์ด์ ๋ค๋ฆฌ ์ญํ ์ ํ๋ ๊ฑธ ๋งํด์.
์ด๋ ๊ฒ์!
๊ฐ ์ธ์ด๋ง๋ค dom์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ด ๋ค๋ฅธ๋ฐ, js์์๋ ๋ํ์ ์ผ๋ก id๋ฅผ ์ ํ์๋ฅผ ์ฌ์ฉํ๋
document.getElementById("#id") ์ด๋ฐ ๋ฉ์๋ ๋ฑ์ด ์์ต๋๋ค.
React์์๋ useRef() ํจ์๋ฅผ ์ฌ์ฉํด dom์ ์ ๊ทผ ๊ฐ๋ฅํด์!
dom์ html ๋ฌธ์ ๊ตฌ์กฐ์ ๊ณ์ธต์ ํํํ๋ ๊ฐ์ฒด์ธ๋ฐ์.
dom์ ๊ณ์ธต์ ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ๋ก ๊ตฌ์ถ์ด ๋์ด์์ด์.
DOM์ ํ๋ฉด์ ์์ ์ฌํญ์ ๋ฐ์ํด์ฃผ๊ธฐ ์ํด ์์ ๋ ๋๋ง๋ค ๋ ๋๋ง ์ํค๊ฒ ๋์ด์์ด์.
์์ ์ฌํญ์ด ์กฐ๊ธ๋ง ์๊ฒจ๋ DOM์ ๊ฑด๋๋ ค ๋ ๋๋ง์ ์์ผ์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ต์ฅํ ๋น ํจ์จ์ ์ด๋ผ๊ณ ๋ณผ ์ ์์ฃ .
๋ฌธ์ ํ๋๋ฅผ ์์ ํ๋ ๊ฒ์ด 10๋ฒ ๋ฐ๋ณต๋๋ฉด
์ ์ฒด๋ฅผ 10๋ฒ ๋ ๋๋งํ๋๊น ์ผ๋ง๋ ๋นํจ์จ์ ์ธ ์ฝ๋๊ฐ ๋ ๊น์!
์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด React๋ ์์ ์ฌํญ๋ค์ ๊ฐ์์ผ๋ก ๋ฐ์์ํค๊ณ ํ ๋ฒ์ ์ฒ๋ฆฌํ๋๋ฐ,
์ฌ๊ธฐ์ ์ฒ๋ฆฌํ๋ ๊ณณ์ ๊ฐ์ DOM์ด๋ผ๊ณ ํฉ๋๋ค.
๊ฐ์ DOM ์ ์ฌ์ฉํด์ ๋ ๋๋ง์ ํ๋ React Native
๋ฆฌ์กํธ์์ ๊ฐ์ DOM์ ํ๋ฉด์ ์ด๋ค ๋ชจ์ต์ด์ด์ผ ํ๋์ง
๊ฐ๋ฐ์๊ฐ ์์ฑํ ๋ด์ฉ๊ณผ ์ค์ ํ๋ฉด์ ๋ ๋๋ง ๋๋ ๊ฒ ์ฌ์ด์ ์กด์ฌํ๋ ๋ ์ด์ด๋ฅผ ๋งํฉ๋๋ค!
์ฌ์ฉ์์ ui๋ฅผ ๋ ๋๋ง ํ๊ธฐ ์ํด์ ๊ฐ๋ฐ์๋ ๋ฐ๋์ ๋ธ๋ผ์ฐ์ ์ DOM์ ์์ ํด์ผ ํฉ๋๋ค.
ํ์ง๋ง ์์์ ๋ง ํ ๊ฒ์ฒ๋ผ ๊ณผ๋ํ DOM์ ์์ ํ๋ ๊ฒ์ ์ฌ๊ฐํ ์ฑ๋ฅ ์ ํ๋ฅผ ์ ๋ฐํ๊ฒ ์ฃ ??
๋ฆฌ์กํธ๋ ํ์ด์ง์ ๋ณํ๋ฅผ ๋ฐ๋ก ๋ ๋๋ง ํ์ง ์๊ณ ๋จผ์ ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌํ๋ ๊ฐ์ DOM์์ ๋ณํ๊ฐ ํ์ํ ๊ณณ์ ๊ณ์ฐํ๊ณ ,
ํ์ํ ์ต์ํ์ ๋ณ๊ฒฝ์ฌํญ๋ง ๋ ๋๋ง์ ํฉ๋๋ค.
์ด ์ฌ์ง์ฒ๋ผ์!
state ๋ฅผ ๋ณ๊ฒฝํด์ ์ฐจ์ด์ ์ ๊ณ์ฐํ๊ณ , ๊ทธ ์ดํ์ ์ค์ ๋ธ๋ผ์ฐ์ ์ dom์ ๋ ๋๋ง ํ๋ ๋ฐฉ์์ด์ฃ
Thread ๋?
์คํ๋๋ ํ๋ก์ธ์ค ๋ด์์ ์ค์ ๋ก ์์ ์ ์คํํ๋ ์ฃผ์ฒด๋ก, ๊ฐ์ฅ ์์ ์์ ์ ๋จ์๋ก ๋ณผ ์ ์์ด์.
๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ์ฒ๋ฆฌํ๋ ์ฃผ์ฒด ์ ๋๋ค.
๋ณดํต ํ๋ก์ธ์ค ํ๋๋น ํ๋์ ์ค๋ ๋๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง,
ํ๊ฒฝ์ ๋ฐ๋ผ ๋ ๊ฐ ์ด์์ ์ค๋ ๋๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ์ด๋ฅผ '๋ฉํฐ ์ค๋ ๋'๋ผ๊ณ ํฉ๋๋ค!
๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ์ 4๊ฐ์ง Thread
1. Main Thread ๋๋ UI Thread
Native์์ญ์ ๋ ์ด์์์ ๊ทธ๋ ค์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
2. React Native๋ js ์ค๋ ๋
๊ฐ๋ฐ์๊ฐ ์์ฑํ Javascript ๊ฐ ์คํ๋๋ ๊ณณ์ผ๋ก
์ด๋ ui๋ฅผ ์กฐ์ํ๊ณ ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํฉ๋๋ค.
๋ํ '์ฑ๊ธ ์ค๋ ๋'๋ก ๋์ํ๋ฉฐ, ๋น๋๊ธฐ ์์ ์ ์ฒ๋ฆฌํ ์ ์์ด์!
3. Native ์ค๋ ๋
Native module์ ๋ค๋ฃฐ ๋ ์ฌ์ฉํ๊ฒ ๋๋ Thread์ ๋๋ค.
js ์ค๋ ๋ ์ธ์๋ Native ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ ui์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋ง ํฉ๋๋ค.
ui ์ด๋ฒคํธ ์ฒ๋ฆฌ, ์ ๋๋ฉ์ด์ , ๋คํธ์ํฌ ์์ฒญ ๋ฑ๊ณผ ๊ฐ์ ๋ค์ดํฐ๋ธ ๊ธฐ๋ฅ์ ๋ด๋นํด์.
4. Shadow Thread
virtual Dom์ผ๋ก๋ถํฐ ์๋ก์ด Layout์ผ๋ก ๋ณํํ๋๋ก ๊ณ์ฐํด ์ฃผ๋ ์ญํ ์ ์ค๋ ๋์ ๋๋ค.
React Native์ ํต์ฌ ์ํคํ ์ฒ
๐ ๋ธ๋ฆฟ์ง (bridge)
React Native Bridge๋ ์์์ ์ค๋ช ํ js ์ค๋ ๋์ Native์ค๋ ๋ ์ฌ์ด์ ํต์ ์ ๋ด๋นํฉ๋๋ค.
๋ ๊ฐ์ง์ ์ธ์ด๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ํต์ ํ ๋ค๋ฆฌ์ญํ ์ด ํ์ํ ๊ฑฐ๋๋๋ค!
JavaScript ↔๏ธ Bridge๐ ↔๏ธ Native (๊ฐ๊ฐ json Object๋ก ํต์ ํด์!)
๋ ๋๋ง ํ๋ก์ธ์ค
React Componets : javascript๋ก ์์ฑ๋์์ผ๋ฉฐ UI๋ฅผ ์ค๋ช ํฉ๋๋ค.
Virtual Dom : React Native๋ Virtual DOM์ ๋ํ ๋ณ๊ฒฝ์ฌํญ์ ์กฐ์ ํ์ฌ ์ ๋ฐ์ดํ ์ต์ ํํฉ๋๋ค.
๋ค์ดํฐ๋ธ ๋ชจ๋
ํ์ผ ์ ์ฅ, ์นด๋ฉ๋ผ ์ก์ธ์ค ๋๋ ์์ง ์ ๋ณด ๊ฐ์ ์ฅ์น๋ณ ๊ธฐ๋ฅ์ ์ํ ๋ด์ฅ ๋ชจ๋์ ๋๋ค.
๊ฐ๋ฐ์๋ ํ์ฅ๋ ๊ธฐ๋ฅ์ ์ํด ์ฌ์ฉ์ ์ ์ ๊ธฐ๋ณธ ๋ชจ๋์ ๋ง๋ค ์ ์์ด์!
JavaScript์ ๋ค์ดํฐ๋ธ ๊ฐ์ ๋ธ๋ฆฌ์ง ํต์
๋ธ๋ฆฌ์ง ์๋ ๋ฐฉ์
์์์ ๋งํ Javascript๊ฐ ๋ค์ดํฐ๋ธ ์ฝ๋์ ๋ ๋ฆฝ์ ์ผ๋ก๋ ์คํ์ด ๋์ง๋ง ํ์ํ ๊ฒฝ์ฐ ํต์ ๋ ํ ์ ์์ด์!
๋ธ๋ฆฟ์ง๋ฅผ ํตํด..
๋น๋๊ธฐ ํต์
Bridge๋ Javascript ์ค๋ ๋๊ฐ ์ ๊ธฐ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋น์ฐจ๋จ ๋น๋๊ธฐ ๋ชจ๋ธ์ ์ฌ์ฉํ๋๋ฐ,
๋ค์ดํฐ๋ธ ์ค๋ ๋๋ ์ฑ์ ์๋ต์ฑ์ ์ํฅ์ ์ฃผ์ง ์๊ณ ์์ ์ ๋ณ๋ ฌ๋ก ์ํํ ์ ์์ต๋๋ค.
์ง๋ ฌํ ๋ฐ ์ญ์ง๋ ฌํ
๋ฐ์ดํฐ๋ Bridge๋ฅผ ํตํ ์ ์ฑ์ ์ํด json๊ณผ ์ ์ฌํ ๊ตฌ์กฐ๋ก ๋ณํ๋์ด ์ ์ก๋ฉ๋๋ค.
React Native์์ ์ํ๊ด๋ฆฌ๊ฐ ์ด๋ฃจ์ด์ง ๋, Thread์ ๋์์?
๊ทธ๋ ๊ฒ๋ฉด React Native์์ ์ํ๊ด๋ฆฌ๊ฐ ์ด๋ฃจ์ด์ง ๋, Thread์ ๋์์ ์ด๋ป๊ฒ ๋ ๊น์?
์ํ ๊ด๋ฆฌ์ ๊ด๋ จํ์ฌ Thread๊ฐ ๋์ํ๋ ๋ฐฉ์์ Javascript์ ๋ค์ดํฐ๋ธ ๊ฐ์ ์ํธ์์ฉ์ด ํต์ฌ์ ๋๋ค.
1. JavaScript ์ธก ์ํ๋ณํ
React, Redux ๊ฐ์ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋์์ ๋๋ถ๋ถ Javascript Thread์์ ์ด๋ฃจ์ด์ง๋๋ค.
React Native์ UI๋ React ์ปดํฌ๋ํธ๋ก ์์ฑ๋๊ณ , React์ ์ํ๊ด๋ฆฌ ์์คํ ์ ํตํด ์ํ ๋ณํ๊ฐ ๋ฐ์ํด์.
์ํ ์ ๋ฐ์ดํธ -> ์ปดํฌ๋ํธ ๋ ๋๋ง -> Virtual DOM ๋น๊ต ๊ณผ์ ์ด ์ฌ๊ธฐ์ ์ํ์ด ๋ฉ๋๋ค!
2. Bridge๋ฅผ ํตํด ๋ค์ดํฐ๋ธ๋ก ์ ๋ฌ
JavaScript์ ๋ค์ดํฐ๋ธ๋ ์๋ก ๋ค๋ฅธ ํ๊ฒฝ์์ ์คํ๋๋ฏ๋ก, React Native๋ ์ํ๋ณํ๋ UI๋ณ๊ฒฝ ์์ฒญ์ ์ง๋ ฌํํ์ฌ ๋ค์ดํฐ๋ธ๋ก ์ ๋ฌํด์.
3. ๋ค์ดํฐ๋ธ ๋ชจ๋์์ UI๋ณ๊ฒฝ
UI ๋ณ๊ฒฝ ์์ฒญ์ ๋ค์ดํฐ๋ธ ๋ชจ๋(์ฆ, ๋ค์ดํฐ๋ธ ์ฝ๋ ๊ธฐ๋ฐ์ UI์ปดํฌ๋ํธ๋ค)์์ ์คํ๋ฉ๋๋ค.
4. UI Thread์์ ๋ ๋๋ง
UI ์ ๋ฐ์ดํธ์ ๋ ๋๋ง ์์ ์ ๋ค์ดํฐ๋ธ ์ธก์์ UI Thread๋ฅผ ํตํด ์ฒ๋ฆฌ๋ฉ๋๋ค.