๐ฐ SPA๊ฐ ๋ฌด์์ธ์ง, ์ฅ/๋จ์ ์ ์ ์ ์๋ค.
โ SPA(Single Page Application)๋?
SPA๋ Single Page Application์ ์ฝ์๋ก ๋จ์ผ ํ์ด์ง๋ก ๊ตฌ์ฑ๋ ์น ์ดํ๋ฆฌ์ผ์ด์
์ ๋งํ๋ค.
Angular, Vue, React๊ฐ SPA๋ฅผ ์ง์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด๋ค.
์ฆ, ๋ฆฌ์กํธ๋ UI ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ/ํ๋ ์์ํฌ๋ก์จ SPA(Single Page Application)์ UI(User Interface)๋ฅผ ์์ฑํ๋๋ฐ ์ง์คํ ํ๋ ์์ํฌ/๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
โ ์ฅ/๋จ์
๐ข ์ฅ์
- ํ์ํ ๋ชจ๋ ์ ์ ๋ฆฌ์์ค๋ฅผ ์ฒ์์ ํ๋ฒ ๋ค์ด๋ก๋
- ํ์ด์ง ๊ฐ ์ด๋์ ํ์ํ ๋ฐ์ดํฐ๋ง JSON์ผ๋ก ์ ๋ฌ๋ฐ์ ์ ์ฒด์ ์ธ ํธ๋ํฝ ๊ฐ์ ๋ฐ rendering์์ ์ข์ ํจ์จ์ ๊ฐ์ง
→ DOM ๊ด๋ฆฌ์ ์ํ๊ฐ ์ ๋ฐ์ดํธ ๊ด๋ฆฌ ์ต์ํ - ์๋ก๊ณ ์นจ์ ์ ๋ฐํ์ง์์ ๋์ฑ ์พ์ ํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ป์ ์ ์๋ค.
- ๋ถ๋ถ์ ์ธ rendering์ผ๋ก ์๋ก๊ณ ์นจ ๋ฐ์ํ์ง ์์ ํ๋ฉด ๊น๋ฐ์ ์์ด ๋น ๋ฅธ ํ๋ฉด ์ด๋ ๊ฐ๋ฅ
- ๋ชจ๋ํ ๋๋ component๋ณ ๊ฐ๋ฐ ์ฉ์ด
- ๊ธฐ์กด์ SSR๊ณผ ๋น๊ตํ ๋ ๋ฐฐํฌ ๊ฐ๋จ๋ฉฐ, ๋ค์ดํฐ๋ธ ์ฑ๊ณผ ๋น์ทํ ์ฌ์ฉ์ ๊ฒฝํ ์ ๊ณต
๐ด ๋จ์
- ๋๋ฆฐ ์ด๊ธฐ ๊ตฌ๋ ์๋ - ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ํ์ํ resource๋ฅผ ํ ๋ฒ์ ๋ค์ด๋ก๋
- ๊ฒ์์์ง ์ต์ ํ(SEO)์ ๋ถ์ ํฉ
์ผ๋ฐ์ ์ผ๋ก SPA๋
CSR(ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง, Client Side Rendering) ๋ฐฉ์
์ผ๋ก ๋์ํ๋๋ฐ, ์ด ๋ฐฉ์์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ ๋น๋๊ธฐ ๋ชจ๋ธ๋ก ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๋ทฐ๋ฅผ ๋์ ์ผ๋ก ์์ฑํ๊ธฐ ๋๋ฌธ์, ์ฒ์ ์ ์ํ๋ฉด ๋น HTML์ ๋ณด์ฌ์ฃผ๊ณ , ์ดํ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ฐ๋ ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์ ๊ฒ์์์ง์์ CSR๋ก ์์ฑ๋ ์นํ์ด์ง ๋ถ์์ ์ด๋ ค์์ด ๋ฐ์ํ๋ค.
- ์ฝ๋๊ฐ ์ธ๋ถ์ ๋ ธ์ถ๋๋ ๋ณด์์ ์ธ ๋ฌธ์ - ํด๋ผ์ด์ธํธ์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ
โ React with SPA
SPA๋ ์น/์ฑ์ ํ์ํ ๋ชจ๋ ์ ์ ๋ฆฌ์์ค๋ฅผ ์ฒ์์ ํ๋ฒ ๋ค์ด๋ก๋ํ๋ค.
ํ์ด์ง ๊ฐ ์ด๋ ์, ํ์ด์ง ๊ฐฑ์ ์ ํ์ํ ๋ฐ์ดํฐ๋ง์ JSON์ผ๋ก ์ ๋ฌ๋ฐ์ ํ์ด์ง๋ฅผ ๊ฐฑ์ ํ๋ฏ๋ก ์ ์ฒด์ ์ธ ํธ๋ํฝ์ ๊ฐ์ํ ์ ์๊ณ , ์ ์ฒด ํ์ด์ง๋ฅผ ๋ค์ ๋ ๋๋งํ์ง ์๊ณ ๋ณ๊ฒฝ๋๋ ๋ถ๋ถ๋ง์ ๊ฐฑ์ ํ๋ฏ๋ก ์๋ก๊ณ ์นจ์ด ๋ฐ์ํ์ง ์์ ๋ค์ดํฐ๋ธ ์ฑ๊ณผ ์ ์ฌํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์๋ค.
๋ฆฌ์กํธ๋ UI ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ/ํ๋ ์์ํฌ๋ก์จ SPA(Single Page Application)์ UI(User Interface)๋ฅผ ์์ฑํ๋๋ฐ ์ง์คํ ํ๋ ์์ํฌ/๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
๋ฆฌ์กํธ๋ JSX์ด๋ผ๋ ๋ฌธ๋ฒ๊ณผ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ๋ฅผ ๊ทผ๊ฐ์ผ๋ก ์ฌ์ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ ๋(Virtual DOM)์ด๋ผ๋ ๊ฐ๋
์ ์ฌ์ฉํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ํผํฌ๋จผ์ค๋ฅผ ์ต์ ํํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.