Capstone#8. React Native ์ž‘๋™ ์›๋ฆฌ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž! ( 4๊ฐ€์ง€์˜ Thread, Bridge, ์ƒํƒœ๊ด€๋ฆฌ๊ฐ€ ์ด๋ฃจ์–ด์งˆ ๋•Œ Thread)

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๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.