[Hard] ๐ Framework
1. Please explain and compare the advantages and disadvantages of SPA and SSRโ
SPA์ SSR์ ์ฅ๋จ์ ์ ์ค๋ช ํ๊ณ ๋น๊ตํด์ฃผ์ธ์
SPA(์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ )โ
SPA ์ฅ์ โ
- ์ฌ์ฉ์ ๊ฒฝํ: SPA์ ๋ณธ์ง์ ํ๋์ ํ์ด์ง๋ก, ๋ฐ์ดํฐ๋ฅผ ๋์ ์ผ๋ก ๋ก๋ํ๊ณ ํ๋ก ํธ์๋ ๋ผ์ฐํ ์ ๊ฒฐํฉํ์ฌ ์ฌ์ฉ์์๊ฒ ํ์ด์ง๊ฐ ์ ํ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ํ์ง๋ง ์ค์ ๋ก๋ component๋ง ์ ํํฉ๋๋ค. ์ด๋ฐ ์ฌ์ฉ ๊ฒฝํ์ ๋ ๋งค๋๋ฝ๊ณ ๋น ๋ฆ ๋๋ค.
- ํ๋ก ํธ์๋-๋ฐฑ์๋ ๋ถ๋ฆฌ: ํ๋ก ํธ์๋๋ ํ์ด์ง ๋ ๋๋ง๊ณผ ์ธํฐ๋์ ๋ง ๋ด๋นํ๊ณ ๋ฐฑ์๋๋ ๋ฐ์ดํฐ API ์ ๊ณต๋ง ํฉ๋๋ค. ์์ชฝ์ ๊ฐ๋ฐ ๋ถ๋ด์ ์ค์ด๊ณ ์ ์ง๋ณด์๋ ์ฌ์์ง๋๋ค.
- ๋คํธ์ํฌ ์ต์ ํ: ํ์ด์ง๋ฅผ ํ ๋ฒ๋ง ๋ก๋ํ๋ฉด ๋๋ฏ๋ก ๊ธฐ์กด ๋ฉํฐํ์ด์ง ๊ตฌ์กฐ์ฒ๋ผ ๋งค๋ฒ ํ์ด์ง ์ ํ ์ ๋ค์ ๋ก๋ํ ํ์๊ฐ ์์ด ์์ฒญ ํ์๊ฐ ์ค์ด๋ค๊ณ ์๋ฒ ๋ถ๋ด์ด ๊ฐ์ํฉ๋๋ค.
SPA ๋จ์ โ
- SEO: SPA ํ์ด์ง๋ ๋์ ์ผ๋ก ๋ก๋๋๋ฏ๋ก ๊ฒ์ ์์ง์ด ํ์ด์ง ๋ด์ฉ์ ์ง์ ํฌ๋กค๋งํ ์ ์์ต๋๋ค(์ต๊ทผ Google์ด ์ด ์ ์ ๊ฐ์ ์ค์ด๋ผ๊ณ ์ฃผ์ฅํ์ง๋ง). ๊ฒ์ ์์ง ํฌ๋กค๋ฌ ๋์์์๋ ๊ธฐ์กด HTML์ ๋ฏธ์น์ง ๋ชปํฉ๋๋ค.
- ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ: SPA๋ ํด๋ผ์ด์ธํธ ์ธก์์ JavaScript๋ฅผ ๋ก๋ํ๊ณ ์คํํ ํ์์ผ ํ์ด์ง๋ฅผ ๋ ๋๋งํ ์ ์์ผ๋ฏ๋ก ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ์ด ๊ธธ์ด์ง๋๋ค. ํนํ ๋คํธ์ํฌ ์ํฉ์ด ์ข์ง ์์ ๋ ์ง์ฐ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
SSR(์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง)โ
SSR ์ฅ์ โ
- SEO: SSR์ ์๋ฒ ์ธก์์ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ ํ์ด์ง๋ฅผ ๋ฏธ๋ฆฌ ๋ ๋๋งํ๋ฏ๋ก ๊ฒ์ ์์ง์ด ํ์ด์ง ๋ด์ฉ์ ์ง์ ํฌ๋กค๋งํ ์ ์์ต๋๋ค. ์ด๊ฒ์ด SSR์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ๋๋ค.
- ๋ก๋ฉ ์๊ฐ: SSR์ ์๋์ ๋ ๋๋ง ๋ถ๋ด์ ์๋ฒ ์ธก์ผ๋ก ์ด์ ํ์ฌ ์ฒซ ๋ฐฉ๋ฌธ ์ ๋ ๋๋ง ์๊ฐ์ ๋จ์ถํ ์ ์์ต๋๋ค.
SSR ๋จ์ โ
- ํ์ต ๋น์ฉ๊ณผ ๋ณต์ก์ฑ: Next์ Nuxt๋ฅผ ์๋ก ๋ค๋ฉด, ๋ณธ์ง์ ์ผ๋ก React์ Vue๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ง๋ง ๊ฐ์์ ์ํ๊ณ๋ฅผ ๋ฐ์ ์์ผ ํ์ต ๋น์ฉ์ด ๋์์ก์ต๋๋ค. ์ต๊ทผ Next.js 14 ๊ฐํธ์ ๋ด๋ ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ์ด๋ฐ ๋ณํ๋ฅผ ๋ฐ์๋ค์ผ ์ ์๋ ๊ฒ์ ์๋๋๋ค.
- ์๋ฒ ๋ถ๋ด: ๋ ๋๋ง ์์ ์ด ์๋ฒ ์ธก์ผ๋ก ์ด์ ๋๋ฏ๋ก ํนํ ๋์ ํธ๋ํฝ์ ์ ํ๋ฆฌ์ผ์ด์ ์๋๋ฆฌ์ค์์ ์๋ฒ์ ๋ ํฐ ๋ถ๋ด์ด ๋ ์ ์์ต๋๋ค.
๊ฒฐ๋ก โ
์์น์ ์ผ๋ก ๋ฐฑ์คํผ์ค ์์คํ ์์ SEO ํ์๊ฐ ์๋ค๋ฉด SSR ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค. ๊ฒ์ ์์ง์ ์์กดํ๋ ์ ํ ์นํ์ด์ง๋ผ๋ฉด SSR ํ๋ ์์ํฌ ์ฑํ์ ํ๊ฐํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
2. ์ฌ์ฉํด๋ณธ Web Framework๋ฅผ ์ค๋ช ํ๊ณ ์ฅ๋จ์ ์ ๋น๊ตํด์ฃผ์ธ์โ
๋ ํ๋ ์์ํฌ ๋ชจ๋ ์ต๊ทผ "ํจ์ ๊ธฐ๋ฐ ์ปดํฌ๋ํธ ๊ฐ๋ฐ"๋ก ์๋ ดํ๊ณ ์์ต๋๋ค:
Vue 3๋ Composition API๋ก ๋ก์ง์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ composable๋ก ๋ถ๋ฆฌํฉ๋๋ค. React๋ Hooks๋ฅผ ํต์ฌ์ผ๋ก ํฉ๋๋ค. ๊ฐ๋ฐ์ ๊ฒฝํ์์ ๋ ํ๋ ์์ํฌ๋ ๋งค์ฐ ์ ์ฌํ์ง๋ง ์ ์ฒด์ ์ผ๋ก Vue์ ์ง์ ์ฅ๋ฒฝ์ด ๋ฎ๊ณ , React๋ ์ํ๊ณ์ ์ ์ฐ์ฑ์์ ๊ฐํฉ๋๋ค.
Vue (Vue 3 ์ค์ฌ)โ
์ฅ์ :
- ํ์ต ๊ณก์ ์ด ์๋ง: SFC(Single File Component)๊ฐ template / script / style์ ํ๊ณณ์ ๋ชจ์ ๊ธฐ์กด ํ๋ก ํธ์๋(๋ฐฑ์๋ ํ ํ๋ฆฟ)์์ ์ ํํ๋ ๊ฐ๋ฐ์์๊ฒ ์น์ํฉ๋๋ค.
- ๊ณต์ ๊ท์ฝ์ด ๋ช ํํ์ฌ ํ์ ์ ๋ฆฌ: ๊ณต์ ์คํ์ผ ๊ฐ์ด๋์ ๊ด๋ก๊ฐ ๋ช ํํ์ฌ ์ ํ์์ด ํ๋ก์ ํธ๋ฅผ ์ธ์ํ ๋ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ฝ์ต๋๋ค.
- ์ฝ์ด ์ํ๊ณ๊ฐ ์๋น: ๊ณต์์์ Vue Router, Pinia(๋๋ Vuex), CLI / Vite Plugin ๋ฑ์ ์ ์ง๋ณด์ํ์ฌ ํ๋ก์ ํธ ์์ฑ๋ถํฐ ์ํ ๊ด๋ฆฌ, ๋ผ์ฐํ ๊น์ง "๊ณต์ ํด๋ต"์ด ์์ด ๊ธฐ์ ์ ํ ๋น์ฉ์ด ์ค์ด๋ญ๋๋ค.
- Composition API๋ก ์ ์ง๋ณด์์ฑ ํฅ์: ๊ธฐ๋ฅ๋ณ๋ก composable(์: useAuth, useForm)์ ๋ถ๋ฆฌํ ์ ์์ด ๋๊ท๋ชจ ํ๋ก์ ํธ์์ ๋ก์ง ๊ณต์ ์ ์ค๋ณต ์ฝ๋ ๊ฐ์๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
๋จ์ :
- ์ํ๊ณ์ ์ปค๋ฎค๋ํฐ ๊ท๋ชจ๊ฐ React๋ณด๋ค ์ฝ๊ฐ ์์: ์๋ํํฐ ํจํค์ง์ ์์ ๋ค์์ฑ์ด React์ ๋ฏธ์น์ง ๋ชปํ๋ฉฐ ์ต์ฒจ๋จ ๋๊ตฌ๋ ํตํฉ์์ React ์ฐ์ ์ธ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
- ์ทจ์ ์์ฅ์ด ํน์ ์ง์ญ/์ฐ์ ์ ์ง์ค: React์ ๋นํด ํด์ธ ๋๋ ๋ค๊ตญ์ ํ์ React๊ฐ ์ฃผ๋ฅ์ฌ์ ์ปค๋ฆฌ์ด ์ ์ฐ์ฑ์์ ์๋์ ์ผ๋ก ๋ถ๋ฆฌํฉ๋๋ค(๋ค๋ง ์คํ๊ถ์์๋ ๋ฐ๋ฐ).
Reactโ
์ฅ์ :
- ์ํ๊ณ๊ฐ ๊ฑฐ๋ํ๊ณ ๊ธฐ์ ์ ๋ฐ์ดํธ ์๋๊ฐ ๋น ๋ฆ: ๊ฑฐ์ ๋ชจ๋ ํ๋ก ํธ์๋ ์ ๊ธฐ์ , ๋์์ธ ์์คํ , ์๋ํํฐ ์๋น์ค๊ฐ React ๋ฒ์ ์ ์ฐ์ ์ ๊ณตํฉ๋๋ค.
- ์ ์ฐ์ฑ์ด ๋๊ณ ํ๋ก์ ํธ์ ๋ง๊ฒ ๊ธฐ์ ์คํ์ ์์ ๋กญ๊ฒ ์กฐํฉ ๊ฐ๋ฅ: Redux / Zustand / Recoil ๋ฑ ๋ค์ํ ์ํ ๊ด๋ฆฌ์ ์กฐํฉ ๊ฐ๋ฅํ๋ฉฐ Next.js, Remix ๋ฑ์ Meta Framework๋ ์์ด SPA๋ถํฐ SSR, SSG, CSR๊น์ง ์ฑ์ํ ์๋ฃจ์ ์ด ์์ต๋๋ค.
- TypeScript ๋ฐ ํ๋ก ํธ์๋ ์์ง๋์ด๋ง๊ณผ์ ํตํฉ์ด ์ฑ์: ํ์ ๊ณผ ๋๊ท๋ชจ ํ๋ก์ ํธ์ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํ ์ปค๋ฎค๋ํฐ ๋ ผ์๊ฐ ํ๋ถํ์ฌ ์ฅ๊ธฐ ์ ์ง๋ณด์ ํ๋ก์ ํธ์ ๋์์ด ๋ฉ๋๋ค.
๋จ์ :
- ์์ ๋๊ฐ ๋์ ํ ์์ฒด ๊ท๋ฒ์ด ํ์: ๋ช ํํ ์ฝ๋ฉ ์คํ์ผ์ด๋ ์ํคํ ์ฒ ๊ท์ฝ ์์ด๋ ๊ฐ๋ฐ์๋ง๋ค ์์ ํ ๋ค๋ฅธ ์์ฑ ๋ฐฉ์๊ณผ ์ํ ๊ด๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ง๋ณด์ ๋น์ฉ์ด ์ฆ๊ฐํฉ๋๋ค.
- ํ์ต ๊ณก์ ์ด ์ค์ ๋ก ๋ฎ์ง ์์: React ์์ฒด(JSX, Hooks ์ฌ๊ณ ๋ฐฉ์) ์ธ์ Router, ์ํ ๊ด๋ฆฌ, ๋ฐ์ดํฐ ํ์นญ, SSR ๋ฑ ์ผ๋ จ์ ๊ธฐ์ ์ ํ์ ์ง๋ฉดํ์ฌ ์ด๋ณด์๊ฐ "์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ํํด์ผ ํ๋์ง" ํผ๋์ค๋ฌ์ํ๊ธฐ ์ฝ์ต๋๋ค.
- API ๋ณ๊ฒฝ๊ณผ ๋ชจ๋ฒ ์ฌ๋ก ์งํ๊ฐ ๋น ๋ฆ: Class Component์์ Function Component + Hooks, ๋ค์ Server Components๋ก์ ์ ํ ๋ฑ, ์ด์ ํ๋ก์ ํธ์ ์๋ก์ด ์์ฑ ๋ฐฉ์์ด ๊ณต์กดํ ๋ ์ถ๊ฐ ๋ง์ด๊ทธ๋ ์ด์ ๊ณผ ์ ์ง๋ณด์ ๋น์ฉ์ด ํ์ํฉ๋๋ค.