์น์๋น์ค์ ์ญ์ฌ์ ๋ํด ๋จผ์ ๋ณต์ตํด๋ณด์.
์น ์๋น์ค์ ์ญ์ฌ
1์ธ๋ ์น์ ์ ํต์ ์ธ Web System Architencture์ด๋ฉฐ ์ ์ ์ธ ์น์ด๋ค.
- ์น ์๋ฒ๊ฐ HTML ํ์ด์ง ์ ์ฒด๋ฅผ ํด๋ผ์ด์ธํธ(์น ๋ธ๋ผ์ฐ์ )์๊ฒ ์ ์กํ๋ค.
- ์ด์ฐฝ๊ธฐ ์น์ฌ์ดํธ๋ ๋จ์ํ ์ ๋ณด ์ ๊ณต์์ฃผ์๋ค. ํน๋ณํ ๊ธฐ๋ฅ์ด ์์์ผ๋ฉฐ ๋ฌด์๋ณด๋ค User Interaction์ด ๋ง์ด ์๊ตฌ๋์ง ์์๋ค.
- ๊ทธ๋ ๋ค๋ฉด ์ 1์ธ๋ ์น์ ์ ์ ์ผ๊น? HTML, CSS ์์ฒด๊ฐ ์ ์ ์ด๋ค
- ์ด๋ป๊ฒ ๋ณด์ฌ์ง๋๊ฐ์ ๋ํ ๊ฒ์ด๊ธฐ์ (๋์ ์ธ) ๋ก์ง์ด ์๋ค. ์ ์ ์ด๋ค.
2์ธ๋ ์น์ User Interaction์ ์ฆ๊ฐ, ๋์ ์น(์๋ฐ์คํฌ๋ฆฝํธ)
- ์น ์๋น์ค๋ค์ด ์ ์ ๋ฐ์ ํ๊ณ ์ด์ ๋ฐ๋ผ ๋จ์ํ ์ ์ ์ธ ํ์ด์ง๊ฐ ์๋ ๋ค์ด๋๋ฏนํ ์์๋ค์ด ์๊ตฌ๋์๋ค.
- ์น ๊ธฐ๋ฐ์ ์ธ์ด์ธ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ถํํ๋ค. ์ด ์ญํ ์ด ์ปค์ง๊ธฐ ์์ํจ
- web server์์ ์ ์ฒด HTML ํ์ด์ง๋ฟ๋ง ์๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ์๋ฒ์ ํ์ํ ๋ฐ์ดํฐ๋ง ์ฃผ๊ณ ๋ฐ์์ผ๋ก ๋ค์ด๋๋ฏนํ UI๋ฅผ ๊ตฌํํ๊ฒ ๋จ
- ๊ทธ๋ฌ๋ ์์ง js๋ ์ผ๋ถ๋ถ์์๋ง ์ฌ์ฉ๋์๊ณ ๋ํ ํ์ฌ ํต์ฉ๋๋ API์ ๊ฐ๋
์ด ์์ง์ ๋๋ฆฌ ์ฌ์ฉ๋์ง ์์์
3์ธ๋ ์น์ SPA(Single Page Application)
ํ๋ก ํธ์๋์ ๋ฐฑ์๋๊ฐ ๊ตฌ๋ณ๋๊ธฐ ์์ํ๋ค.
- ๋์ ์ธ ๊ธฐ๋ฅ์ด ์ฃผ๊ฐ ๋์ด๋ฒ๋ ธ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ฃผ๊ฐ ๋๊ณ ๊ทธ ์์ ์ผ๋ถ HTML,CSS๊ฐ ํฌํจ
- ์ด๊ฒ ๋ฐ๋ก SPA(single page application) ํ๋์ ํ์ผ๋ก ์ ์ฒด ์ฌ์ดํธ๋ฅผ ๊ตฌํ
- ์ด๋ฆ ๊ทธ๋๋ก ๋จ์ผ html ํ์ด์ง์์ ์ ์ฒด ์น ์ฌ์ดํธ/์๋น์ค๋ฅผ ๊ตฌํ
- ๊ธฐ์กด ๋ฐฉ์๋๋ก ์๋ฒ๊ฐ ํ์ด์ง ๊ตฌ์ฑ์ ํ์ํ ๋ชจ๋ ์์( HTML,JavaScript,Data)๋ฅผ ๋งค๋ฒ ์ ์กํ๋ ๊ฒ์ด ์๋๋ผ ํ์ผ์ ์ฒ์ ํ ๋ฒ๋ง ์ก์์ ํ๊ณ ๊ทธ ๋ค๋ก๋ ์ค์๊ฐ ๋ฐ์ดํฐ๋ง ์ฃผ๊ณ ๋ฐ๋๋ค.
- ์ ์ผ ์ฒ์ ์ ์ก๋ ๋จ์ผ HTML ํ์ด์ง์์ ํฌํจ๋์ด์๋ javascript์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ API์๋ฒ๋ก๋ถํฐ ํธ์ถํ์ฌ ํ์ํ ํ๋ฉด์ dynamicํ๊ฒ ์๋กญ๊ฒ ๊ตฌ์ฑํด์ฃผ๋ ๋ฐฉ์์ด๋ค.
- HTML ํ๊ทธ๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋์ ์ผ๋ก ์์ฑํ๋ค.
- ๋ช
ํํ ๋ ๊ฐ๋ก ๋๋ ์ ์๊ฒ ๋ค!=> ํ๋ก ํธ์๋์ ๋ฐฑ์๋๊ฐ ๋๋๊ฒ ๋๋ ๊ธฐ์
- ์ฆ HTML,Javascript๋ถ๋ถ๊ณผ ๋ฐ์ดํฐ ๋ถ๋ถ์ด ๊ตฌ์กฐ์ ์ผ๋ก ๋ถ๋ฆฌ ๋๊ธฐ ์์ํ๋ค.( ํ๋ก ํธ- UI,UX/ ๋ฐฑ์๋ -๋ฐ์ดํฐ)
- ๋ช
ํํ ๋๋์ด์ง ๋ ๊ฐ์ ์์คํ
์ผ๋ก ์น์ด ๋์ํ๊ฒ ๋จ
SPA ์ฅ์ 1.์ฌ์ฉ์ ์นํ์ ์ด๋ค.2. ์๋์ ์ผ๋ก ์ ์ ์ ์ฒด ํธ๋ํฝ ์ 3. ํ์ํ ๋ถ๋ถ๋ง ์๋ก ๊ทธ๋ฆฌ๊ณ ํ์ํ ๋ฐ์ดํฐ๋ง ์๋ก ๋ฐ๋๋ค 4.์๋์ ์ผ๋ก ์ ์ง ๋ณด์๊ฐ ์ฝ๊ณ ๊ฐ๋ฐ์๋๊ฐ ๋น ๋ฅด๋ค 5.ํ๋ก ํธ์๋์ ๋ฐฑ์๋์ ๋ถ๋ฆฌ๋ก์ธํ ๊ฐ๋ฐ์
๋ฌด ๋ถ์
ํ ๋ฐ ํ์
์ด ์ฝ๋ค
SPA๋จ์ 1.(JSํ์ผ์ ๋ฒ๋ค๋งํด์ ํ๋ฒ์ ๋ฐ๊ธฐ์)์ด๊ธฐ ๊ตฌ๋์๋ ๋๋ฆผ =>Lazy Loading์ผ๋ก ํด๊ฒฐ๊ฐ๋ฅ 2. ๊ฒ์์์ง ์ต์ ํSEO๊ฐ ์ด๋ ค์ =>SSR๋ก ํด๊ฒฐ 3. ๋ณด์ ๋ฌธ์ =>ํต์ฌ๋ก์ง ์ต์ํ
SPA๊ฐ ์ฌ์ฉํ๋ ๋ ๋๋ง ๋ฐฉ์์ CSR์ด๊ณ , MPA๊ฐ ์ฌ์ฉํ๋ ๋ ๋๋ง ๋ฐฉ์์ SSR์ด๋ค.
CRA (Create React App)
์๋ฌด๋ฐ ์ด๊ธฐ ์ค์ ์์ด๋ CRA๋ฅผ ํตํด ๋ฆฌ์กํธ ๊ธฐ๋ฐ์ ์ฌ์ดํธ๋ฅผ ๊ตฌํํ ์ ์๊ฒ ๋์๋ค. ๊ทธ๋ฐ๋ฐ ์ด์ํ ์ ์ด ๋ฐ๊ฒฌ๋๊ธฐ ์์ํ๋ค
" ์ ์ฐ๋ฆฌ ์ฌ์ดํธ๊ฐ ๊ฒ์์ ์ ์๊ฑธ๋ฆด๊น?"
์์ธ=> CRA๋ก buildํ ํ๋ก์ ํธ๋ only CSR(Client Side Render)๋ก ์คํ๋๊ธฐ ๋๋ฌธ์ด๋ค.
CSR( Client side Rendering)
- ์น ํ์ด์ง์ ๋ ๋๋ง์ด ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ ) ์ธก์์ ์ผ์ด๋๋ ๊ฒ์ ์๋ฏธ
- ๋ธ๋ผ์ฐ์ ๋ ์ต์ด ์์ฒญ์์ html,js,css ํ์ฅ์์ ํ์ผ์ ์ฐจ๋ก๋ก ๋ค์ด๋ก๋ ํ๋ค.
- ์ต์ด๋ก ๋ถ๋ฌ์จ html์ ๋ด์ฉ์ ๋น์ด์๋ค.(html,bodyํ๊ทธ๋ง ์กด์ฌํจ) =>๊ทธ๋์ ์ฒ์์ ์ ์ํ๋ฉด ๋นํ๋ฉด๋ง ๋ณด์ธ๋ค.
- ์๋ฒ๋ก๋ถํฐ js ํ์ผ๋ค์ด๋ก๋ ๋ฐ๋๋ค. ์ฌ๊ธฐ ์๋ฐ์คํฌ๋ฆฝํธ์๋ ์ดํ๋ฆฌ์ผ์ด์
์ ๊ตฌ๋ํ๋ ํ๋ ์์ํฌ,๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์ค์ฝ๋๋ค๋ ๋ค ํฌํจ์ด ๋๋ค. (์ฌ์ด์ฆ๊ฐ ์ปค์ ๋ค์ด๋ก๋๋ฐ๋๋ฐ๋ ์๊ฐ์ด ์ค๋๊ฑธ๋ฆผ)๋ค์ด๋ก๋ ์๋ฃ๋ ๋ค์ ํด๋น jsํ์ผ์ด dom์ ๋น html์์ ๊ทธ๋ฆฌ๊ธฐ ์์
- ๋ฐฑ์๋ ํธ์ถ์ ์ต์ํํ ์ ์๋ค ( ์ต์ด ํธ์ถ ๋๋ง html,js,css๋ฅผ ์์ฒญํ๋ค, ์ดํ์๋ ํ๋ฉด์์ ๋ณํ๊ฐ ์ผ์ด๋์ผ ํ๋ ๋งํผ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํจ)
- ๋ผ์ฐํ
์ ํ๋๋ผ๋ html ์์ฒด๊ฐ ๋ฐ๋๋ ๊ฒ์ด ์๋๋ผ javascript ์ฐจ์์์ ์๋ก์ด ํ๋ฉด์ ๊ทธ๋ ค๋ด๋ ๊ฒ์ด๋ค.
์ฅ์ : ์ฒซ ๋ก๋ฉ๋ง ๊ธฐ๋ค๋ฆฌ๋ฉด, ๋์ ์ผ๋ก ๋น ๋ฅด๊ฒ ๋ ๋๋ง์ด ๋๊ธฐ์ ux๊ฐ ์ข๋ค. ์๋ฒ์ ์์ฒญํ๋ ํ์๊ฐ ํจ์ฌ ์ ์ด์ ์๋ฒ์ ๋ถ๋ด์ด ๋ํ๋ค
๋จ์ : 1. ์ฌ์ฉ์๊ฐ ์ฒซ ํ๋ฉด์ ๋ณด๊ธฐ๊น์ง ์๊ฐ์ด ์ค๋๊ฑธ๋ฆฐ๋ค.2 (๊ฒ์์์ง์ด ํฌ๋กค๋ง์ ํ๋๋ฐ ์ด๋ ค์์ ๊ฒช๊ธฐ์)๊ฒ์์์ง ์ต์ ํ์ ๋ฌธ์ ๊ฐ ์๋ค.=>๋ค์ด๋ฒ์ ๊ฐ์ ๊ฒ์์์ง๋ค์ ์๋ฒ์ ๋ฑ๋ก๋ ์น์ฌ์ดํธ๋ฅผ ํ๋ํ๋ ๋์๋ค๋๋ฉด์ ์น์ฌ์ดํธ HTML๋ฌธ์๋ฅผ ๋ถ์ํด์ ์ฌ์ฉ์๊ฐ ๊ฒ์ํ ๋ ์น์ฌ์ดํธ๋ค์ ๋น ๋ฅด๊ฒ ๊ฒ์ํ ์ ์๊ฒ ๋์์ค๋ค. ํ์ง๋ง CSR์์ ์ฌ์ฉ๋๊ณ ์๋ HTML์ ๋ฐ๋๋ ๋๋ถ๋ถ ํ
ํ
๋น์ด์๊ธฐ์ ๊ฒ์์์ง๋ค์ด CSR๋ก ์์ฑ๋ ์นํ์ด์ง๋ค์ ๋ถ์ํ๋๋ฐ ์ด๋ ค์์ ๊ฒผ๋๋ค.
SEO (Search Engine Optimization)
- ํ์ง๋ง ์น ํฌ๋กค๋ฌ ์
์ฅ์์ CSR๋ก ๊ตฌ์ฑ๋ ํ์ด์ง์ ์ ์ํ๋ ์๋๋ฆฌ์ค๋ฅผ ์ฌ๊ตฌ์ฑ
--> CRA๋ก ๋ง๋ค์๋ ํ์ด์ง๋ค์ด ๊ฒ์ ๋
ธ์ถ์ด ์ ์๋๋ค๋ ์ฌ์ค์ด ์๋ ค์ง๋ฉด์ SEO์ ๋ฏผ๊ฐํ ์ปค๋จธ์ค ๋ฑ์ ๋น์ฆ๋์ค ์์ญ์ ๋์์ ์ฐพ์์ผ ํ๋ค.
SPA์ ์ฅ์ ์ ์ด๋ฆฌ๋ฉด์ SEO๋ ๊ฐ์ด ์ฑ๊ธธ ์๋ ์์๊น?
==>SSR(Server Side Rendering)
SSR(Server Side Rendering)
- SSR์ ์๋ฒ์์ ์ฒซ ํ์ด์ง์ ๋ ๋๋ง์ ํด๋ผ์ด์ธํธ ์ธก์ด ์๋ ์๋ฒ ์ธก์์ ์ฒ๋ฆฌํด์ฃผ๋ ๋ฐฉ์์ด๋ค. (์๋ฒ์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๊ฐ์ ธ์์ HTMLํ์ผ์ ๋ง๋ค๊ฒ ๋๋ค)
CSR์ด๋ ๋น๊ตํ์ ๋,
1) SEO์ธก๋ฉด์์ ์ ๋ฆฌํ๋ค.
-> ์๋ฒ์์ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค ํ์ด์ง๋ฅผ ๋ชจ๋ ๊ตฌ์ฑํ์ฌ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์์ด๊ธฐ์ CSR์ ๋จ์ ์ธ "์ฒซํ์ด์ง ๊นกํต" ์ํ๋ฅผ ๊ทน๋ณตํ ์ ์์
2) UX์ธก๋ฉด์์ ์ ๋ฆฌํ๋ค
-> CSR์ ๋นํด ํ์ด์ง๋ฅผ ๊ตฌ์ฑํ๋ ์๋๋ ๋ฆ์ด์ง์ง๋ง, ์ ์ฒด์ ์ผ๋ก ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๋ ์ฝํ
์ธ ๊ตฌ์ฑ์ด ์๋ฃ๋๋ ์์ ์ ๋นจ๋ผ์ง๋ค.
์ฃผ์) ํ์ด์ง๋ฅผ ์๋ชป ๊ตฌ์ฑํ ๊ฒฝ์ฐ CSR์ ๋นํด ์๋ฒ ๋ถํ๊ฐ ์ปค์ง๊ฑฐ๋ ์ฒซ ๋ก๋ฉ์ด ๋งค์ฐ ๋๋ ค์ง ์ ์์
์ฅ์ : ์ด๊ธฐ๋ก๋ฉ ์๋๊ฐ ๋น ๋ฅด๊ธฐ์ ์ฌ์ฉ์๊ฐ ์ปจํ
์ธ ๋ฅผ ๋นจ๋ฆฌ ๋ณผ ์ ์๋ค. ๊ฒ์์์ง ์ต์ ํ๊ฐ ๊ฐ๋ฅํ๋ค.
๋จ์ :๋งค๋ฒ ํ์ด์ง๋ฅผ ์์ฒญํ ๋๋ง๋ค ์๋ก๊ณ ์นจ ๋๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ๊ฒฝํ์ด SPA์ ๋นํด์ ์ข์ง ์๋ค.
์๋ฒ์ ๋งค๋ฒ ์์ฒญ์ ํ๊ธฐ์ ์๋ฒ์ ๋ถํ๊ฐ ์ปค์ง๋ค.
1.Blinking issue ์ฌ์ฉ์๊ฐ ํด๋ฆญ์ ํ๊ฒ๋๋ฉด ์ ์ฒด์ ์ธ ์น์ฌ์ดํธ๋ฅผ ๋ค์ ์๋ฒ์์ ๋ฐ์์ค๋ ๊ฒ๊ณผ ๋์ผํ๊ธฐ์ ์ฌ์ฉ์๊ฒฝํ์ด ์ข์ง ์๋ค.
2. ์๋ฒ ๊ณผ๋ถํ ๊ฑธ๋ฆฌ๊ธฐ ์ฝ๋ค. ์ฌ์ฉ์๊ฐ ๋ง์ด ์ ์ํ๋ฉด ์ฌ์ฉ์๊ฐ ํด๋ฆญํ ๋๋ง๋ค ์๋ฒ์ ์์ฒญ์ ํ๋๊น ์๋ฒ ๊ณผ๋ถํ ๊ฑธ๋ฆฌ๊ธฐ ์ฌ์
hydration
-
์๋ฒ์์ ์ ์กํ ์ ์ ๋ฌธ์๋ฅผ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๋ฐ์ํ ์ ์๋ ๋์ ํํ๋ก ๋ณํํ๋ ํด๋ผ์ด์ธํธ ์ธก ํ๋ก์ธ์ค๋ฅผ ๋งํ๋ค.
-
render์ ๋์ผํ์ง๋ง, dom์ ์ด๋ฏธ ๊ทธ๋ ค์ ธ ์๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ event listener๋ง ๋ถ์ฐฉํ๋ ์์ผ๋ก ์๋.
- SPA(๊ฒฐ๊ณผ๋ฌผ) =CSR,SSR(๋ ๋๋ง ๋ฐฉ๋ฒ)
- SSR๊ณผ CSR์ ์์ด ์ธ ์ ์๋ ๋ฐฉ๋ฒ =>Next.js
์ถ์ฒ: wecode