๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
JavaScript/React

[React] SPA ๋ž€?

by soy๋ฏธ๋‹ˆ 2021. 11. 8.

 

 

SPA(Single Page Application) : ํ•œ ๊ฐœ์˜ ํŽ˜์ด์ง€๋กœ ์ด๋ฃจ์–ด์ง„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

 

์ „ํ†ต์ ์ธ ์›น ๋ฐฉ์‹(SSR : ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง) ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด html ์„ ๋ฐ›์•„์˜ค๊ณ  ํŽ˜์ด์ง€๋ฅผ ๋กœ๋”ฉํ•  ๋•Œ๋งˆ๋‹ค ์„œ๋ฒ„์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ „๋‹ฌ๋ฐ›์•„ ํ•ด์„ํ•œ ๋’ค ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ์‹์ด์—ˆ๋‹ค. ์ฆ‰, ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” ํ™”๋ฉด์€ ์„œ๋ฒ„์—์„œ ์ค€๋น„ํ–ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ ์ „ํ†ต์ ์ธ ์›น ๋Œ€๋ถ€๋ถ„์€ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ๋ฐฉ์‹์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์š”์ฆ˜์—๋Š” ์›น์—์„œ ์ œ๊ณตํ•˜๋Š” ์ •๋ณด๊ฐ€ ์ •๋ง ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ํ™”๋ฉด์„ ๋ณด์—ฌ์ค„ ๋•Œ๋งˆ๋‹ค ์„œ๋ฒ„์—์„œ ๋ชจ๋“  ๋ทฐ๋ฅผ ์ค€๋น„ํ•œ๋‹ค๋ฉด ์„ฑ๋Šฅ์ƒ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. (ํŠธ๋ž˜ํ”ฝ, ์„œ๋ฒ„์— ๋†’์€ ๋ถ€ํ•˜ ๋“ฑ)

 

๊ทธ๋ž˜์„œ ๋ฆฌ์•กํŠธ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜น์€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ทฐ ๋ Œ๋”๋ง์„ ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ด๋‹นํ•˜๋„๋ก ํ•˜๊ณ  ์šฐ์„  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ธŒ๋ผ์šฐ์ €์— ๋ถˆ๋Ÿฌ์™€์„œ ์‹คํ–‰์‹œํ‚จ ํ›„ ์‚ฌ์šฉ์ž์™€์˜ ์ธํ„ฐ๋ž™์…˜์ด ๋ฐœ์ƒํ•˜๋ฉด ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.

 

 

SPA ์˜ ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง (CSR : ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง) ๋ฐฉ์‹์ด๋‹ค. ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ํŽ˜์ด์ง€๋Š” ํ•œ ์ข…๋ฅ˜์ด์ง€๋งŒ, ํ•ด๋‹น ํŽ˜์ด์ง€์—์„œ ๋กœ๋”ฉ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ํ˜„์žฌ ์‚ฌ์šฉ์ž ๋ธŒ๋ผ์šฐ์ €์˜ ์ฃผ์†Œ ์ƒํƒœ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ํ™”๋ฉด์„ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค.

 

๋‹ค๋ฅธ ์ฃผ์†Œ์— ๋‹ค๋ฅธ ํ™”๋ฉด์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์„ ๋ผ์šฐํŒ…์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋ฆฌ์•กํŠธ ๋ผ์šฐํŒ… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ, ๋ฆฌ์น˜ ๋ผ์šฐํ„ฐ, Next.js ๋“ฑ์ด ์žˆ๋‹ค. ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ๋Š” ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ์—์„œ ์ด๋ฃจ์–ด์ง€๋Š” ๋ผ์šฐํŒ…์„ ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ฉฐ ๋” ๋‚˜์•„๊ฐ€ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์„ ํ•  ๋•Œ ๋ผ์šฐํŒ…์„ ๋„์™€์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

SPA ์˜ ๋‹จ์ ์€ ์•ฑ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์ด ๋„ˆ๋ฌด ์ปค์ง„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์‹œ ์‚ฌ์šฉ์ž๊ฐ€ ์‹ค์ œ๋กœ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋Š” ํŽ˜์ด์ง€์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

 

 

 

 

Link ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์ฃผ์†Œ๋กœ ์ด๋™ํ•˜๊ธฐ

 

Link ์ปดํฌ๋„ŒํŠธ๋Š” ํด๋ฆญํ•˜๋ฉด ๋‹ค๋ฅธ ์ฃผ์†Œ๋กœ ์ด๋™ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ด๋‹ค. ์ผ๋ฐ˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” a ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜์ด์ง€๋ฅผ ์ „ํ™˜ํ•˜๋Š”๋ฐ, ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ด ํƒœ๊ทธ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋œ๋‹ค. a ํƒœ๊ทธ๋Š” ํŽ˜์ด์ง€๋ฅผ ์ „ํ™˜ํ•˜๋Š” ๊ณผ์ •์—์„œ ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋“ค๊ณ  ์žˆ๋˜ ์ƒํƒœ๋“ค์„ ๋ชจ๋‘ ๋‚ ๋ฆฌ๊ฒŒ ๋œ๋‹ค. ๋ Œ๋”๋ง๋œ ์ปดํฌ๋„ŒํŠธ๋“ค๋„ ๋ชจ๋‘ ์‚ฌ๋ผ์ง€๊ณ  ๋‹ค์‹œ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ Œ๋”๋งํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. 

 

Link ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜์ด์ง€๋ฅผ ์ „ํ™˜ํ•˜๋ฉด ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•œ ์ƒํƒœ์—์„œ HTML5 History API ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜์ด์ง€์˜ ์ฃผ์†Œ๋งŒ ๋ณ€๊ฒฝํ•œ๋‹ค. Link ์ปดํฌ๋„ŒํŠธ ์ž์ฒด๋Š” a ํƒœ๊ทธ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์ง€๋งŒ ํŽ˜์ด์ง€ ์ „ํ™˜์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ๋‹ค.

 

 

 

 

 

๋Œ“๊ธ€