๐Ÿ’œ๊ฐœ๋ฐœ๊ณผ ์ผ์ƒ (โ‰ง∇โ‰ฆ)๏พ‰

React Native ๋ž€? ๋ณธ๋ฌธ

web/Node.js Express

React Native ๋ž€?

๊ฐ•์˜์„œ 2022. 8. 10. 12:39

์ด๋ฒˆ์— ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ 2๊ฐœ์— ์ฐธ์—ฌํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

๋‘ ์•ฑ ๊ฐœ๋ฐœ์— ์‚ฌ์šฉํ•  react native์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜๊ณ  ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

 

 

๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ 

- ํŽ˜์ด์Šค๋ถ์—์„œ ๊ณต๊ฐœํ•œ ์˜คํ”ˆ์†Œ์Šค

- ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฆฌ์•กํŠธ ๊ธฐ๋ฐ˜

- iOS์™€ ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ ๋™์ž‘ํ•˜๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ๋ชจ๋ฐ”์ผ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋ ˆ์ž„์›Œํฌ

ex) ํŽ˜์ด์Šค๋ถ, ์ธ์Šคํƒ€๊ทธ๋žจ, ํ•€ํ„ฐ๋ ˆ์ŠคํŠธ๊ฐ€ ์ด๊ฒƒ์œผ๋กœ ๊ฐœ๋ฐœ 

 

์žฅ์ 

- ์›น ๊ฐœ๋ฐœ์ž๊ฐ€ ์ต์ˆ™ํ•œ ๊ธฐ์ˆ (๋ฆฌ์•กํŠธ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ)์„ ์ด์šฉํ•˜์—ฌ ๋ชจ๋ฐ”์ผ ์•ฑ ๊ฐœ๋ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Œ

- ํฌ๋กœ์Šค ํ”Œ๋žซํผ ํ”„๋ ˆ์ž„์›Œํฌ : ๋Œ€๋ถ€๋ถ„์˜ ์ฝ”๋“œ๊ฐ€ ํ”Œ๋žซํผ ๊ฐ„ ๊ณต์œ ๊ฐ€ ๊ฐ€๋Šฅํ•ด์„œ iOS์™€ ์•ˆ๋“œ๋กœ์ด๋“œ๋ฅผ ๋™์‹œ์— ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Œ

- Fast Refresh ๊ธฐ๋Šฅ: ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋น„๋Š” ๋ณ€๊ฒฝ๋œ ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•˜๊ธฐ๋งŒ ํ•ด๋„ ์ž๋™์œผ๋กœ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์ด ์ ์šฉ๋œ ํ™”๋ฉด์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ

 

๋‹จ์ 

- ๋„ค์ดํ‹ฐ๋ธŒ์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ์˜ค๋ž˜ ๊ฑธ๋ฆผ

์•ˆ๋“œ๋กœ์ด๋“œ๋‚˜ iOS์—์„œ ์—…๋ฐ์ดํŠธ๋ฅผ ํ†ตํ•ด ์‹ ๊ทœ API๋ฅผ ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ๊ฐ€ ์ง€์›๊นŒ์ง€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆผ

- ์žฆ์€ ์—…๋ฐ์ดํŠธ. ํ•œ๋‘ ๋‹ฌ ์‚ฌ์ด์— ๋ฒ„์ „์ด ํ•˜๋‚˜์”ฉ ์˜ฌ๋ผ๊ฐ€๋Š” ๊ฒŒ ๊ฐœ๋ฐœ์— ๋ฐฉํ•ด๊ฐ€ ๋  ๋•Œ๋„ ์žˆ๋‹ค

- ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›€. ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ ์›์ธ์„ ์ฐพ๊ณ  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆผ

 

 

<๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ๋™์ž‘ ๋ฐฉ์‹>

Javascript ↔ Bridge ↔ Native

- ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ์—์„œ๋Š” ๊ธฐ๊ธฐ์™€ ํ†ต์‹ ํ•˜๋Š” ๋ชจ๋“  JS์˜ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌ๋œ ์Šค๋ ˆ๋“œ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ ์„ฑ๋Šฅํ–ฅ์ƒ์„ ์ด๋ฃธ

- ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์Šค๋ ˆ๋“œ: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์žฅ์†Œ์ด๋ฉฐ ๋ณดํ†ต ๋ฆฌ์•กํŠธ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Œ

 

๋ธŒ๋ฆฟ์ง€(Bridge)

- ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•ด ๋„ค์ดํ‹ฐ๋ธŒ ๊ณ„์ธต๊ณผ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฐ๊ฒฐํ•˜๋Š” ์—ญํ• 

- ๋ธŒ๋ฆฟ์ง€๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์Šค๋ ˆ๋“œ(thread)์—์„œ ์ •๋ณด๋ฅผ ๋ฐ›์•„ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ์ „๋‹ฌ

 

๋„ค์ดํ‹ฐ๋ธŒ ์˜์—ญ

- ๋ฉ”์ธ ์Šค๋ ˆ๋“œ: UI๋ฅผ ๋‹ด๋‹น

- ์„€๋„(shadow) ์Šค๋ ˆ๋“œ: ๋ ˆ์ด์•„์›ƒ์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ

- ๋„ค์ดํ‹ฐ๋ธŒ ๋ชจ๋“ˆ: ๊ฐ ๋ชจ๋“ˆ์—๋Š” ์ž์ฒด ์Šค๋ ˆ๋“œ๊ฐ€ ์žˆ๋Š”๋ฐ, ์•ˆ๋“œ๋กœ์ด๋“œ์˜ ๊ฒฝ์šฐ thread pool์„ ๊ณต์œ 

DOM

- ๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ(The Document Object Model)๋กœ HTML, XML ๋ฌธ์„œ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ interface, ๋ฌธ์„œ์˜ ๊ตฌ์กฐํ™”๋œ ํ‘œํ˜„

- ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ DOM ๊ตฌ์กฐ์— ์ ‘๊ทผํ•˜์—ฌ ๋ฌธ์„œ ๊ตฌ์กฐ, ์Šคํƒ€์ผ, ๋‚ด์šฉ ๋“ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Œ

- ์›น ํŽ˜์ด์ง€๋ฅผ ์Šคํฌ๋ฆฝํŠธ ๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๊ฒŒ ์—ฐ๊ฒฐํ•˜๋Š” ์—ญํ• 

- DOM์€ ์›น ํŽ˜์ด์ง€์˜ ๊ฐ์ฒด ์ง€ํ–ฅ ํ‘œํ˜„์ด๋ฉฐ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๊ฐ™์€ ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด๋ฅผ ํ†ตํ•ด DOM์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Œ

 

- DOM : ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜๋Š” DOM

- ๊ฐ€์ƒ(virtual) DOM : ํ™”๋ฉด์— ๋ณด์ด์ง€ ์•Š์ง€๋งŒ ๋น„๊ต๋ฅผ ์œ„ํ•ด ์กด์žฌํ•˜๋Š” DOM, ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ•  ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ํ™”๋ฉด์„ ๋‹ค์‹œ ๊ทธ๋ฆผ

  1. ๋ฐ์ดํ„ฐ์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊น€
  2. ๋ณ€ํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ€์ƒ DOM์„ ๊ทธ๋ฆผ
  3. ๊ฐ€์ƒ DOM๊ณผ ์‹ค์ œ DOM์„ ๋น„๊ตํ•˜์—ฌ ์ฐจ์ด์ ์„ ํ™•์ธ
  4. ์ฐจ์ด์ ์ด ์žˆ๋Š” ๋ถ€๋ถ„๋งŒ ์‹ค์ œ DOM์— ์ ์šฉํ•˜์—ฌ ๊ทธ๋ฆผ

 

JSX ( JavaScript XML )

 

- ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ™•์žฅ ๋ฌธ๋ฒ•์œผ๋กœ XML์™€ ๋น„์Šทํ•จ

- JSX๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ณด๋‹ค ๊ฐ€๋…์„ฑ์ด ์ข‹๊ณ  ์˜ค๋ฅ˜ ๊ฒ€์‚ฌ์—๋„ ์šฉ์ดํ•จ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ ์•ˆ์— UI ์ž‘์—…์„ ํ•  ๋•Œ ๊ฐ€๋…์„ฑ์ด ์ข‹๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์•กํŠธ์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•จ

- JSX๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋Š” ๋ฐ”๋ฒจ(Babel)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜

 

๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ์—์„œ ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ์›น(React Native for web)์„ ๋ฐœํ‘œํ•˜๋ฉด์„œ ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ์›น ๊ฐœ๋ฐœ๊นŒ์ง€ ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.