SPA (Single Page Application)
Last updated
Last updated
์น ํ๋ก ํธ์ค๋ ๊ฐ๋ฐ์๊ฐ ์ฃผ๋ก ์ฌ์ฉํ๋ React, Vue, Angular๋ SPA(Single Page Application)์ด๋ค. ๊ทธ๋ ๋ค๋ฉด SPA๋ ๋ฌด์์ผ๊น? SPA๋ฅผ ๊ณผ๊ฑฐ์ ์น ํ์ด์ง ํํ(MPA, Multi Page Application)์ ๋น๊ตํ๋ฉฐ SPA์ ํน์ง๊ณผ ์ฅ์ ๋ฐ ๋จ์ ์ ์ดํด๋ณด์.
MPA๋ ์ ํต์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ๋ฐฉ์์ด๋ค. ์ด๋ฌํ ๊ตฌ์กฐ๋ jsp, ํน์ php ๋ฑ๊ณผ ๊ฐ์ ์น ์๋ฒ ์ธ์ด๋ก ๊ตฌ์ถ๋ ์น์ฌ์ดํธ์์ ๋ง์ด ๋ณด์ธ๋ค. ์น ๋ธ๋ผ์ฐ์ (Client)์์ ํน์ ํ์ด์ง๋ฅผ ์์ฒญ์ ์๋ฒ์ ๋ณด๋ด๋ฉด, ์๋ฒ๋ ๋ฐ์ดํฐ๋ฅผ HTML ๋ฌธ์๋ก ์น ๋ธ๋ผ์ฐ์ (Client)์๊ฒ ๋ณด๋ธ๋ค. ์๋ฒ์์ HTML ๋ฌธ์๋ฅผ ๋ณด๋ผ ๋ ๋ง๋ค ์ ์ฒด ํ์ด์ง๊ฐ ๋ค์ ๋ถ๋ฌ์์ง๋ฏ๋ก ํ๋ฉด์ ๊น๋นก๊ฑฐ๋ฆฌ๊ฒ ๋๋ค. ์ด๋ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ์ฌ์ฉ์์ ์ ์ฅ์์๋ ์ข์ง ์๋ ๊ฒฝํ์ผ ๊ฒ์ด๋ค. ๋ง์ฝ ๋ถ๋ฌ์ค๊ฒ ๋๋ ๋ฐ์ดํฐ์ ์์ด ๋ง๋ค๋ฉด ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ๋ถ๋ฌ์ฌ ๋ ๊น์ง ์ฐ๋ฆฌ๊ฐ ๋ณผ ์ ์๋ ํ์ด์ง๋ ์๋ฌด๊ฒ๋ ์๋ ํฐ ํ์ด์ง์ด๋ค.
๋ํ ํ๋ก ํธ์๋์ ๋ฐฑ์๋๊ฐ ์๋ก ๋ฐ์ ํด๊ฒ ์ฐ๊ด๋์ด ๊ฐ๋ฐ์ด ๋ณต์กํด์ง ์ ์๋ค.
ํ์ง๋ง MPA์๋ ์ฅ์ ์ด ์๋ค.
SEO ์นํ์ : ์์ฑ๋ ํํ์ HTMLํ์ผ์ ์๋ฒ๋ก๋ถํฐ ์ ๋ฌ ๋ฐ๊ธฐ ๋๋ฌธ์ ๋ค์ด๋ฒ๋ ๊ตฌ๊ธ ๊ฐ์ ๊ฒ์ ์ฌ์ดํธ์ ๋ ธ์ถ๋๋ ๊ฒ์ด ์ค์ํ ์น์ฌ์ดํธ๋ผ๋ฉด MPA ๊ตฌ์กฐ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ํฉํ๋ค.
SEO(๊ฒ์ ์์ง ์ต์ ํ)๋ ์น์ฌ์ดํธ๊ฐ ๊ฒ์ ๊ฒฐ๊ณผ์ ๋ ์ ๋ณด์ด๋๋ก ์ต์ ํ ํ๋ ๊ณผ์ ์ด๋ค. hํ๊ทธ, ๋ฉํํ๊ทธ, ์ด๋ฏธ์ง ์ต์ ํ, ์ฝํ ์ธ ์ต์ ํ, ๊ธ์์ ์, ๋ด๋ถ๋งํฌ๋ฑ์ ์์๋ฅผ ์์ ํ์ฌ ๊ฒ์ ์์ง์ ์ต์ ํ ํ๋ค. ์ฐธ๊ณ - ๊ฒ์ ์์ง ์ต์ ํ
๋งค์ฐ ์งง์ ์ฒซ ๋ก๋ฉ: ์๋ฒ์์ ์ด๋ฏธ ๋๋๋งํ์ฌ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ, ํ์ง๋ง Client๊ฐ JSํ์ผ์ ๋ชจ๋ ๋ค์ด๋ก๋ํ๊ณ ์ ์ฉํ๊ธฐ ์ ๊น์ง๋ ๊ฐ๊ฐ์ ๊ธฐ๋ฅ์ ๋์ํ์ง ์๋๋ค.
์๋ฒ์ ๋ถํ
๊ณผ๊ฑฐ์ ์น ํ์ด์ง์์ ๋ธ๋ผ์ฐ์ ๋ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๊ธฐ๋ง ํ ๋ฟ์ด๋ค. ์์ฒญํ ์น ๋ฌธ์์ ๋ํ ์ฒ๋ฆฌ๋ ์ ๋ถ ์๋ฒ์์ ๋ด๋นํ๊ธฐ ํ์ด์ง๋ฅผ ์์ฒญํ ๋ ๋ง๋ค ์๋ฒ์ ๋ถํ๊ฐ ์๊ฒผ๋ค.
SPA๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ํ ์ ์ ๋ฆฌ์์ค(Html, Css, Javascript)๋ฅผ ์ต์ด ์ ๊ทผ ์ ๋จ ํ ๋ฒ๋ง ๋ค์ด๋ก๋ํ๋ค. ์ดํ ์๋ฒ๋ ๋ธ๋ผ์ฐ์ ์ ํ์ํ ์ ๋ณด์ ๋ํ ์์ฒญ(Ajax)์ด ์ค๋ฉด ์๋ต(Json)๋ง ์ฃผ๊ธฐ ๋๋ฌธ์ ์๋ฒ์ ๋ถํ๋ฅผ ์ค์ผ ์ ์๋ค.
๋ชจ๋ฐ์ผ ์ต์ ํ
์จ๋ผ์ธ ์ธ์์์ ๋ชจ๋ฐ์ผ์ ์ค์์ฑ์ด ์ปค์ง๋ฉด์ ๋ชจ๋ฐ์ผ ์ต์ ํ์ ๋ํ ๋์ฆ๋ฅผ ์ถฉ์กฑํด์ผ ํ๋ค. ๋ชจ๋ฐ์ผ ์น์ด MPA ๋ฐฉ์์ผ๋ก ๊ตฌํ๋๋ค๋ฉด, ์๋ง์ ํ์ด์ง๋ฅผ ์ด๋ํ ๋, ํ์ด์ง๋ฅผ ๋ฆฌ๋๋๋ง ํด์ผ ํ๋ฏ๋ก ์ฌ์ฉ์ ๊ฒฝํ(UX)์ด ๊ฐ์ํ ๊ฒ์ด๋ค.
SPA์์๋ ์์ ๋ ๋ถ๋ถ๋ง ๋ ๋๋ง ํ๊ธฐ ๋๋ฌธ์, ๊ธฐ์กด์ ์น ํ์ด์ง๋ณด๋ค UX๊ฐ ํฅ์๋๋ค.
SPA๋ ํ ๊ฐ(Single)์ Page๋ก ๊ตฌ์ฑ๋ Application์ผ๋ก ์ต์ด ๋จ ํ ๋ฒ๋ง ๋ฆฌ์์ค(HTML, CSS, Javascript)๋ฅผ ๋ก๋ฉํ๊ณ ์ดํ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ๋๋ง ์๋ฒ์ ํต์ ํ๋ค.
์ต์ด ๋ก๋ฉ ๋ ์คํํ HTMLํ์ผ์์ ๋ณ๊ฒฝ๋์ง ์๋ ๋ถ๋ถ์ ๊ทธ๋๋ก ๋๊ณ ๋ณ๊ฒฝ๋๋ ๋ถ๋ถ๋ง ๋ค์ ๋ ๋๋งํ์ฌ ํจ์จ์ ์ธ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค. ์ด๋ SPA์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ด๋ฉฐ ์๋ก๊ณ ์นจ์ด ๋์ง ์๊ณ ๋ณ๊ฒฝ๋๋ค๋ ์ ์์ ์ฌ์ฉ์์๊ฒ ์ข์ ๊ฒฝํ์ ์ ๊ณตํด ์ค ์ ์๋ค.
React, Vue, Angular๋ฑ์ ํ๋ก ํธ์ค๋ ๊ธฐ์ ๋ค์ด ์ฌ์ฉํ๊ณ ์๋ ๋ฐฉ์์ด๋ค.
์์ฐ์ค๋ฌ์ด ์ฌ์ฉ์ ๊ฒฝํ(UX): ๊น๋นก๊ฑฐ๋ฆผ์ด ์๋ค
ํ์ํ ๋ฆฌ์์ค๋ง ๋ถ๋ถ์ ์ผ๋ก ๋ก๋ฉ
์ปดํฌ๋ํธ๋ณ ๊ฐ๋ฐ ์ฉ์ด
๋ชจ๋ฐ์ผ ์ฑ ๊ฐ๋ฐ์ ์ผ๋์ ๋๋ค๋ฉด ๋์ผํ API๋ฅผ ์ฌ์ฉํ๋๋ก ์ค๊ณ ๊ฐ๋ฅ
๋๋ฆฐ ์ด๊ธฐ ๊ตฌ๋ ์๋: JavaScript ํ์ผ์ ๋ฒ๋ค๋งํด์ ํ ๋ฒ์ ๋ฐ๊ธฐ ๋๋ฌธ
SEO(๊ฒ์์์ง์ต์ ํ)์ ์ด๋ ค์: SSR๋ก ํด๊ฒฐ ๊ฐ๋ฅ
๋ณด์ ์ด์: CSR๋ฐฉ์์ SPA์์๋ ํด๋ผ์ด์ธํธ์ธก์ ์ฟ ํค๋ง๊ณ ๋ ์ฌ์ฉ์์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ ๊ณต๊ฐ์ด ๋ง๋ ์น ์์, SSR์์๋ ์ฌ์ฉ์์ ๋ํ ์ ๋ณด๋ฅผ ์๋ฒ์ธก์์ ์ธ์ ์ผ๋ก ๊ด๋ฆฌ
CSR๊ณผ SSR์ ๋ํด์๋ ๋ค๋ฅธ ์ฑํฐ์์ ๋ค๋ฃฌ๋ค.
์์ฆ ๊ธฐ์ ๋ค์ ๋๋ถ๋ถ์ SPA๋ฅผ ์ฌ์ฉํ๋ค ๊ทธ๋ ๋ค๋ฉด SPA๊ฐ ๋ฌด์กฐ๊ฑด MPA๋ณด๋ค ์ข๊ณ ์น ๊ฐ๋ฐ์ ํ ๋์ SPA๋ง ์ฌ์ฉํด์ผ๋ง ํ ๊น? ๊ทธ๊ฒ์ ์๋๋ค. ๊ฐ๊ฐ์ ์ฅ์ ์ ์ ๋น๊ตํด์ ์ํฉ์ ๋ง๋ ๋ฐฉ์์ผ๋ก ๊ฐ๋ฐ์ ํด์ผ ํ๋ค.
๊ณ ๋ คํด์ผ ํ ์
๋ก๋ฉ ์๋์ ์ฐจ์ด
ํ๋ก ํธ์๋์ ๋ฐฑ์๋์ ์ํธ ์์กด์ฑ
SEO
์ ์ ๊ฒฝํ์ฑ(UX)
๋ณด์์ฑ
๊ฐ๋ฐ ์ฒ๋ฆฌ ์๋
์๋ฐ์คํฌ๋ฆฝํธ ์์กด์ฑ
html, css, js๋ง ๋ฐฐ์ฐ๋ค๊ฐ ์ฒ์ react๋ฅผ ๋ฐฐ์ธ ๋๊ฐ ์๊ฐ์ด๋๋ค. ๋ถํ์ ์กฐ๋ฆฝํ์ฌ ์ฅ๋๊ฐ์ ๋ง๋๋ ๊ฒ์ฒ๋ผ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด ํ์ํ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ ธ์ ์ฌ๋ฌ ํ์ด์ง๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ด ๋๋ฌด ์ฌ๋ฐ๊ณ ์ ์ ํด์ ์ง๊ธ๊น์ง ๊ณต๋ถํ๊ณ ์๋ค. ๊ทธ๋์ 'MPA๋ณด๋ค๋ SPA๋ฐฉ์์ด ๋ ์ข์ ๊ฒ์ด๋ค'๋ผ๊ณ ์๊ฐ์ ํ๊ณ ์์๋๋ฐ SPA์ ๋ํด ์ ๋ฆฌ๋ฅผ ํ๋ค๋ณด๋ ๊ผญ ๊ทธ๋ ์ง๋ ์์๋ค. ๋จ์ ๋ ๋ถ๋ช ์กด์ฌํ๊ณ ์ด๋ฅผ ๋ณด์ํ ์ ์๋ SSR๋ ์์ด ์ดํ์๋ SSR๊ณผ CSR์ ๋ํด ์ ๋ฆฌํ๊ณ ์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฉ์ด์กฐ์ฐจ ์ ๋๋ก ์์ง ๋ชปํ๊ณ ์ง๋ด์๋ ๊ฒ์ ๋ํด ๋ฐ์ฑํ์. ๋์ถฉ ๋ค์ด๋ง ๋ดค์ง ์ ํํ ์ด๋ค ๊ฐ๋ ์ธ์ง ๋ชจ๋ฅด๋ ์ฉ์ด๊ฐ ๋ง๋ค.๐ญ
๐ 2022-07-13