๐ก ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR)๊ณผ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง(CSR)์ ๊ธฐ๋ณธ์ ์ธ ์ฐจ์ด์ ๊ณผ ์ค์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ ๊ธฐ์ ์ด ํผํฉ๋์ด ์ฌ์ฉ๋๋ ์ผ๋ฐ์ ์ธ ์ํฉ์ ๊ฐ๋ ฅํ๊ฒ ์์ฝํด๋ณด์
@Controller+View Template-> ์๋ฒ ์ธก์์ ํ๋ฉด์ ๋์ ์ผ๋ก ๊ทธ๋ฆฐ๋ค.
SSR(Server-Side Rendering) : ์น ํ์ด์ง์ ์ฝํ ์ธ ๋ฅผ ์๋ฒ์์ ์์ฑํ์ฌ ํด๋ผ์ด์ธํธ๋ก ์ ์กํ๋ ๋ฐฉ์์ด๋ค.
@Controller : Spring MVC์์ HTTP ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์์ฒญ์ ๋ฐ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ , ๋ทฐ ํ ํ๋ฆฟ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ์ฌ HTML์ ์์ฑํ๋ค.
View Template (ex. Thymeleaf,JSP, Freemarker) : HTML ๋ผ๋ ์์ ๋์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ์ฌ ์ต์ ์ ์ธ HTML์ ์์ฑํ๋ ํ ํ๋ฆฟ ์์ง์ด๋ค. ์๋ฒ ์ธก์์ ํ ํ๋ฆฟ ์์ง์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ HTML์ ๊ฒฐํฉํ๋ค.
1. ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ํ์ด์ง ์์ฒญ
2. ์๋ฒ๋ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
3. ์๋ฒ๋ ๋ทฐ ํ
ํ๋ฆฟ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ HTML ํ์ด์ง๋ฅผ ์์ฑ
4. ์๋ฒ๋ ์์ฑ๋ HTML ํ์ด์ง๋ฅผ ํด๋ผ์ด์ธํธ๋ก ์ ์ก
5. ํด๋ผ์ด์ธํธ๋ ์๋ฒ์์ ๋ฐ์ HTML์ ๊ทธ๋๋ก ํ๋ฉด์ ํ์.
SEO(๊ฒ์ ์์ง ์ต์ ํ) ์ ๋ฆฌ : ๊ฒ์ ์์ง ํฌ๋กค๋ฌ๊ฐ HTML ์ฝํ ์ธ ๋ฅผ ์๋น๊ฒ ์ฝ์ ์ ์๋ค.
์ด๊ธฐ ๋ก๋ฉ ์๋ ๋น ๋ฆ : ์๋ฒ์์ ์์ฑ๋ HTML์ ๋ณด๋ด์ฃผ๋ฏ๋ก ์ด๊ธฐ ํ๋ฉด์ ๋น ๋ฅด๊ฒ ํ์ ํ ์ ์๋ค.
์๋ฒ ๋ถํ ์ฆ๊ฐ : ๋งค๋ฒ ํ์ด์ฆ ์์ฒญ๋ง๋ค ์๋ฒ์์ HTML์ ์์ฑํด์ผ ํ๋ฏ๋ก ์๋ฒ ๋ถํ๊ฐ ์ฆ๊ฐํ ์ ์๋ค.
ํ์ด์ง ์ ํ์ ๊น๋นก์ : ํ์ด์ง๋ฅผ ์ด๋ํ ๋๋ง๋ค ์๋ฒ์์ ์๋ก์ด HTML์ ๋ฐ์์์ผ ํ๋ฏ๋ก ๊น๋นก์์ ๋ฐ์ํ ์ ์๋ค.
@RestController+Data-> ํด๋ผ์ด์ธํธ ์ธก์์ ํ๋ฉด์ ๋์ ์ผ๋ก ๊ทธ๋ฆฐ๋ค.
CSR(Client-Side Rendering) : ์น ํ์ด์ง์ ๋ผ๋(HTML)์ JavaScript ํ์ผ์ ์๋ฒ์์ ๋ฐ์์จ ํ, JavaScript๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ ) ์ธก์์ ํ๋ฉด์ ๋์ ์ผ๋ก ์์ฑํ๋ ๋ฐฉ์
@RestController : Spring MVC์์ REST API๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉํ๋ ์ด๋ ธํ ์ด์ . JavaScript๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ ) ์ธก์์ ํ๋ฉด์ ๋์ ์ผ๋ก ์์ฑํ๋ ๋ฐฉ์.
Data(JSON, XML) : ์๋ฒ๋ ํด๋ผ์ด์ธํธ์๊ฒ ํ๋ฉด์ ๊ตฌ์ฑํ๋ ๋ฐ ํ์ํ ๋ฐ์ดํฐ๋ง ์ ๊ณต.
1. ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ํ์ด์ง ์์ฒญ
2. ์๋ฒ๋ ์ต์ํ์ HTML ๋ผ๋์ JavaScript ํ์ผ์ ํด๋ผ์ด์ธํธ๋ก ์ ์ก
3. ํด๋ผ์ด์ธํธ JavaScript ํ์ผ์ ์คํํ์ฌ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญ.
4. ์๋ฒ๋ ๋ฐ์ดํฐ๋ฅผ JSON ๋๋ XML ํ์์ผ๋ก ํด๋ผ์ด์ธํธ์ ์ ์ก
5. ํด๋ผ์ด์ธํธ๋ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ HTML์ ๋์ ์ผ๋ก ์์ฑํ๊ณ ํ๋ฉด์ ํ์.
๋น ๋ฅธ ํ์ด์ง ์ ํ : ํ์ํ ๋ฐ์ดํฐ๋ง ์๋ฒ์์ ๋ฐ์์ค๊ธฐ ๋๋ฌธ์ ํ์ด์ง ์ ํ ์๋๊ฐ ๋น ๋ฅด๋ค.
ํ๋ถํ ์ฌ์ฉ์ ๊ฒฝํ : JavaScript๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ํ ์ธํฐ๋ํฐ๋ธํ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋ค.
SEO ๋ถ๋ฆฌ : ๊ฒ์ ์์ง ํฌ๋กค๋ฌ๊ฐ JavaScript๋ฅผ ์คํํด์ผ ์ฝํด์ฒด๋ฅผ ์ฝ์ ์ ์์ด SEO์ ๋ถ๋ฆฌํ ์ ์๋ค.
์ด๊ธฐ ๋ก๋ฉ ์๋ ๋๋ฆผ : JavaScript ํ์ผ์ ๋ค์ด๋ก๋ํ๊ณ ์คํํด์ผ ํ๋ฉด์ด ํ์๋๋ฏ๋ก ์ด๊ธฐ ๋ก๋ฉ์๋๊ฐ ๋๋ฆด ์ ์๋ค.
๐ก ํผํฉ ๋ฐฉ์ : ์น ์ดํ๋์ผ์ด์ ์ SSR ๊ณผ CSR ์ ์ฅ์ ์ ๋ชจ๋ ํ์ฉํ๊ธฐ ์ํด ๋ ๊ฐ์ง ๊ธฐ์ ์ ํผํฉํ์ฌ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
์ด๊ธฐ ๋ก๋ฉ ๋ฐ SEO๊ฐ ์ค์ํ ํ์ด์ง (์: ๋ฉ์ธ ํ์ด์ง, ์ํ ์์ธ ํ์ด์ง): SSR์ ์ฌ์ฉํ์ฌ ์ด๊ธฐ ํ๋ฉด์ ๋น ๋ฅด๊ฒ ํ์ํ๊ณ ๊ฒ์ ์์ง ์ต์ ํ๋ฅผ ์ํ.
์ฌ์ฉ์ ์ธํฐ๋์ ์ด ๋ง์ ํ์ด์ง (์: ๋๊ธ ๊ธฐ๋ฅ, ์ผํ ์นดํธ): CSR์ ์ฌ์ฉํ์ฌ ๋น ๋ฅธ ํ์ด์ง ์ ํ๊ณผ ํ๋ถํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณต.
Next.js, Nuxt.js : React ๋๋ Vue.js ๊ธฐ๋ฐ์ SSR ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ SSR๊ณผ CSR์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ค.
Spring Boot + React/Vue.js : Spring Boot๋ฅผ ์ฌ์ฉํ์ฌ API ์๋ฒ๋ฅผ ๊ตฌ์ถํ๊ณ , React ๋๋ Vue.js๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ ์ธก ํ๋ฉด์ ๊ฐ๋ฐ. ํ์์ ๋ฐ๋ผ SSR์ ์ ์ฉํ ์ ์๋ค.
์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ์ ์ ํ ๊ธฐ์ ์ ์ ํํ๊ฑฐ๋ ํผํฉํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.