React SPA

hyena_leeยท2023๋…„ 1์›” 25์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
3/10
post-thumbnail

๐ŸŒ– React๋ž€ ๋ฌด์—‡?

React๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.
๋ฆฌ์•กํŠธ๋Š” ์ธํ„ฐ๋ ‰์…˜์ด ๋งŽ์€ ์›น ์•ฑ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๊ธฐ์— ์ด๋Ÿฌํ•œ ์›น ์•ฑ์„ ๋งŒ๋“œ๋Š” ๋‹ค๋ฅธ Tool์ธ Vue๋‚˜ Angualar์™€ ๋งŽ์ด ๋น„๊ต๋ฅผ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

โ–ถ๏ธํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฐจ์ด?

ํ”„๋ ˆ์ž„ ์›Œํฌ๋Š” ์–ด๋– ํ•œ ์•ฑ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์–ด๋– ํ•œ ํŠน์ • ๊ธฐ๋Šฅ์„ ๋ชจ๋“ˆํ™” ํ•ด๋†“์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ์œ„์— ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ํ”„๋ ˆ์ž„ ์›Œํฌ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•˜๊ณ  ๋˜ํ•œ ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์†Œ์Šค ์ฝ”๋“œ๋Š” ์–ด๋– ํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


์ด๋ ‡๊ฒŒ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์•ฑ์„ ๋งŒ๋“œ๋Š”๋ฐ ํ•„์š”ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์€ ํŠน์ • ๊ธฐ๋Šฅ์„ ์œ„ํ•ด ๋ชจ๋“ˆํ™” ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”ถ๋ฆฌ์•กํŠธ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์•„๋‹Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๋ฆฌ์•กํŠธ๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ ์ด์œ ๋Š” ๋ฆฌ์•กํŠธ๋Š” ์ „์ ์œผ๋กœ UI๋ฅผ ๋ Œ๋”๋ง ํ•˜๋Š” ๋ฐ ๊ด€์—ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ํ™”๋ฉด์„ ๋ฐ”๊พธ๋Š” ๋ผ์šฐํŒ…์€ react-router-dom ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ๋Š” redux, mobx ๋“ฑ ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋นŒ๋“œ๋ฅผ ์œ„ํ•ด์„œ๋Š” webpack, npm ๋“ฑ๋“ฑ, ํ…Œ์ŠคํŒ…์„ ์œ„ํ•ด์„œ๋„ Eslint, Mocha ๋“ฑ์„ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์•กํŠธ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์•„๋‹Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

๐ŸŒ– ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ

๋ฆฌ์•กํŠธ๋Š” ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ์›น ์•ฑ์„ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?!

  • ์ปดํฌ๋„ŒํŠธ: ๋ฆฌ์•กํŠธ๋กœ ๋งŒ๋“ค์–ด์ง„ ์•ฑ์„ ์ด๋ฃจ๋Š” ์ตœ์†Œํ•œ์˜ ๋‹จ์œ„

๋ฆฌ์•กํŠธ๋Š” ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ ์กฐ๊ฐ์œผ๋กœ ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.
๋งŒ์•ฝ ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€๋ฅผ ๋ฆฌ์•กํŠธ๋กœ ๋งŒ๋“ ๋‹ค๊ณ  ๋ณด๋ฉด ์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ชจ์—ฌ์„œ ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€๋ฅผ ์ด๋ฃจ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์›๋ž˜ ๋ฆฌ์•กํŠธ๋กœ ๊ฐœ๋ฐœํ•  ๋•Œ๋Š” ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ๋งŽ์ด ๊ฐœ๋ฐœ์„ ํ–ˆ์ง€๋งŒ ๋ฆฌ์•กํŠธ์—์„œ ๋ฆฌ์•กํŠธ Hooks๋ผ๋Š” ๊ฒƒ์„ ๋ฐœํ‘œํ•œ ์ดํ›„๋ถ€ํ„ฐ๋Š” ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐœ๋ฐœ์„ ๋งŽ์ด ํ•ฉ๋‹ˆ๋‹ค.


๐ŸŒ– ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ทธ๋ ค์ง€๋Š” ์›๋ฆฌ ๋ฐ ๊ฐ€์ƒ๋”

๋ฆฌ์•กํŠธ์˜ ์ฃผ์š” ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ๊ฐ€์ƒ(Virtual)๋”์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ทธ๋Ÿผ ๊ฐ€์ƒ๋”์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ด์•ผํ•˜๋Š”๋ฐ ์šฐ์„  ๊ฐ€์ƒ๋”์„ ์™œ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ๊ธฐ ์œ„ํ•ด์„œ
๋จผ์ € ์‹ค์ œ(Real) ๋”(DOM)์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ Œ๋”๋งํ•˜๋Š” ๊ณผ์ •์— ๋Œ€ํ•ด์„œ๋„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ”นHTML ์„ ์ด์šฉํ•œ ํ™”๋ฉด์— UI ํ‘œํ˜„ํ•˜๊ธฐ

๋ธŒ๋ผ์šฐ์ €์—์„œ UI๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์ด HTML ์„ ๋ถ„์„ํ•ด์„œ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด HTML์€ ์š”์†Œ(Element)๋“ค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๐ŸŒž ๋” ์ด๋ž€? (Document Object Model)

์œ„์—์„œ ๋ณด๋Š” ์›น ํŽ˜์ด์ง€๋ฅผ ์ด๋ฃจ๋Š” ์š”์†Œ๋“ค์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํŠธ๋ฆฌ๊ตฌ์กฐ๋กœ ๋งŒ๋“  ๊ฐ์ฒด ๋ชจ๋ธ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

โ–ถ๏ธ๋” ์กฐ์ž‘

์œ„์— ๋ณด์ด๋Š” DOM ํŠธ๋ฆฌ๋ฅผ DOM ์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” API๋ฅผ ์ด์šฉํ•ด์„œ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด API๋ฅผ ์ด์šฉํ•ด์„œ DOM ๊ตฌ์กฐ์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ์›ํ•˜๋Š” ์š”์†Œ(Element)๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์—†์• ๊ฑฐ๋‚˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐ŸŒ– ์›น ํŽ˜์ด์ง€ ๋นŒ๋“œ ๊ณผ์ •(Critical Rendering Path CRP)

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„์—์„œ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ HTML ์‘๋‹ต์„ ๋ฐ›๊ณ  ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๊ธฐ ์ „์— ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML ๋ฌธ์„œ๋ฅผ ์ฝ๊ณ , ์Šคํƒ€์ผ ์ž…ํžˆ๊ณ  ๋ทฐํฌํŠธ์— ํ‘œ์‹œํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

โ–ถ๏ธ๊ทธ๋Ÿผ ๊ฐ€์ƒ๋”์€ ์–ด๋– ํ•œ ์‹์œผ๋กœ ์ž‘๋™ ๋ ๊นŒ์š”?

๋ฆฌ์•กํŠธ์—์„œ๋Š” ํ•ญ์ƒ ๋ Œ๋”๋ง ์ด์ „์˜ ๊ฐ์ฒด(๊ฐ€์ƒ๋”)์™€ ๋ Œ๋”๋ง ์ดํ›„์˜ ๊ฐ์ฒด(๊ฐ€์ƒ๋”)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฆฌ์•กํŠธ์—์„œ๋Š” ์–ด๋– ํ•œ State(๋ฐ์ดํ„ฐ)๊ฐ€ ๋ฐ”๋€Œ๋ฉด ๊ฐ€์ƒ๋”์ด ์ƒˆ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์„ ์ด์ „์— ์ƒ๊ธด ๊ฐ€์ƒ๋”๊ณผ ๋น„๊ตํ•ด์„œ ๋ฐ”๋€ ๋ถ€๋ถ„๋งŒ ์‹ค์ œ ๋”์— ์ ์šฉ์„ ์‹œ์ผœ์ค๋‹ˆ๋‹ค.
๋ฐ”๋€ ๋ถ€๋ถ„์„ ์ฐพ๋Š” ๊ณผ์ •์„ Diffing์ด๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ,
๋ฐ”๋€ ๋ถ€๋ถ„๋งŒ ์‹ค์ œ ๋”์— ์ ์šฉ์‹œ์ผœ์ฃผ๋Š” ๊ฒƒ์„ ์žฌ์กฐ์ •(reconciliation)์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

๐ŸŒŽ ๊ฒฐ๋ก 

React ๋Š” Reconciliation์„ ํ†ตํ•ด์„œ ๋งŒ์•ฝ ์—ด๊ฐœ์˜ State๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ•œ๋‹ค๋ฉด DOM์„ ์—ด๋ฒˆ ๋ฐ˜๋ณตํ•ด์„œ ์กฐ์ž‘ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹Œ Virtual DOM์„ ๋น„๊ตํ•ด์„œ ํ•œ๋ฒˆ์˜ DOM ์กฐ์ž‘์œผ๋กœ ๋ชจ๋“  ๋ณ€ํ™”๋ฅผ ๋ฐ˜์˜์‹œ์ผœ์ค๋‹ˆ๋‹ค.

๐ŸŒณ ์ •๋ฆฌ

  1. ๋ฆฌ์•กํŠธ์˜ ๊ฐ€์ƒ๋”์€ ์‹ค์ œ DOM๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ์œผ๋ฉฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ณต์‚ฌ๋ณธ์ž…๋‹ˆ๋‹ค.

  2. ๋ฆฌ์•กํŠธ๋Š” ๋ Œ๋”๋ง ์ด์ „์˜ ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ๋Š” ๊ฐ€์ƒ๋”๊ณผ ๋ณ€๊ฒฝ ์ดํ›„์— ๋ณด์ผ ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ๋Š” ๊ฐ€์ƒ๋”์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ๋ณ€๊ฒฝ์ด ๋˜๊ธฐ ์ „ ๊ฐ€์ƒ๋”๊ณผ ๋ณ€๊ฒฝ์ด ๋œ ํ›„์˜ ๊ฐ€์ƒ๋”์„ ๋น„๊ตํ•˜๋Š” ๊ณผ์ •์„ Diffing์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

  4. Diffing์„ ํ†ตํ•ด์„œ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋“ค์„ ํŒŒ์•…ํ•œ ํ›„, ๋ฆฌ์•กํŠธ๋Š” Batch Update๋ฅผ ์ˆ˜ํ–‰ํ•ด์„œ ์‹ค์ œ DOM์— ํ•œ ๋ฒˆ์— ์ ์šฉ์‹œ์ผœ์ค๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ์žฌ์กฐ์ •(Reconciliation)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.


๐ŸŒ– SPA(Single Page Application)

์ „ํ†ต์ ์ธ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•˜๋Š” Multi Page Application ์ž…๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์š”์ฆ˜์—๋Š” ์›น ์‚ฌ์ดํŠธ์˜ ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€์— ๋‹ด์•„ ๋™์ ์œผ๋กœ ํ™”๋ฉด์„ ๋ฐ”๊ฟ”๊ฐ€๋ฉฐ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ SPA Single Page Application์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

โ–ถ๏ธSPA์—์„œ ํ™”๋ฉด ๋ณ€๊ฒฝ์€ ์–ด๋–ป๊ฒŒ ์ผ์–ด๋‚˜๋Š” ๊ฑธ๊นŒ?

์ „ํ†ต์ ์ธ ์›น ์‚ฌ์ดํŠธ๋Š” a page ์—์„œ b page๋กœ ํŽ˜์ด์ง€ ์ „ํ™˜ ํ•  ๋•Œ a.html ์„ ๋ณด์—ฌ์ฃผ๋‹ค๊ฐ€ b.html์„ ๋ณด์—ฌ ์ฃผ๋ฉด ๋์ง€๋งŒ index.html ๋ฐ–์— ์—†๋Š” SPA์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ํŽ˜์ด์ง€ ์ „ํ™˜(๋ธŒ๋ผ์šฐ์ง•)์„ ํ•ด์ค„๊นŒ์š”?
HTML 5์˜ History API๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์˜์—ญ์—์„œ History API๋ฅผ ์ด์šฉํ•ด์„œ ํ˜„์žฌ ํŽ˜์ด์ง€ ๋‚ด์—์„œ ํ™”๋ฉด ์ด๋™์ด ์ผ์–ด๋‚œ ๊ฒƒ์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

โ–ถ๏ธ์ „ํ†ต์ ์ธ ์›น์‚ฌ์ดํŠธ์˜ ํ•œ๊ณ„

์œ ์ €๊ฐ€ ํ•œ ์›น์‚ฌ์ดํŠธ๋‚ด์—์„œ ๋‹ค๋ฅธ ์›นํŽ˜์ด์ง€๋กœ ์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ html ํŒŒ์ผ๋กœ ๋œ "ํŽ˜์ด์ง€ ์ „์ฒด"๋ฅผ ๋ถˆ๋Ÿฌ์™€์•ผํ•จ(MPA)

=> ์˜ค๋ž˜ ๊ฑธ๋ฆผ, ํ™”๋ฉด์ด "๊นœ๋นก์ž„" => ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ ๋Š๋ฆฐ ๋ฐ˜์‘์„ฑ => ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์งˆ ์ €ํ•˜
=> ํŽ˜์ด์ง€ ์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋‹ค๋ณด๋‹ˆ Header๋‚˜ Nav ๊ฐ™์€ ์ค‘๋ณต๋˜๋Š” ์š”์†Œ๋ฅผ ๋งค๋ฒˆ ๋ถ€๋ฅด๋ฉด,, ์„œ๋ฒ„์™€์˜ ๋ถˆํ•„์š”ํ•œ ํŠธ๋ž˜ํ”ฝ ๋ฐœ์ƒ

SPA ๋“ฑ์žฅ
ํŽ˜์ด์ง€ ์ „ํ™˜ํ•  ๋•Œ HTML ๋ฌธ์„œ ์ „์ฒด๊ฐ€ ์•„๋‹Œ, ์—…๋ฐ์ดํŠธ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์„œ๋ฒ„์—์„œ ์ „๋‹ฌ๋ฐ›์•„ ์ด ๋ฐ์ดํ„ฐ๋ฅผ JavaScript๊ฐ€ ๋™์ ์œผ๋กœ HTML ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•ด์„œ ํ™”๋ฉด์— ๋ณด์—ฌ์คŒ

๐Ÿ‘‰SPA ์žฅ์ 

์‚ฌ์šฉ์ž์˜ ํ–‰๋™์— ๋น ๋ฅด๊ฒŒ ๋ฐ˜์‘ํ•จ => ์‚ฌ์šฉ์ž์™€์˜ ๋น ๋ฅธ ์ƒํ˜ธ์ž‘์šฉ์ด ๊ฐ€๋Šฅํ•จ

์„œ๋ฒ„ ๊ณผ๋ถ€ํ•˜ ๋ฌธ์ œ ์™„ํ™” => ์š”์ฒญ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋งŒ ๋„˜๊ฒจ์ฃผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์ž„

ํ™”๋ฉด์ด ๊นœ๋นก์ด์ง€ ์•Š์Œ => ๋” ๋‚˜์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ œ๊ณต

**SPA ๋Œ€ํ‘œ์‚ฌ๋ก€
Youtube, facebook, Gmail, airbnb, Netflix

๐Ÿ‘‰SPA ๋‹จ์ 

  • JSํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ํผ => ์ฒซ ํ™”๋ฉด ๋กœ๋”ฉ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง
  • ๊ฒ€์ƒ‰์—”์ง„ ์ตœ์ ํ™” ๐Ÿ’ฉ
    - ๊ตฌ๊ธ€, ๋„ค์ด๋ฒ„ ๊ฐ™์€ ๊ฒ€์ƒ‰ ์—”์ง„์€ html ๋ฌธ์„œ ๋‚ด์˜ ๊ฐ์ข… ํƒœ๊ทธ๋‚˜, ๋งํฌ๋ฅผ ๋ถ„์„ํ•จ.
    - SPA์˜ ๊ฒฝ์šฐ, htmlํŒŒ์ผ์ด ๋น„์–ด ์žˆ๋‹ค๋ณด๋‹ˆ ๊ฒ€์ƒ‰ ๋กœ๋ด‡์ด ์ถฉ๋ถ„ํ•œ ์ž๋ฃŒ๋ฅผ ์ˆ˜์ง‘ํ•˜์ง€ ๋ชปํ•จ
    - ๋”ฐ๋ผ์„œ, ๊ฒ€์ƒ‰ ๋…ธ์ถœ์ด ์ค‘์š”ํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋Œ€์‘์ฑ…์„ ๋”ฐ๋กœ ๋งˆ๋ จํ•ด์•ผ => ๊ฐœ๋ฐœ์˜ ๋ณต์žก๋„ ์ฆ๊ฐ€

๐ŸŒ– Wireframe

  • ๋””์ž์ธ ๋“ค์–ด๊ฐ€๊ธฐ ์ „ ๋‹จ๊ณ„
  • ์„ (wire)๋ฅผ ์ด์šฉํ•ด ์œค๊ณฝ์„ (frame)์„ ์žก๋Š” ๊ฒƒ
    => ์›นํŽ˜์ด์ง€์˜ ๋ ˆ์ด์•„์›ƒ๊ณผ UI์š”์†Œ ๋“ฑ์— ๋Œ€ํ•œ ๋ผˆ๋Œ€
    => ๋””์ž์ธ ์ปจ์…‰๊ณผ ์‚ฌ์ดํŠธ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Œ

**Mockup
๋ฐ๋ชจ ์‹œ์—ฐ, ํ‰๊ฐ€๋ฅผ ์œ„ํ•œ ์ตœ์†Œํ•œ์˜ ๊ธฐ๋Šฅ๋งŒ ๋‹ด์€ ๋ชจํ˜•
๋ฐ์Šคํฌํ†ฑ, ์Šค๋งˆํŠธํฐ์˜ ํ”„๋ ˆ์ž„์„ ๋ง์”Œ์›Œ ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋””์ž์ธํ•œ ๊ฒƒ

**React๋ฅผ ์ด์šฉํ•ด ์œ ํˆฌ๋ธŒ ์•ฑ์„ ๋งŒ๋“ ๋‹ค๋ฉด?
๋ฐ”๋กœ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ๋ณด๋‹ค, ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ์ด๋“ค์„ ์–ด๋–ป๊ฒŒ ์กฐํ•ฉํ• ์ง€๋ถ€ํ„ฐ ๊ตฌ์ƒํ•ด์•ผ ํ•จ

์™€ ๊ทธ์˜ ์ž์‹: ,

Header ์ปดํฌ๋„ŒํŠธ๋Š” ํ•ญ์ƒ ํ™”๋ฉด ์ƒ๋‹จ์— ์œ„์น˜ํ•จ.
=> ํ•œ ๋ฒˆ๋งŒ ๋งŒ๋“ค์–ด์„œ ๋ชจ๋“  ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค๊ณ„๋กœ์ง ์ž‘์„ฑ

์™€ ๊ทธ์˜ ์ž์‹ :

ํ™”๋ฉด ์ค‘์•™์˜ ContentsList ์ปดํฌ๋„ŒํŠธ๋Š” ์˜์ƒ์„ ๋‹ด๋Š” ์—ญํ• ์„ ํ•จ

๊ทธ ์•ˆ์—๋Š” ๋™์ผํ•œ ๋ ˆ์ด์•„์›ƒ์˜ ์˜์ƒ๋ฌผ๋“ค์ด ๋ฐ˜๋ณต์ ์ธ ํ˜•ํƒœ๋กœ ์กด์žฌํ•จ => ์ž์‹ Content ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•œ ๋ฒˆ๋งŒ ๋งŒ๋“ค์–ด ์žฌ์‚ฌ์šฉ

: ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„์˜ ์ปดํฌ๋„ŒํŠธ, ๊ฐ€์žฅ ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์Œ

Content ์ปดํฌ๋„ŒํŠธ ์ƒ๋‹จ : Thumbnail
Content ์ปดํฌ๋„ŒํŠธ ์ค‘์•™ : Avatar, ์˜์ƒ์†Œ๊ฐœ์ œ๋ชฉ
Content ์ปดํฌ๋„ŒํŠธ ํ•˜๋‹จ : ์ฑ„๋„์ด๋ฆ„, ์กฐํšŒ์ˆ˜, ์—…๋กœ๋“œํ•œ๋‚ ์งœ
Content ์ปดํฌ๋„ŒํŠธ๋Š” ์˜์ƒ๊ณผ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„(๊ฐ์ฒดํ˜•ํƒœ{์†์„ฑ&๊ฐ’}), UI์— ๋งž๊ฒŒ ํ™”๋ฉด์— ์ถœ๋ ฅํ•ด ์คŒ

๊ทผ๋ฐ ์ด ๋ฐ์ดํ„ฐ๋Š” ํ•ด๋‹น ์˜์ƒ์„ ๋ˆŒ๋Ÿฌ ์‹œ์ฒญํ•˜๊ณ  ์žˆ์„ ๋•Œ๋„, ๋‹ค๋ฅธ ์˜์ƒ์„ ์‹œ์ฒญํ•  ๋•Œ ์ถ”์ฒœ์˜์ƒ์œผ๋กœ์„œ ๋Œ€๊ธฐ ๋ชฉ๋ก์— ๋œฐ ๋•Œ๋„ ๋™์ผํ•œ ๋‚ด์šฉ์ด ํ™”๋ฉด์— ์ถœ๋ ฅ๋จ

์–ด๋–ค ์ƒํƒœ๋กœ ์žˆ๋Š๋ƒ์— ๋”ฐ๋ผ ์ถœ๋ ฅ๋˜๋Š” ์œ„์น˜๋งŒ ์กฐ๊ธˆ์”ฉ ๋‹ฌ๋ผ์งˆ ๋ฟ์ž„

์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ฐ์ž ๊ณ ์œ ์˜ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ์ •์˜? ๋งž๋Š” ๋ง์ด์ง€๋งŒ, ๋” ๊ณ ์ฐจ์›์˜ ๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ์ž๋ผ๋ฉด,,

๊ทธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•ˆ์—์„œ ๋‹ค๋ค„์ง€๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ปดํฌ๋„ŒํŠธ๋“ค๋ผ๋ฆฌ ๋ณด๋‹ค ์œ ๊ธฐ์ ์œผ๋กœ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ

profile
์‹ค์ˆ˜๋ฅผ ๋‘๋ ค์›Œ ๋ง๊ณ  ๊ณ„์† ๋„์ „ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์˜ ์—ฌ์ •!

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด