"์ผ๋จ ํด๋ณด์" ๋ผ๋ ํ๋๋ฅผ ํตํด ์ด์ ๊น์ง ๋ฐฐ์ ๋ ๊ฐ๋ฐ ํ์ต์ ํ์ฉํ๊ณ ์ ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค.
์๋ก์ด ๊ธฐ์ ์ ๋ฐฐ์ฐ๋๋ผ๋ ๋น ๋ฅด๊ฒ ์ต๋ํ๊ธฐ ์ํด ์ฃผ๋์ ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์์ํ๊ณ ๊ฒฝํ์ ์๋ ๊ฒ์ ์ค์ํ๊ฒ ์๊ฐํฉ๋๋ค.
ํ์ฌ๋ 'figma'๋ฅผ ์ฌ์ฉํ์ฌ ๋์์ธ์ ๊ธฐํํ๊ณ , Django์ React๋ฅผ ํ์ฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ๊ณ ์์ต๋๋ค. ์ด๋ฌํ ํ๋ก์ ํธ๋ฅผ ํตํด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๊ทธ๊ฒ์ ๊ธฐํ๋ก ์ผ์ ๋ฌธ์ ํด๊ฒฐ ๊ณผ์ ์ ํตํด ๋ฐฐ์ฐ๊ณ ์ฑ์ฅํ๋ฉฐ, ๊ธฐ์ ๋ธ๋ก๊ทธ์ ์์ฑํ์ฌ ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ์ง์์ ๊ณต์ ํ๊ณ ์ปค๋ฎค๋ํฐ์ ๊ธฐ์ฌํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค.
๐ชผ ์ด๋ค๋ด๊ณ ์ถ์ ๊ฒ์ด ์๋์? ์ ๋ง ํด๊ฒฐํด๋ณด๊ณ ์ถ์ ํ๋์ ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ๊ทธ๊ฒ์ ๋ฌด์์ธ๊ฐ์?
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ก์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๊ณ ์ถ์ต๋๋ค. ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๋์์ธ์ ๊ฐ์ ํ์ฌ ์ง๊ด์ ์ด๊ณ ํจ์จ์ ์ธ ์ฌ์ฉ์์ ๊ฒฝํ์ ์ ๊ณตํ๊ณ ์น ํ์ด์ง์ ์ฑ๋ฅ์ ํฅ์์ํค๊ณ ๋ฐ์์ฑ ์๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๋ชฉํ๋ก ํ๋กํธ์๋ ๊ฐ๋ฐ์๋ก ์ฑ์ฅํ๊ณ ์ถ์ต๋๋ค.
์น ์ ๊ทผ์ฑ์ ๊ฐ์ ํ๊ณ ์ถ์ต๋๋ค. ๋ชจ๋ ์ฌ๋๋ค์ด ์ฌ์ฉํ ์ ์๋ ์น/์ฑ์ ๋ง๋ค๊ณ ์ถ์ต๋๋ค. ์ด๋ฅผ ์ํด ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผ์ฑ์ ํฅ์์ํค๋ ๊ธฐ์ ์ ์ธ ํด๊ฒฐ์ฑ ์ ๊ฐ๋ฐํ๊ณ ๋ณด๊ธํ๋ ๊ฒ์ด ๋ชฉํ์ ๋๋ค.
์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ทจ์ฝ์ ์ ๋ฐ๊ฒฌํ๊ณ ๋ณด์ํ์ฌ ์ฌ์ฉ์์ ๊ฐ์ธ์ ๋ณด์ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๋ ๊ฒ์ด ๋ชฉํ์ ๋๋ค.
๐ก CSR(Client-side Rendering)์ด๋ ๋ฌด์์ด๋ฉฐ, ๊ทธ๊ฒ์ ์ฅ๋จ์ ์ ๋ํ์ฌ ์ค๋ช ํด์ฃผ์ธ์.
CSR(Client-side Rendering) : ํด๋ผ์ด์ธํธ ์ธก์์ ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋ ๋ฐฉ์
CSR์ SPA๋ก ๋์ํ๋ค. (SPA(Single-Page Application) : ํ๋์ ํ์ด์ง๋ก ๊ตฌ์ฑ๋ ์น ์ดํ๋ฆฌ์ผ์ด์ )
SPA๋ ๋ธ๋ผ์ฐ์ ์์ ์ต์ด ๋จ ํ ๋ฒ๋ง ํ์ด์ง ์ ์ฒด(HTML, CSS, JS)๋ฅผ ๋ก๋ํ๊ณ ์ดํ ํน์ ๋ถ๋ถ๋ง Ajax๋ฅผ ํตํด ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๊ณ ๋ฐ์ธ๋ฉํ๋ ๋ฐฉ์ ์ฆ, ์ฒซ ์์ฒญ์ ๋ฑ ํ๋ฒ๋ง ํ์ด์ง๋ง ๋ถ๋ฌ์ค๊ณ ์ด๋ ์ ๊ธฐ์กด ํ์ด์ง์ ๋ด๋ถ๋ฅผ ์์ ํด์ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์์ด๋ค. ex) React, Vue, Angular์ ๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ๋ค์ด SPA์ ๋ฐฉ์
- CSR์ ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ๋ผ ํ์ํ ๋ถ๋ถ๋ง ์๋ต๋ฐ์ ๋ ๋๋ง ํ๋ ๋ฐฉ์์ด๋ค. ๋จ์ผํ์ด์ง(SPA)์ ๊ฐ์ด ์ํธ์์ฉ์ด ๋ง์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค.
-
CSR(Client-side Rendering)์ ๋์๋ฐฉ์
(1) ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ํ์ด์ง๋ฅผ ์์ฒญํ๋ค. > (2) ์๋ฒ๋ ์ด๊ธฐ HTML ๋ฐ JSํ์ผ์ ์ ์กํ๋ค.
(3) ํด๋ผ์ด์ธํธ๊ฐ JS๋ฅผ ์คํํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๋์ ์ผ๋ก ์ปจํ ์ธ ๋ฅผ ์์ฑํ๋ค.
(4) ์์ฑ๋ ์ปจํ ์ธ ๊ฐ ํ๋ฉด์ ํ์๋๋ค.
CSR ์ฅ์ | CSR ๋จ์ |
---|---|
๋ฐ์ด๋ ์ฌ์ฉ์ ๊ฒฝํ(UX) : ํ์ด์ง ๋ก๋ฉ ํ์๋ ์ฌ์ฉ์ ์ํธ์์ฉ์ ๋ํ ๋น ๋ฅธ ์๋ต์ด ๊ฐ๋ฅํ๋ฏ๋ก ์ฌ์ฉ์ ๊ฒฝํ์ด ํฅ์๋๋ค. | SEO ๋ฌธ์ : ์ด๊ธฐ HTML์๋ ๋์ ์ผ๋ก ์์ฑ๋๋ ์ปจํ ์ธ ๊ฐ ํฌํจ๋์ง ์๊ธฐ ๋๋ฌธ์ ๊ฒ์ ์์ง ์ต์ ํ(SEO)์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. |
์๋ฒ ๋ถํ ๊ฐ์ : ์๋ฒ๋ ์ด๊ธฐ ํ์ด์ง๋ฅผ ์ ์กํ ํ์๋ ํด๋ผ์ด์ธํธ์์ ๋๋ถ๋ถ์ ์์ ์ด ์ด๋ฃจ์ด์ง๋ฏ๋ก ์๋ฒ ๋ถํ๊ฐ ์ค์ด๋ ๋ค. | ์ด๊ธฐ ๋ก๋ฉ ์๋ : ์ด๊ธฐ HTML ๋ฐ JSํ์ผ์ ๋ค์ด๋ก๋์ ์คํ์ ๋ํ ์๊ฐ์ด ํ์ํ๋ฏ๋ก ์ด๊ธฐ ๋ก๋ฉ ์๋๊ฐ ๋๋ฆด ์ ์๋ค. |
์บ์ฑ ๊ฐ๋ฅ : ์ด๊ธฐ ํ์ด์ง๋ฅผ ์ ์ธํ ๋๋ถ๋ถ์ ์์์ ํด๋ผ์ด์ธํธ์์ ๋์ ์ผ๋ก ๋ก๋ ๋๋ฏ๋ก ์บ์ฑ์ด ์ฉ์ดํ๋ค. | ํด๋ผ์ด์ธํธ ์์ ์ฌ์ฉ๋ ์ฆ๊ฐ : ๋ชจ๋ ๋ ๋๋ง ์์ ์ด ํด๋ผ์ด์ธํธ์์ ์ด๋ฃจ์ด์ง๋ฏ๋ก ๋ธ๋ผ์ฐ์ ์ ์์(๋ฉ๋ชจ๋ฆฌ, CPU๋ฑ)์ ๋ ๋ง์ด ์ฌ์ฉํ ์ ์๋ค. |
๐กSPA(Single Page Application)๋ก ๊ตฌ์ฑ๋ ์น ์ฑ์์ SSR(Server-side Rendering)์ด ํ์ํ ์ด์ ์ ๋ํ์ฌ ์ค๋ช ํด์ฃผ์ธ์.
SSR(Server-side Rendering)์ ์ฌ์ฉํ๋ฉด, ์ฌ์ฉ์๋ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ์์ ํ ๋ ๋๋ง๋ ํ์ด์ง๋ฅผ ์ ์กํ๊ธฐ ๋๋ฌธ์ ๋๋จธ์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ก๋ฉํ๋ ๋์ ํ์ด์ง๋ฅผ ๋ณด๊ณ ์ํธ์์ฉ์ ์์ํ ์ ์๋ค.
๊ฒ์ ์์ง์ ํ์ด์ง์ ์ปจํ ์ธ ๋ฅผ ํฌ๋กค๋งํ์ฌ ์ธ๋ฑ์ฑํ๋ค. SPA๋ ์ด๊ธฐ์ ๋น ํ์ด์ง๋ฅผ ๋ก๋ํ๊ณ ๊ทธ ํ JS๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํ ์ธ ๋ฅผ ๋์ ์ผ๋ก ๋ ๋๋งํ๋ฏ๋ก ๊ฒ์ ์์ง์ ๋น ํ์ด์ง์์๋ง ๋ณผ ์ ์๋๋ฐ ์ด๋ SEO์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์๋ค.
๐ค ์ด๋ค ๋ถ์ ์ ์ธ ์ํฅ?
- ๊ฒ์ ์์ง ํฌ๋กค๋ฌ์ ์ดํด ์ด๋ ค์
์ผ๋ฐ์ ์ธ HTML ํ์ด์ง์ ๋ฌ๋ฆฌ SPA๋ ์ด๊ธฐ์ ๋น ํ์ด์ง๋ฅผ ๋ก๋ํ๊ณ JS๋ฅผ ํตํด ๋์ ์ผ๋ก ์ฝํ ์ธ ๋ฅผ ๋ ๋๋งํ๋๋ฐ ์ด๋ ๊ฒ์ ์์ง ํฌ๋กค๋ฌ๊ฐ ํ์ด์ง์ ์ ์ฒด ์ฝํ ์ธ ๋ฅผ ์ธ์ํ๋๋ฐ ์ด๋ ค์์ ์ค๋ค.
- ๊ฒ์ ๊ฒฐ๊ณผ์ ๋ถ์ ์ ์ธ ์ํฅ
SPA์ ๊ฒฝ์ฐ, ๊ฒ์ ์์ง์ด ํ์ด์ง์ ์ ์ฒด ์ฝํ ์ธ ๋ฅผ ์ธ์ํ์ง ๋ชปํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฒ์ ๊ฒฐ๊ณผ์ ๋ฐ์๋๋ ์ฝํ ์ธ ์์ด ์ ํ๋ ์ ์๋ค. ์ด๋ ์น ์ฌ์ดํธ์ ๊ฒ์ ๊ฒฐ๊ณผ ๋ ธ์ถ ๋ฐ ์์์ ๋ถ์ ์ ์ํฅ์ ์ค๋ค.
- ํ์ด์ง ์ธ๋ฑ์ฑ์ ์ง์ฐ
SPA์์ ์ด๊ธฐ ๋น ํ์ด์ง๋ง ๋ก๋๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๊ฒ์ ์์ง์ด ์ค์ ์ฝํ ์ธ ๋ฅผ ์ธ์ํ๊ธฐ๊น์ง ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค. ์ด๋ ์๋ก์ด ํ์ด์ง๋ ์ ๋ฐ์ดํธ๋ ์ฝํ ์ธ ๊ฐ ์๋ก์ด ๊ฒ์ ๊ฒฐ๊ณผ์ ๋ฐ์๋๋ ์๋๋ฅผ ๋ฆ์ถ ์ ์๋ค.
- ์ฌ์ฉ์ ๊ฒฝํ์ ์ ํ
๊ฒ์ ์์ง ํฌ๋กค๋ฌ ์ธ์๋ ์ผ๋ถ ์ฌ์ฉ์๋ JS ๊ฐ ๋นํ์ฑ๋ ์ํ์์ ์น ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ ์ ์๋ค. ์ด๋ฐ ๊ฒฝ์ฐ SPA์์ ์ ๊ณตํ๋ ๋์ ์ผ๋ก ๋ ๋๋ง๋๋ ์ฝํ ์ธ ๋ฅผ ๋ณผ ์ ์์ผ๋ฉฐ ์ด๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ํ์ํฌ ์ ์๋ค. SPA์์๋ SEO๋ฅผ ๊ณ ๋ คํ์ฌ SSR ๋๋ Prerendering๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ์ด๊ธฐ์ ๋ ๋๋ง๋๋ ์ฝํ ์ธ ๋ฅผ ๊ฒ์ ์์ง์ด ์ธ์ํ ์ ์๋๋ก ํด์ผ ํ๋ค.
Prerendering
: SPA(Single Page Application)์์ ์ฌ์ฉ๋๋ SEO ์ต์ ํ ๊ธฐ์ ์ค ํ๋, ์น ์๋ฒ ๋๋ ์๋น์ค์ ๋ฐฑ์๋์์, ์ฌ์ฉ์๊ฐ ์์ฒญํ๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ํ์ด์ง๋ฅผ ๋ ๋๋งํ์ฌ ์ ์ HTML ํ์ผ๋ก ์์ฑํ๋ ๊ณผ์
: SEO ์ต์ ํ๋ฅผ ์ํ ๊ฐ๋จํ๊ณ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ ์ค ํ๋)
SPA๋ ์ด๊ธฐ์ ํ์ํ ์์(HTML, JavaScript, CSS)์ ๋ชจ๋ ๋ค์ด๋ก๋ํด์ผ ํ๋ฏ๋ก ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ์ด ๊ธธ์ด์ง ์ ์๋ค.
SSR์ ์ฌ์ฉํ๋ฉด ์๋ฒ์์ ์ด๊ธฐ ํ์ด์ง ์ํ๋ฅผ ๋ ๋๋งํ์ฌ ์ฌ์ฉ์๊ฐ ๋น ๋ฅด๊ฒ ์ปจํ ์ธ ๋ฅผ ๋ณผ ์ ์๋๋ก ํ ์ ์๋ค ์ดํ JS๋ฅผ ์ฌ์ฉํ์ฌ ์ธํฐ๋ํฐ๋ธํ ์์๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
๐ค JS๋ฅผ ์ฌ์ฉํ์ฌ ์ธํฐ๋ํฐ๋ธํ ์์ ์์
: ์ฌ์ฉ์๊ฐ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋ชจ๋ฌ ์ฐฝ์ด ์ด๋ฆฌ๊ฑฐ๋ ํผ์ด ๋์ ์ผ๋ก ์์ฑ๋์ด ์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ณด๋ฅผ ์ ๋ ฅํ ์ ์๋ค.
: ์ค์๊ฐ์ผ๋ก ์ฃผ์ ์์ธ๋ฅผ ํ์ํ๊ฑฐ๋ ์ค์๊ฐ ์ฑํ ๋ฉ์์ง๋ฅผ ์ ๋ฐ์ดํธ ํ ์ ์๋ค.
: ์์์ ์ด๋, ํ์ธ๋ ์ธ/์์, ์คํฌ๋กค ์ ๋๋ฉ์ด์ ์ ๊ตฌํ์ ํ ์ ์๋ค.
: ํญ, ์์ฝ๋์ธ, ๋๋กญ๋ค์ด ๋ฉ๋ด ๋ฑ์ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉ์๊ฐ ์ํธ์์ฉํ ๋๋ง๋ค ๋์ ์ผ๋ก ํ์ฑํ ๋๋ ๋นํ์ฑํ ํ ์ ์๋ค.
์์ ๋ฏธ๋์ด ํ๋ซํผ์ด๋ ๋ฉ์ ์ ์ฑ๊ณผ ๊ฐ์ ๊ณณ์์ URL์ ๊ณต์ ํ ๋, ํด๋น ํ์ด์ง์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ ํ์๋๋ค.
SPA์์๋ ์ด๊ธฐ์ ๋น ํ์ด์ง๋ง ๋ก๋๋๊ธฐ ๋๋ฌธ์ ์ด ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ ์ ๋๋ก ํ์๋์ง ์๋๋ค SSR์ ์ฌ์ฉํ๋ฉด ํ์ด์ง์ ์ด๊ธฐ ์ํ๊ฐ ์๋ฒ์์ ๋ ๋๋ง๋๋ฏ๋ก ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ ์ ํํ๊ฒ ํ์๋ฉ๋๋ค.
๐ก Next.js ํ๋ก์ ํธ์์ yarn start(or npm run start) ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ์ ๋ ์คํ๋๋ ์ฝ๋๋ฅผ Next.js Github ๋ ํฌ์งํ ๋ฆฌ์์ ์ฐพ์ ๋ค,
ํด๋น ํ์ผ์ ๋ํ ๊ฐ๋จํ ์ค๋ช ์ ์ฒจ๋ถํด์ฃผ์ธ์.
https://nextjs.org/docs/getting-started
(Next.js ์ธํ ๊ฐ์ด๋)https://github.com/vercel/next.js/
(Next.js Github ๋ ํฌ์งํ ๋ฆฌ)- _document.js, _app.js, getServerSideProps ๊ฐ์ ์์๋ค์ ๋ํด ์ค๋ช ์ ์๊ตฌํ๋ ๊ณผ์ ๊ฐ ์๋๋๋ค. ์คํ๋ ค Next.js ์ฝ๋ ๋ฒ ์ด์ค ๋ด๋ถ๋ฅผ ์ดํด๋ณด๋ผ๋ ์๋ฏธ์ ๋๋ค.