
๋ฆฌ์กํธ(React)์ ๋ฅ์คํธ.js(Next.js) ๊ฐ์ฅ ์ฝ๊ฒ ์ดํดํ๊ธฐ
๋ฆฌ์กํธ์ ๋ฅ์คํธ.js๋ ์น ๊ฐ๋ฐ์์ ์์ฃผ ๋ง์ด ์ฐ์ด๋ ๊ธฐ์ ์ธ๋ฐ, ์ด๋ณด์๋ถ๋ค์ด ์ฒ์ ์ ํ๋ฉด “๋๋์ฒด ๋ญ๊ฐ ๋ค๋ฅธ ๊ฑฐ์ง?” ํ๊ณ ํท๊ฐ๋ฆฌ๊ธฐ ์ฌ์์. ํ๊ตญ ๊ฐ๋ฐ์๋ค์ด ์ฒ์ ๋ฐฐ์ธ ๋ ํํ ๋๋ผ๋ ๋๊ด์ ๊ธฐ์ค์ผ๋ก, ์ ๋ง ์ฝ๊ฒ ํ์ด์ ์ค๋ช ๋๋ฆด๊ฒ์.
๐ฆ ๋ฆฌ์กํธ(React)๋?
“์น ํ๋ฉด์ ํจ์จ์ ์ผ๋ก ๋ง๋ค๊ธฐ ์ํ ๋๊ตฌ”๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
ํต์ฌ ๊ฐ๋
- ๋ฆฌ์กํธ๋ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- **ํ๋ฉด์ ์์ ์กฐ๊ฐ(์ปดํฌ๋ํธ)**์ผ๋ก ๋๋์ด ๋ง๋ค๊ฒ ๋์์ค๋๋ค.
- ํ์ํ ๋ถ๋ถ๋ง ๋ค์ ๊ทธ๋ ค์ ๋น ๋ฅด๊ฒ ๋์ํฉ๋๋ค.
- ์: ๋ฒํผ, ์ ๋ ฅ์ฐฝ, ๊ฒ์๊ธ ์นด๋ ๋ฑ ๋ชจ๋ ๊ฒ์ด ์ปดํฌ๋ํธ!
์์๋ก ์ดํดํ๊ธฐ
๋ ๊ณ ๋ธ๋ก์ผ๋ก ์ง์ ์ง๋ ๋๋
๋ ๊ณ ํ๋ํ๋๊ฐ ‘์ปดํฌ๋ํธ’, ๋ ๊ณ ๋ฅผ ์กฐ๋ฆฝํ ์ง์ด ํ๋์ ‘์น ํ์ด์ง’์ ๋๋ค.
๐ฉ Next.js(๋ฅ์คํธ.js)๋?
๋ฆฌ์กํธ๋ฅผ ๋ ํธํ๊ฒ, ๋ ๋น ๋ฅด๊ฒ, ๋ SEO ์ ๋๊ฒ ๋ง๋ค๊ธฐ ์ํ ๋ฆฌ์กํธ ๊ธฐ๋ฐ ํ๋ ์์ํฌ์ ๋๋ค.
์ฝ๊ฒ ๋งํ๋ฉด
๋ฆฌ์กํธ๋ก ๋ง๋ ์ง์ ๋ ์ ๊ด๋ฆฌํ ์ ์๊ฒ ๊ธฐ๋ฅ์ ์ถ๊ฐํด์ฃผ๋ ‘์ํํธ ๊ด๋ฆฌ ๋๊ตฌ’
Next.js๊ฐ ๋ฆฌ์กํธ๋ณด๋ค ๋ ์ข์ ์
| ํ์ด์ง ์ด๋ | ์ง์ ์ฝ๋ ์์ฑ ํ์ | ์๋ ๋ผ์ฐํ ์ ๊ณต (ํด๋๋ง ๋ง๋ค๋ฉด ๋) |
| ๊ฒ์ ์์ง ์ต์ ํ(SEO) | ์ฝํจ | ์๋ฒ์์ ๋ฏธ๋ฆฌ HTML ์์ฑ → SEO ๊ฐํจ |
| ์๋ ์ต์ ํ | ์ง์ ์ฑ๊ฒจ์ผ ํจ | ์๋ ์ด๋ฏธ์ง ์ต์ ํ, ์ฝ๋ ๋ถํ ๋ฑ ๊ธฐ๋ณธ ์ ๊ณต |
| ์๋ฒ ๊ธฐ๋ฅ | ์ง์ ๊ตฌ์ถํด์ผ ํจ | API Route ๊ธฐ๋ฅ์ผ๋ก ๋ฐฑ์๋๋ ๊ธฐ๋ณธ |
๐ฏ ํ ์ค ์์ฝ
- React: ํ๋ฉด ๋ง๋๋ ๊ธฐ์
- Next.js: React๋ฅผ ๋ ์ฝ๊ฒ, ๋น ๋ฅด๊ฒ, ์ ๋ง๋ค๋๋ก ๋์์ฃผ๋ ํ๋ ์์ํฌ
Next.js์ Node.js — ํท๊ฐ๋ฆฌ์ง ์๊ฒ ๊ฐ์ฅ ์ฝ๊ฒ ์ค๋ช ํด๋๋ฆด๊ฒ์!
๋ ์ด๋ฆ์ด ๋น์ทํด์ ์ด๋ณด์๋ถ๋ค์ด ์์ฃผ ํท๊ฐ๋ฆฝ๋๋ค. ํ์ง๋ง ์ด ๋์ ์ญํ ์ ์์ ํ ๋ค๋ฆ
๋๋ค.
ํ๊ตญ ๊ฐ๋ฐ์ ๊ด์ ์์ ๋ฑ ๊ตฌ๋ถ๋๊ฒ ์ค๋ช
๋๋ฆด๊ฒ์.
๐ฆ ํ ์ค๋ก ๋น๊ต!
- Next.js = ํ๋ก ํธ์๋(์น ํ๋ฉด) ํ๋ ์์ํฌ
- Node.js = ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์๋ฒ๋ฅผ ๋ง๋ค ์ ์๊ฒ ํด์ฃผ๋ ๋ฐํ์ ํ๊ฒฝ
๐ฉ Next.js๋?
๋ธ๋ผ์ฐ์ ์์ ๋ณด์ด๋ ‘์น ํ๋ฉด’์ ๋ง๋๋ ๋ฐ ํนํ๋ ํ๋ ์์ํฌ
ํต์ฌ ํน์ง
- React ๊ธฐ๋ฐ
- ํ์ด์ง ๋ผ์ฐํ ์๋ํ
- SEO ๊ฐํจ
- ์๋ฒ์์ HTML ๋ฏธ๋ฆฌ ์์ฑ ๊ฐ๋ฅ(SSR, SSG)
- ํ๋ก ํธ ์ค์ฌ์ด์ง๋ง ๊ฐ๋จํ API ์๋ฒ๋ ๋ง๋ค ์ ์์
์ฝ๊ฒ ๋น์ ํ๋ฉด
Next.js = ์น์ฌ์ดํธ๋ฅผ ๋น ๋ฅด๊ณ ํธํ๊ฒ ๋ง๋ค ์ ์๋ ‘ํ๋ก ํธ์๋ ๊ณ ๊ธ ๋๊ตฌ ์ธํธ’
๐ง Node.js๋?
์๋ฒ๋ฅผ ๋ง๋ค๊ธฐ ์ํ ํ๊ฒฝ(๋ฐํ์)
๋ธ๋ผ์ฐ์ ์์๋ง ์คํ๋๋ JS๋ฅผ ์๋ฒ์์๋ ์คํํ ์ ์๊ฒ ๋ง๋ ๊ธฐ์ .
ํต์ฌ ํน์ง
- ์๋ฒ ๊ฐ๋ฐ ๊ฐ๋ฅ
- ํ์ผ ์ฝ๊ธฐ/์ฐ๊ธฐ ๊ฐ๋ฅ
- DB ์ฐ๊ฒฐ ๊ฐ๋ฅ
- Express ๊ฐ์ ์๋ฒ ํ๋ ์์ํฌ์ ์์ฃผ ์ฌ์ฉ
๋น์ ํ๋ฉด
Node.js = ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋์๊ฐ๋ ์ฃผ๋ฐฉ(ํ๊ฒฝ)
์ด๋ค ์๋ฆฌ๋ (์๋ฒ๋ , ์์ ์ด๋ ) ๋ง๋ค ์ ์๋ ๊ธฐ๋ฐ
๐จ ๋์ ๊ด๊ณ๋ฅผ ์๊ฐ์ ์ผ๋ก ์ ๋ฆฌํ๋ฉด
| ์ญํ | ์น ํ๋ก ํธ์๋ + ์ผ๋ถ ์๋ฒ ๊ธฐ๋ฅ | ์๋ฒ ๊ฐ๋ฐ์ฉ ๋ฐํ์ |
| ๊ธฐ๋ฐ ๊ธฐ์ | React | V8 JavaScript ์์ง |
| ์ฌ์ฉ ๋ชฉ์ | ์น ํ๋ฉด ์ ์, SEO, SSR | ๋ฐฑ์๋ ์๋ฒ, API, ๋ฐฐ์น ์์ |
| ์ฝ๋ ์คํ ์์น | ์ฃผ๋ก ๋ธ๋ผ์ฐ์ + ์๋ฒ | ์๋ฒ |
| ๋ํ ๊ธฐ๋ฅ | ๋ผ์ฐํ , SSR, ์ด๋ฏธ์ง ์ต์ ํ | DB ์ฐ๋, ํ์ผ ์ฒ๋ฆฌ, ์๋ฒ ๊ตฌ |
React, Next.js, Node.js, Component์ ์์ญ
์น ๊ฐ๋ฐ์ ํฌ๊ฒ **ํ๋ก ํธ์๋(Frontend)**์ **๋ฐฑ์๋(Backend)**๋ก ๋๋ ์ ์์ด์. ์ด ๋น์ ๋ ์๊น '์ง ์ง๊ธฐ'๋ก ๋ค์ ์๊ฐํด ๋ณด๋ฉด ์์ฃผ ์ฝ๊ฒ ์ดํดํ ์ ์์ต๋๋ค.
- ํ๋ก ํธ์๋ (Frontend): ์ฌ์ฉ์๊ฐ ์ง์ ๋ณด๊ณ ์ํธ์์ฉํ๋ ์น์ฌ์ดํธ์ '๋ณด์ด๋ ๋ถ๋ถ'์ ๋๋ค. ๋ง์น ์ง์ ์๋ฆ๋ค์ด ์ธ๊ด, ๊ฑฐ์ค, ์นจ์ค ๊ฐ์ '์ฌ์ฉ์๊ฐ ์ง์ ์ํํ๋ ๊ณต๊ฐ'๊ณผ ๊ฐ์์.
- ๋ฐฑ์๋ (Backend): ์น์ฌ์ดํธ์ '๋ท๋จ'์์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์๋ฒ ๊ด๋ฆฌ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋ ๋ฑ ๋ณด์ด์ง ์๋ ๊ณณ์์ ํต์ฌ์ ์ธ ๋ก์ง์ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ์ ๋๋ค. ์ง์ผ๋ก ์น๋ฉด ์ ๊ธฐ, ์๋, ๋๋ฐฉ ์์คํ ์ฒ๋ผ '์ง์ด ์ ๋๋ก ์๋ํ๋๋ก ํ๋ ํต์ฌ ์ธํ๋ผ'๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
์, ๊ทธ๋ผ ๊ฐ ๊ธฐ์ ๋ค์ ํ๋์ฉ ์ดํด๋ณผ๊น์?
1. React (๋ฆฌ์กํธ): ์๋ฒฝํ ํ๋ก ํธ์๋ ๊ธฐ์ ! โจ
- React๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ์ค๋ก์ง ์ฌ์ฉ์์ ๋์ ๋ณด์ด๋ ํ๋ฉด์ ๋ง๋ค๊ณ , ์ฌ์ฉ์์์ ์ํธ์์ฉ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ๋ฐ๋ผ์ React๋ ๋ช ๋ฐฑํ๊ฒ ํ๋ก ํธ์๋ ์์ญ์ ์ํฉ๋๋ค.
2. Component (์ปดํฌ๋ํธ): React์ ํ๋ก ํธ์๋๋ฅผ ๊ตฌ์ฑํ๋ ํต์ฌ ์์! ๐งฑ
- ์ปดํฌ๋ํธ๋ React๋ฅผ ํฌํจํ ์ฌ๋ฌ UI ๊ฐ๋ฐ์์ ์ฌ์ฉ๋๋ ๊ฐ๋ ์ด์ง๋ง, ์ฐ๋ฆฌ๊ฐ React๋ฅผ ๋ฐฐ์ฐ๋ ๋งฅ๋ฝ์์๋ 'ํ๋ก ํธ์๋ ํ๋ฉด์ ๊ตฌ์ฑํ๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ ๋ฆฝ์ ์ธ ๋ถํ'์ด๋ผ๊ณ ์ค๋ช ํด ๋๋ ธ์์ฃ .
- ๋ฐ๋ผ์ ์ปดํฌ๋ํธ ๋ํ React์ ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋ก ํธ์๋ ์์ญ์ ๊ฐ๋ ์ ๋๋ค. ์น์ฌ์ดํธ์ ๋ณด์ด๋ ๋ถ๋ถ์ ๋ธ๋ก์ฒ๋ผ ์กฐ๋ฆฝํ๋ ๋จ์๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ผ์.
3. Next.js (๋ฅ์คํธ.js): ์ฃผ๋ก ํ๋ก ํธ์๋์ ๊ฐ๊น์ง๋ง, ์๋ฒ์ ๋์์ ๋ฐ๋ ํ๋ก ํธ์๋! ๐
- Next.js๋ React ๊ธฐ๋ฐ์ ํ๋ ์์ํฌ๋ก, React ์ฑ์ ๋ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ๋ง๋ค ์ ์๋๋ก ๋๋๋ค๊ณ ์ค๋ช ๋๋ ธ์ฃ . Next.js์ ์ฃผ์ ๊ธฐ๋ฅ์ธ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR)์ด๋ ์ ์ ์ฌ์ดํธ ์์ฑ(SSG)์ ์๋ฒ์ ์์์ ํ์ฉํ์ฌ ๋ฏธ๋ฆฌ ์น ํ์ด์ง๋ฅผ ๋ง๋ค์ด์ ์ฌ์ฉ์์๊ฒ ๋ณด๋ด์ฃผ๋ ๋ฐฉ์์ด์์.
- ์ด๋ฌํ ๊ณผ์ ์ ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฌ์ฉ์์ ์น ๋ธ๋ผ์ฐ์ ์ ํ์๋ ํ๋ฉด(ํ๋ก ํธ์๋)์ ๋ ๋น ๋ฅด๊ฒ ๋ณด์ฌ์ฃผ๊ธฐ ์ํจ์ ๋๋ค. ๋ํ, Next.js์๋ API ๋ผ์ฐํธ ๊ธฐ๋ฅ์ ํตํด ๊ฐ๋จํ ๋ฐฑ์๋ ๋ก์ง๋ ์ฒ๋ฆฌํ ์ ์์ง๋ง, ์ด๋ ์ฃผ๋ก ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์ํ๋ ์ญํ ์ด ๋ ํฝ๋๋ค.
- ๋ฐ๋ผ์ Next.js๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ก ํธ์๋ ํ๋ ์์ํฌ๋ก ๋ถ๋ฅ๋์ง๋ง, ๋ฐฑ์๋์ ์ผ๋ถ ๊ธฐ๋ฅ(์๋ฒ ๋ ๋๋ง, API ๋ผ์ฐํ ๋ฑ)์ ํ์ฉํ์ฌ ํ๋ก ํธ์๋๋ฅผ ์ต์ ํํ๋ ํ์ด๋ธ๋ฆฌ๋์ ์ธ ํน์ฑ์ ๊ฐ์ง๊ณ ์๋ค๊ณ ์ดํดํ์๋ฉด ์ข์์.
4. Node.js (๋ ธ๋.js): ์๋ฒฝํ ๋ฐฑ์๋ ๊ธฐ์ ! ๐ง
- Node.js๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์น ๋ธ๋ผ์ฐ์ ๋ฐ, ์ฆ ์๋ฒ ํ๊ฒฝ์์ ์คํํ ์ ์๊ฒ ํด์ฃผ๋ ๋ฐํ์ ํ๊ฒฝ์ ๋๋ค.
- ์ด ๊ธฐ์ ์ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋ํ๊ณ , ์ฌ์ฉ์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ๋ ๋ฑ์ ๋ฐฑ์๋ ๋ก์ง์ ๊ฐ๋ฐํ๊ฒ ๋ฉ๋๋ค. ์น์ฌ์ดํธ์ '๋๋'๋ '์ฌ์ฅ' ์ญํ ์ ํ๋ค๊ณ ๋น์ ํ ์ ์์ด์.
- ๊ทธ๋์ Node.js๋ ๋ถ๋ช ํ๊ฒ ๋ฐฑ์๋ ์์ญ์ ์ํฉ๋๋ค.
์ ๋ฆฌํ์๋ฉด, ๊ธ์ ์์ง์ง๋!
- ํ๋ก ํธ์๋: React, Component
- ํ์ด๋ธ๋ฆฌ๋(ํ๋ก ํธ์๋ ์ค์ฌ): Next.js
- ๋ฐฑ์๋: Node.js
๐จ React (๋ฆฌ์กํธ)์ Component (์ปดํฌ๋ํธ)์ ์ฐจ์ด์
1. React (๋ฆฌ์กํธ): '์ง์ ์ง๋ ๋๊ตฌ ์์'์ด์ '์ค๊ณ ๊ท์น'
- ๋ฆฌ์กํธ๋ ์น์ฌ์ดํธ์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์.
- ์ฝ๊ฒ ๋งํด, '์์ ์ง์ ์ง๊ธฐ ์ํ ์ ๋ฌธ์ ์ธ ๋๊ตฌ ์์' ๋๋ '์ง์ ์ด๋ป๊ฒ ํจ์จ์ ์ผ๋ก ์ง์์ง์ ๋ํ ์ค๊ณ ๊ท์น๊ณผ ๊ฐ์ด๋๋ผ์ธ'์ด๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ผ์.
- ๋ฆฌ์กํธ๋ ์ด ๋๊ตฌ ์์์ ๊ท์น์ ํตํด ์ฐ๋ฆฌ๊ฐ ์น ํ์ด์ง์ ๊ฐ ๋ถ๋ถ์ ์กฐ๋ฆฝํ๊ณ ๊ด๋ฆฌํ ์ ์๋๋ก ํด์ค๋๋ค.
2. Component (์ปดํฌ๋ํธ): '๋๊ตฌ ์์๋ฅผ ์ด์ฉํด ๋ง๋ ๊ฐ๋ณ ๊ฑด์ถ ๋ถํ'
- ์ปดํฌ๋ํธ๋ ๋ฆฌ์กํธ ์์์ ์น ํ์ด์ง์ ํน์ ๋ถ๋ถ์ ๊ตฌ์ฑํ๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ ๋ฆฝ์ ์ธ ๋จ์์์.
- ์๋ฅผ ๋ค์ด, ์น์ฌ์ดํธ์์ ๋ณผ ์ ์๋ '๋ฒํผ', '๋ด๋น๊ฒ์ด์ ๋ฐ', '์นด๋', '๋๊ธ ์ฐฝ', '์ด๋ฏธ์ง ๊ฐค๋ฌ๋ฆฌ' ๋ฑ ํ๋ํ๋๊ฐ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ๋ ์ ์์ต๋๋ค.
- ์ด๋ฌํ ์ปดํฌ๋ํธ๋ค์ '๋ฆฌ์กํธ'๋ผ๋ ๋๊ตฌ ์์๋ฅผ ์ด์ฉํด์ ๋ง๋ค๊ณ , ๊ทธ ๋๊ตฌ ์์์ ์ค๊ณ ๊ท์น์ ๋ฐ๋ผ ์กฐ๋ฆฝ๋์ด ํ๋์ ํฐ ์น ํ์ด์ง๋ฅผ ๋ง๋ค์ด๋ ๋๋ค.
- ์ง์ผ๋ก ๋น์ ํ์๋ฉด, ์ปดํฌ๋ํธ๋ 'ํผํผํ ๋ฒฝ๋', '์๋ฆ๋ค์ด ์ฐฝ๋ฌธ', '์ด๊ณ ๋ซ์ ์ ์๋ ๋ฌธ' ๊ฐ์ ๊ฐ๋ณ์ ์ธ ๊ฑด์ถ ๋ถํ๋ค์ด์์. ์ด ๋ถํ๋ค์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ ธ์ ํ์ํ ๋๋ง๋ค ๊ฐ์ ธ๋ค ์ธ ์ ์์ฃ .
โจ ํต์ฌ ์ ๋ฆฌ:
- **๋ฆฌ์กํธ (React)**๋ '๋ฌด์์ ๋ง๋ค์ง'์ ๋ํ ๊ท์น๊ณผ ๋๊ตฌ๋ฅผ ์ ๊ณตํ๋ ์ ์ฒด ์์คํ ์ ๋๋ค. (์: ์ง์ ์ง๋ ๋ฐฉ๋ฒ๊ณผ ๋๊ตฌ)
- **์ปดํฌ๋ํธ (Component)**๋ **๋ฆฌ์กํธ๋ผ๋ ์์คํ ์์์ ์ค์ ๋ก ๋ง๋ค์ด์ง๋ ๊ฐ๋ณ์ ์ธ '๋ถํ'**์ ๋๋ค. (์: ์ง์ ์ด๋ฃจ๋ ๊ฐ๋ณ ๋ฒฝ๋, ์ฐฝ๋ฌธ, ๋ฌธ ๋ฑ)
๋น๋๊ธฐ ๊ตฌ์กฐ๋ฅผ ์ฐ๋ ์ด์ — ์ด๋ณด์๋ ๋ฑ ์ดํด๋๊ฒ!
๋น๋๊ธฐ(asynchronous)๋ ์ฒ์ ๋ค์ผ๋ฉด ์ด๋ ต์ง๋ง, ์ฌ์ค ์น ๊ฐ๋ฐ์์ ํ์ ๊ธฐ์ ์
๋๋ค. ์ ์ฐ๋์ง๋ง ์ ํํ ์ดํดํ๋ฉด ํจ์ฌ ์์ํด์ ธ์.
ํ๊ตญ ๊ฐ๋ฐ์๋ค์ด ๊ฐ์ฅ ํท๊ฐ๋ ค ํ๋ ํฌ์ธํธ ์ค์ฌ์ผ๋ก ์์ฃผ ์ฝ๊ฒ ์ค๋ช
๋๋ฆด๊ฒ์.
๐ฆ ๋น๋๊ธฐ๋ฅผ ์ฐ๋ ์ด์ ํ ์ค ์์ฝ
๋๋ฆฐ ์์ ๋๋ฌธ์ ํ๋ก๊ทธ๋จ ์ ์ฒด๊ฐ ๋ฉ์ถ์ง ์๊ฒ ํ๊ธฐ ์ํด์!
์๋ฐ์คํฌ๋ฆฝํธ์์ ๋น๋๊ธฐ๊ฐ ๊ผญ ํ์ํ ์ด์
๋ธ๋ผ์ฐ์ ์ JavaScript ์์ง์ **์ฑ๊ธ ์ค๋ ๋(1๋ช
๋ง ์ผํ๋ ๊ตฌ์กฐ)**์
๋๋ค.
๊ทธ๋์ ๋๋ฆฐ ์์
์ด ์์ผ๋ฉด ์ ์ฒด๊ฐ ๋ฉ์ถฐ๋ฒ๋ ค์.
์: ๋คํธ์ํฌ ์์ฒญ, ํ์ผ ์ฝ๊ธฐ, ํ์ด๋จธ
- ์๋ฒ์ ๋ฐ์ดํฐ ์์ฒญ: ๋ช ์ด ๊ฑธ๋ฆผ
- ํฐ ํ์ผ ์ฝ๊ธฐ: ์ค๋ ๊ฑธ๋ฆผ
- ์ด๋ฏธ์ง ๋ก๋ฉ: ์๊ฐ ๊ฑธ๋ฆผ
์ด๊ฑธ ๋๊ธฐ ๋ฐฉ์์ผ๋ก ํ๋ฉด ํ๋ฉด์ด ๋ฉ์ถ๊ณ ํด๋ฆญ๋ ์ ๋จน๋ ํ์์ด ๋ฐ์ํฉ๋๋ค.
๐ง ๋น๋๊ธฐ ๊ตฌ์กฐ์ ๊ตฌ์ฒด์ ์ฅ์
1) ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฉ์ถ์ง ์๋๋ค
ํ์ด์ง๊ฐ “๋จนํต”์ด ๋๋ ๊ฑธ ๋ฐฉ์งํฉ๋๋ค.
2) ๋คํธ์ํฌ ์์ฒญ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌ
๋ฐ์ดํฐ ๋ฐ์์ฌ ๋์ ๋ค๋ฅธ UI ์์ ์ ๊ณ์ ์งํ.
3) ์๋ ์ฒด๊ฐ ํฅ์
์ค์ ๋ก ๋ ๋นจ๋ผ์ง๋ ๊ฑด ์๋์ง๋ง,
์ฌ์ฉ์๋ “๋น ๋ฅด๋ค?” ํ๊ณ ๋๋๋๋ค.
4) ์๋ฒ์ ํด๋ผ์ด์ธํธ ๋ชจ๋ ๋ฆฌ์์ค ์ ์ฝ
๊ธฐ๋ค๋ฆฌ๋ ๋์ CPU๋ฅผ ๋๋ฆฌ์ง ์๊ณ ๋ค๋ฅธ ์์ ๊ฐ๋ฅ.
fetch๋ฅผ ์ฐ๋ ์ด์ — ๋ฑ ํต์ฌ๋ง, ์ด๋ณด์๋ ์ดํด๋๊ฒ!
fetch๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์๋ฒ์ ํต์ (๋ฐ์ดํฐ ์์ฒญ/์ ์ก) ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ธฐ๋ณธ ๋ด์ฅ ํจ์์
๋๋ค.
์ ์ด๋ ๊ฒ ๋ง์ด ์ฐ๋์ง ์ด์ ๋ง ๊น๋ํ๊ฒ ์ ๋ฆฌํด๋ณผ๊ฒ์.
๐ฆ ํ ์ค ์์ฝ
๋ธ๋ผ์ฐ์ ์์ ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ๋ ๊ฐ์ฅ ๊ฐ๋จํ๊ณ ํ์ค์ ์ธ ๋ฐฉ๋ฒ์ด๊ธฐ ๋๋ฌธ!
๐ฉ ์ fetch๋ฅผ ์จ์ผ ํ ๊น?
1) ํ์ค API์ด๊ธฐ ๋๋ฌธ (๊ณต์ ๊ธฐ๋ฅ)
fetch๋ ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ณธ ํ์ฌ๋ Web API์
๋๋ค.
๋ฐ๋ก ์ค์นํ ํ์๋ ์๊ณ , ํฅํ ์น ํ์ค์์ ๊พธ์คํ ์ง์๋ฉ๋๋ค.
์ฆ,
fetch๋ "์์ฆ ๋ฐฉ์์ ๊ณต์์ ์ธ ๋ฐ์ดํฐ ์์ฒญ ๋๊ตฌ"
2) ๋ฌธ๋ฒ์ด ๊ฐ๋จํ๊ณ ์ง๊ด์
axios ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ณด๋ค ๊ฐ๋ณ๊ณ , ๊ธฐ๋ณธ์ ์ธ ์์ฒญ์ ์๋์ฒ๋ผ ์์ฃผ ์ฌ์:
3) Promise ๊ธฐ๋ฐ → ๋น๋๊ธฐ ์์ ์ ์ต์
fetch๋ Promise ๊ธฐ๋ฐ์ด๋ผ async/await๊ณผ ์ฐฐ๋ก์ ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์ฝ๋๊ฐ ๋๊ธฐ์ฒ๋ผ ์ฝํ์ ์ด๋ณด์์๊ฒ๋ ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค.
4) ๋ธ๋ผ์ฐ์ ์ Node.js ๋ชจ๋์์ ์ฌ์ฉ ๊ฐ๋ฅ
Next.js๋ Node.js ํ๊ฒฝ์์๋ fetch๊ฐ ๊ธฐ๋ณธ ์ง์(๋ฒ์ 18+)๋์ด
์๋ฒ/ํด๋ผ์ด์ธํธ์์ ๋์ผํ ์ฝ๋๋ก ์์ฑํ ์ ์์ต๋๋ค.
ํ์คํ ๊ฐ๋ฐํ ๋ ์ฝ๋ ํต์ผ์ฑ์ด ์ข์์ง
5) CORS, ์ฟ ํค, ํค๋ ๋ฑ ๋ค์ํ ์ค์ ์ ์ ์ฐํ๊ฒ ์ ์ด
HTTP ์์ฒญ์ ๋ณต์กํ ์์๋ ๋ชจ๋ ์ปจํธ๋กค ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์
์ค๋ฌด์์๋ ๋ฌด๋ํ ์ฌ์ฉํฉ๋๋ค.
๐ง fetch๊ฐ axios๋ณด๋ค ๊ฐ๋ฒผ์ด ์ด์
- fetch๋ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ → ์ถ๊ฐ ์ค์น ์์
- axios๋ ๋ณ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ → ๋ ๋ง์ ๊ธฐ๋ฅ์ ์์ง๋ง ๋ฌด๊ฑฐ์
์์ฆ์ Next.js + fetch ์กฐํฉ์ด ๊ฐ์ฅ ๊ฐ๋ณ๊ณ ํ์ค์ ์ธ ๋ฐฉ์์ ๋๋ค.
๐ฏ ์์ ์ฌ์ด ๋น์
fetch = “์ธํฐ๋ท์์ ์๋ฃ ์์ฒญํ๋ ๊ธฐ๋ณธ ์ ํ๊ธฐ”
axios = “๊ธฐ๋ฅ์ด ๋ ๋ง์ ๊ณ ๊ธ ์ค๋งํธํฐ”
๊ธฐ๋ณธ ์ ํ๊ธฐ๋ก๋ ์ถฉ๋ถํ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ fetch๋ฅผ ๋ง์ด ์ฐ๋ ๊ฒ๋๋ค.
ํ๋ก ํธ์๋ → ์๋ฒ → ๊ทธ๋ค์์ ์ด๋๋ก ๊ฐ๋์ง ํ๋ฆ ์ ์ฒด๋ฅผ ํ๋์ ์ดํดํ๊ธฐ
์์ฃผ ์์ฐ์ค๋ฝ๊ฒ ์ง๋ฌธํ์
จ์ด์!
๋ง์ ๋ถ๋ค์ด “ํ๋ก ํธ์๋ → ์๋ฒ”๊น์ง ์๋๋ฐ,
๊ทธ ๋ค์์ ๋ฐ์ดํฐ๊ฐ ์ด๋ป๊ฒ ํ๋ฌ๊ฐ๋์ง ๊ถ๊ธํดํฉ๋๋ค.
์๋ ์ค๋ช ์ Next.js, React, Node.js ๋ชจ๋ ๊ณตํต์ ์ผ๋ก ์ ์ฉ๋๋ ์น์ ๊ธฐ๋ณธ ๋์ ํ๋ฆ์ ๋๋ค.
๐ฆ ์ ์ฒด ํ๋ฆ ํ ์ค ์์ฝ
ํ๋ก ํธ์๋ → ์๋ฒ(API) → ๋ฐ์ดํฐ๋ฒ ์ด์ค(DB) → ์๋ฒ → ํ๋ก ํธ์๋
์ฆ, ์์ฒญ์ ํ๋ก ํธ์์ ์์ํ๊ณ , ๋ฐ์ดํฐ๋ DB์์ ๋์ค๋ฉฐ, ํ๋ฉด์ ํ๋ก ํธ์์ ์์ฑ๋ฉ๋๋ค.
๐ฉ ์ ์ฒด ํ๋ฆ์ ๋จ๊ณ๋ณ๋ก ์์ฃผ ์ฝ๊ฒ ์ค๋ช
### 1) ํ๋ก ํธ์๋ → ์๋ฒ๋ก ์์ฒญ ๋ณด๋ด๊ธฐ
์น์ฌ์ดํธ์ ์ ์ํ๊ฑฐ๋ ๋ฒํผ์ ํด๋ฆญํ๋ ์๊ฐ:
- ํ๋ก ํธ์๋(๋ธ๋ผ์ฐ์ , React, Next.js)๊ฐ
- ์๋ฒ(API)์
- fetch ๋๋ axios๋ก ์์ฒญ(Request) ์ ๋ณด๋ ๋๋ค.
์: “๊ฒ์๊ธ ๋ชฉ๋ก ์ฃผ์ธ์!”
์: “๋ก๊ทธ์ธ ์ ๋ณด ํ์ธํด์ฃผ์ธ์!”
### 2) ์๋ฒ → ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์์ฒญ
์๋ฒ(Node.js, Express, Next.js API Route ๋ฑ)๋ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์์ต๋๋ค.
๊ทธ๋์ ์๋ฒ๋ ์์ฒญ์ ๋ฐ์์:
- ๋ฐ์ดํฐ๋ฒ ์ด์ค(DB)์๊ฒ
- “๊ฒ์๊ธ ๋ชฉ๋ก ์ข ์ค” ๋ผ๊ณ ๋ ์์ฒญํฉ๋๋ค.
์ฌ๊ธฐ์ DB ์ข ๋ฅ๋ ์ฌ๋ฌ ๊ฐ์ง์ ๋๋ค.
- MySQL
- PostgreSQL
- MongoDB
- Supabase
- Firebase ๋ฑ
### 3) ๋ฐ์ดํฐ๋ฒ ์ด์ค → ์๋ฒ์๊ฒ ๋ฐ์ดํฐ ์ ๋ฌ
DB๊ฐ ์๋ฒ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋๋ ค์ค๋๋ค.
์:
### 4) ์๋ฒ → ํ๋ก ํธ์๋๋ก ์ต์ข ์๋ต
์๋ฒ๋ DB์์ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ๊ฑฐ๋ ์ ๋ฆฌํด์
ํ๋ก ํธ์๋์ ์๋ต(Response) ์ผ๋ก ์ ๋ฌํฉ๋๋ค.
์:
### 5) ํ๋ก ํธ์๋์์ ํ๋ฉด ์ ๋ฐ์ดํธ
ํ๋ก ํธ์๋๋ ์๋ฒ ์๋ต์ ๋ฐ์์:
- React ์ํ(state)์ ๋ฃ๊ฑฐ๋
- Next.js ์๋ฒ ์ปดํฌ๋ํธ์์ ๋ ๋๋งํ๊ฑฐ๋
์ต์ข ์ ์ผ๋ก ์ฌ์ฉ์๊ฐ ๋ณด๊ฒ ๋ ํ๋ฉด(UI) ์ ๊ทธ๋ฆฝ๋๋ค.
๐ง ์ ์ฒด ํ๋ฆ์ ํ ๋ฒ์ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด…
๐จ ์์ฃผ ์ฌ์ด ๋น์ ๋ก ์๋ฒฝ ์ ๋ฆฌ
“๋ฐฐ๋ฌ ์ฑ”์ ๋น์ ํด๋ด ์๋ค.
- ํ๋ก ํธ์๋(๋ฐฐ๋ฌ ์ฑ ํ๋ฉด)
→ ์ฌ์ฉ์: “๋ก๋ณถ์ด ์ฃผ๋ฌธ!” - ์๋ฒ(API ์๋ฒ)
→ ์ฑ์ ๋๋: “๊ฐ๊ฒ์ ์ฃผ๋ฌธ ๋ณด๋ด์ผ์ง.” - ๋ฐ์ดํฐ๋ฒ ์ด์ค(DB)
→ ๊ฐ๊ฒ(๋ฐ์ดํฐ ์ ์ฅ ์ฅ์): “์ฌ๊ธฐ ๋ฉ๋ด ์ ๋ณด!” - ์๋ฒ(API)
→ ๊ฐ๊ฒ์์ ๋ฐ์ ์ ๋ณด ์ ๋ฆฌ ํ ์ฑ์๊ฒ ์ ๋ฌ - ํ๋ก ํธ์๋
→ ํ๋ฉด์ “๋ก๋ณถ์ด ์ฃผ๋ฌธ ์๋ฃ!” ํ์
๐ฏ ํต์ฌ ์ ๋ฆฌ
- ํ๋ก ํธ์๋๋ “์์ฒญ์ ์ถ๋ฐ์ ”
- ์๋ฒ๋ “์ค๊ฐ ๊ด๋ฆฌ์”
- DB๋ “๋ฐ์ดํฐ ์ ์ฅ์”
- ์ต์ข ํ๋ฉด์ ๋ค์ ํ๋ก ํธ์์ ์์ฑ๋จ
๋จ๋ฐฉํฅ ๊ตฌ์กฐ์ธ๊ฐ? ๊ทธ๋ฆฌ๊ณ JSON์ด ๋ญ๋? — ์ ํํ ๊ตฌ๋ถํด์ ์ฝ๊ฒ ์ค๋ช ํด๋๋ฆด๊ฒ์!
์ง๋ฌธ์ด ๋ ๊ฐ์ง์ธ๋ฐ์:
- ํ๋ก ํธ → ์๋ฒ → DB๋ก ํ๋ฅด๋ ๊ตฌ์กฐ๊ฐ ๋จ๋ฐฉํฅ์ด๋?
- JSON์ด ๋ญ๋?
๋ ๊ฐ๋ฅผ ๊ฐ๊ฐ ์ดํดํ๋ฉด ์น ํ๋ฆ์ด ํจ์ฌ ๋ช ํํด์ ธ์!
๐ฆ 1) ์ด๊ฒ ๋จ๋ฐฉํฅ ๊ตฌ์กฐ์ธ๊ฐ?
๊ฒฐ๋ก ๋ถํฐ ๋งํ๋ฉด:
์์ฒญ(Request)์ ๋จ๋ฐฉํฅ,
**์ ์ฒด ๊ตฌ์กฐ๋ ์๋ฐฉํฅ ํต์ (Request + Response)**์ ๋๋ค.
โ ์ ๋จ๋ฐฉํฅ์ด๋ผ๊ณ ํ ๊น?
ํ๋ก ํธ์๋ → ์๋ฒ → DB ๋ก “ํ๋ฆ์ด ์ญ ํ ๋ฐฉํฅ”์ด๊ธฐ ๋๋ฌธ์ด์์.
ํ์ง๋ง…
โ ์ ์ฒด์ ์ผ๋ก ๋ณด๋ฉด ์๋ฐฉํฅ์
- ํ๋ก ํธ์๋ → ์๋ฒ : ์์ฒญ(Request)
- ์๋ฒ → ํ๋ก ํธ์๋ : ์๋ต(Response)
์ด ๋ ๊ฐ์ง๊ฐ ํฉ์ณ์ ธ์ ์๋ฐฉํฅ ํต์ ์ด ๋ฉ๋๋ค.
์ฝ๊ฒ ๋น์ ํ๋ฉด
์๋์ด ์นดํ์ ์ฃผ๋ฌธํ๋ ๊ฑด ๋จ๋ฐฉํฅ
์นดํ๊ฐ ์๋ฃ๋ฅผ ๊ฑด๋ค์ฃผ๋ ๊ฑด ๋ฐ๋ ๋ฐฉํฅ
→ ๋ ํฉ์ณ์ ํ๋์ “๋ํ(์๋ฐฉํฅ)”๊ฐ ๋๋ ๊ฒ!
๐ฉ 2) JSON์ด ๋ญ์ผ? (์ด๋ณด์ ๋ฒ์ )
โ ํ ์ค ์ ์
JSON์ ์๋ฒ์ ํ๋ก ํธ์๋๊ฐ ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ์ฐ๋ ํ์ค ๋ฐ์ดํฐ ํ์.
์ฝ๊ธฐ ์ฝ๊ณ ๊ฐ๋ฒผ์์ ์น ๊ฐ๋ฐ์์ ๊ฑฐ์ 99% ์ฌ์ฉํฉ๋๋ค.
โ JSON์ ์ ์ฐ๋๊ฐ?
- ์ฌ๋์ด ์ฝ๊ธฐ ์ฝ๊ณ
- ์ปดํจํฐ๋ ์ฒ๋ฆฌํ๊ธฐ ์ฝ๊ณ
- ๋๋ถ๋ถ์ ์ธ์ด์์ ์ฝ๊ฒ ๋ณํ ๊ฐ๋ฅ
- ์น ๊ฐ๋ฐ์์ ์ฌ์ค์ ํ์ค
โ JSON์ ์ด๋ฐ ๋ชจ์ต์ด์์
ํ์์ด ์ฝ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์ ๋น์ทํ์ฃ ?
โ JSON์ผ๋ก ์ค๋ ์ด์
์๋ฒ์ ํ๋ก ํธ์๋๋ ์๋ก ๋ค๋ฅธ ํ๊ฒฝ์์ ๋์ํ๊ธฐ ๋๋ฌธ์
๊ณตํต ์ธ์ด๊ฐ ํ์ํฉ๋๋ค.
๊ทธ๊ฒ ๋ฐ๋ก JSON์ ๋๋ค.
- ํ๋ก ํธ์๋: ์๋ฐ์คํฌ๋ฆฝํธ
- ์๋ฒ: Node.js, Python, Java ๋ฑ
- DB: SQL๋ฌธ ๋๋ ์์ฒด ํ์
๊ฐ ๊ธฐ์ ์ด ๋ค ๋ฌ๋ผ๋
JSON์ ๊ฑฐ์ ๋ชจ๋ ์ธ์ด๋ค์ด ์ดํดํ ์ ์์ → ๊ทธ๋์ ํ์ค!
๐ง ์ด๊ฒ๊น์ง ์ดํดํ๋ฉด ์๋ฒฝ
โ ์์ฒญ/์๋ต ๋ฐ์ดํฐ ํ๋ฆ์ JSON์ผ๋ก ์ฃผ๊ณ ๋ฐ์
ํ๋ก ํธ์๋:
์๋ฒ:
๋ ๋ค JSON์ด๋ผ๋ ๊ณตํต ํ์์ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ!
๐ฏ ํต์ฌ ์ ๋ฆฌ
- ๋จ๋ฐฉํฅ?
์์ฒญ ์์ฒด๋ ํ ๋ฐฉํฅ์ด์ง๋ง, ์ ์ฒด์ ์ผ๋ก๋ ์์ฒญ + ์๋ต์ ์๋ฐฉํฅ ํต์ ๊ตฌ์กฐ. - JSON?
ํ๋ก ํธ์ ์๋ฒ๊ฐ ์๋ก ์คํด ์์ด ๋ํํ๊ธฐ ์ํ ๊ฐ๋ณ๊ณ ํ์ค์ ์ธ ๋ฐ์ดํฐ ํ์.
Gateway์ Flux — ๋์ ๊ด๊ณ๋ฅผ ์ ํํ ๊ตฌ๋ถํด์ฃผ๋ ์ฌ์ด ์ค๋ช
๋จผ์ ๊ฒฐ๋ก ๋ถํฐ ๋งํ๋ฉด:
Gateway(๊ฒ์ดํธ์จ์ด) ์ Flux(ํ๋ญ์ค) ๋
์๋ก ์ง์ ์ ์ธ ์ฐ๊ด์ด ์๊ณ , ์์ ํ ๋ค๋ฅธ ๋ถ์ผ์ ๊ฐ๋ ์ ๋๋ค.๋ค๋ง “๋ฐ์ดํฐ๊ฐ ํ๋ฌ๊ฐ๋ ๊ตฌ์กฐ” ๋ผ๋ ํฐ ๊ด์ ์์ ๋ณด๋ฉด
๋ ๋ค ํ๋ฆ์ ๊ด๋ฆฌํ๋ค๋ ๊ณตํต์ ์ ๋๊ฐ ์์ด์.
์๋์์ ์ ํํ ๊ตฌ๋ถํด๋๋ฆด๊ฒ์.
๐ฆ 1) Gateway๋ ๋ฌด์์ธ๊ฐ?
โ ํ ์ค ์ ์
์๋ฒ ๋๋ ๋คํธ์ํฌ์์ “์ ๊ตฌ ์ญํ ”์ ํ๋ ๊ด๋ฌธ.
์์
- API Gateway: ์ฌ๋ฌ ๋ฐฑ์๋ ์๋น์ค๋ก ๋ค์ด์ค๋ ์์ฒญ์ ํ๋์ ์ ๊ตฌ๋ก ๊ด๋ฆฌ
- Network Gateway: ๋ด๋ถ ๋คํธ์ํฌ์ ์ธ๋ถ ์ธํฐ๋ท์ ์ฐ๊ฒฐ
ํ๋ ์ผ
- ์์ฒญ์ ์ ์ ํ ์๋ฒ๋ก ์ ๋ฌ
- ์ธ์ฆ/๋ณด์ ์ฒ๋ฆฌ
- ๋ก๋๋ฐธ๋ฐ์ฑ
- ํธ๋ํฝ ๊ด๋ฆฌ
์ฆ, ์๋ฒ ์ธํ๋ผ ์ชฝ ๊ฐ๋ ์ ๋๋ค.
๐ฉ 2) Flux๋ ๋ฌด์์ธ๊ฐ?
โ ํ ์ค ์ ์
ํ๋ก ํธ์๋(JavaScript)์์ ๋ฐ์ดํฐ ํ๋ฆ์ “๋จ๋ฐฉํฅ”์ผ๋ก ๊ด๋ฆฌํ๋ ๊ตฌ์กฐ ํจํด.
React ๊ฐ๋ฐ์๋ค์ด ์ ์๋ Redux, Recoil ๊ฐ์ ์ํ๊ด๋ฆฌ์ ๋ฟ๋ฆฌ๊ฐ Flux ๊ตฌ์กฐ์ ๋๋ค.
ํน์ง
- ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ
- Store → View → Action → Dispatcher ์ํ ๊ตฌ์กฐ
- ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ํ๋ฅผ ์์ ์ ์ผ๋ก ๊ด๋ฆฌ
์ฆ, UI ์ํ๊ด๋ฆฌ์ ํ๋ก ํธ์๋ ์ํคํ ์ฒ ํจํด์ ๋๋ค.
๐ง 3) Gateway์ Flux์ ๊ด๊ณ๋?
๊ฒฐ๋ก : ์ง์ ์ ์ธ ๊ธฐ์ ์ ์ฐ๊ด์ ์์.
ํ์ง๋ง “ํ๋ฆ(flow)”์ด๋ผ๋ ํค์๋๋ก ์ฐ๊ฒฐ ์ง์ด๋ณผ ์ ์์ด์.
| ์๋ฒ/๋คํธ์ํฌ | Gateway | ์ธ๋ถ ์์ฒญ์ ํ๋ฆ์ ๊ด๋ฆฌ |
| ํ๋ก ํธ์๋(UI) | Flux | ํ๋ฉด ์ํ์ ํ๋ฆ์ ๊ด๋ฆฌ |
๊ณตํต์
- ๋ ๋ค “๋ฐ์ดํฐ์ ํ๋ฆ”์ ํต์ ํ๋ ๊ธฐ์
- ๋ณต์กํ ์์คํ ์ ์์ ์ ์ผ๋ก ์ด์ํ๊ฒ ํด์ค
์ฐจ์ด์
- Gateway = ๋คํธ์ํฌ·์๋ฒ ์ชฝ
- Flux = ํ๋ก ํธ์๋ ์ฑ ๋ด๋ถ ์ํ๊ด๋ฆฌ
์ฆ, ์๋ก ์ ํ ๋ค๋ฅธ ๋ ๋ฒจ์ ๊ธฐ์ ์์ญ์ ๋๋ค.
๐จ ์ง์ง ์ฝ๊ฒ ๋น์ ํ๋ฉด
โ Gateway = ๋น๋ฉ ์ ๊ตฌ ๋ก๋น
→ ์ฌ๋(์์ฒญ)์ ์๋ง์ ์ธต(์๋ฒ)์ผ๋ก ์๋ด
โ Flux = ๊ฐ ์ฌ๋ฌด์ค ๋ด๋ถ ๋์
→ ์ฌ๋ฌด์ค ์์์ ์ ๋ฌด ํ๋ฆ(์ํ)์ ์์ ์ ์ผ๋ก ๋ฐ๋ณต
๋ ๊ฑด๋ฌผ ์์คํ
์ด ๊ฐ์ ์ข
๋ฅ๊ฐ ์๋ ๊ฒ์ฒ๋ผ
Gateway์ Flux๋ “์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋ ๊ธฐ์ ”์ ์๋์ง๋ง
“ํ๋ฆ์ ๊ด๋ฆฌํ๋ค”๋ ๋น์ทํ ์ถ์์ ์ธ ์ญํ ์ ๊ฐ์ง๊ณ ์์ด์.
๐ฏ ํต์ฌ ์์ฝ
- Gateway: ์๋ฒ/๋คํธ์ํฌ์ ์ ๊ตฌ, ์์ฒญ ๋ผ์ฐํ ๋ด๋น
- Flux: ํ๋ก ํธ์๋ UI ์ํ์ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ ํจํด
- ์ง์ ์ ์ธ ์ฐ๊ด ์์, ๋จ์ง “ํ๋ฆ ๊ด๋ฆฌ”๋ผ๋ ํฐ ๊ณตํต์ ์ ๋๋ง ์์
๋ฆฌ๋์ค(Redux)๊ฐ ๋ญ๋? — React ์ด๋ณด์๋ ๋ฐ๋ก ์ดํด๋๋ ์ค๋ช
Redux๋ ํ๋ก ํธ์๋, ํนํ React์์ ๋ง์ด ์ฐ๋ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค.
์ง๊ธ๋ถํฐ “์ด๊ฒ ๋๋์ฒด ์ ํ์ํ์ง, ๋ญ๊ฐ ๋๋จํ์ง”๋ฅผ ํ๊ตญ ๊ฐ๋ฐ์ ๊ธฐ์ค์ผ๋ก ์์ฃผ ์ฝ๊ฒ ์ ๋ฆฌํด๋๋ฆด๊ฒ์.
๐ฅ ํ ์ค ์์ฝ
๋ฆฌ๋์ค๋ ์ฑ ์ ์ฒด ์ํ๋ฅผ ํ ๊ณณ์์ ๊ด๋ฆฌํ๋ “์ค์ ์ํ ์ ์ฅ์(Store)”์ด๋ค.
React ์ฑ์ด ์ปค์ง์๋ก ์ํ๊ฐ ์ฌ๊ธฐ์ ๊ธฐ ํฉ์ด์ง๋๋ฐ,
๊ทธ๊ฑธ ํ ๊ณณ์ ๋ชจ์ ์ ๋ฆฌํด์ฃผ๋ ๋๊ตฌ๊ฐ Redux์
๋๋ค.
๐ฆ ์ ๋ฆฌ๋์ค๊ฐ ํ์ํ ๊น?
React๋ง ์ฌ์ฉํ ๋ ์ด๋ณด์๋ค์ด ํํ ๊ฒช๋ ๋ฌธ์ :
โ 1) ์ปดํฌ๋ํธ๊ฐ ๋ง์์๋ก ๋ฐ์ดํฐ ํ๋ฆ์ด ๋ณต์กํด์ง
๋ถ๋ชจ → ์์ → ์์ ์ปดํฌ๋ํธ๋ก props๋ฅผ ๊ณ์ ์ ๋ฌํด์ผ ํจ.
“ํ๋กญ ๋๋ฆด๋ง(props drilling)” ๋ฌธ์ ๋ฐ์.
โ 2) ์ฌ๋ฌ ์ปดํฌ๋ํธ๊ฐ ๊ฐ์ ์ํ๋ฅผ ์ฐ๋ฉด ์ฑํฌ ๋ง์ถ๊ธฐ ์ด๋ ค์
์: ๋ก๊ทธ์ธ ์ ๋ณด, ์ฌ์ฉ์ ์ค์ , ์ฅ๋ฐ๊ตฌ๋ ์ํ ๋ฑ
โ 3) ์ํ ๋ณํ๋ฅผ ์ถ์ ํ๊ธฐ ์ด๋ ค์
์ด๋์ ๋ฐ๋์๋์ง ๋ชจ๋ฅด๋ฉด ๋๋ฒ๊น ๋ ์ง์ฅ…
๐ ์ด๋ฐ ์ํฉ์์ ์ ์ฒด ์ํ๋ฅผ ํ ๊ณณ์์ ๊ด๋ฆฌํ๋ฉด? → ํด๊ฒฐ!
๐ฉ ๊ทธ๋์ ๋ฑ์ฅํ ๊ฒ์ด Redux
Redux์ ํต์ฌ ๊ตฌ์ฑ์ 3๊ฐ์ ๋๋ค.
1) Store (์ ์ฅ์)
- ์ฑ ์ ์ฒด ์ํ๋ฅผ ์ ์ฅํ๋ ํ๋์ ์ค์ ์ฐฝ๊ณ
- ์ ์ญ ์ํ๋ฅผ ์ฝ๊ฒ ๊ณต์ ํ ์ ์๊ฒ ํจ
2) Action (์์ฒญ)
- “์ํ๋ฅผ ์ด๋ ๊ฒ ๋ฐ๊ฟ์ค!”๋ผ๋ ๋ฉ์์ง
3) Reducer (์ํ ๋ณ๊ฒฝ ๋ก์ง)
- Action์ ๊ธฐ๋ฐ์ผ๋ก ์ํ๋ฅผ ์ค์ ๋ก ๋ณ๊ฒฝํ๋ ํจ์
- ์ํ๋ฅผ ์ง์ ์์ ํ์ง ์๊ณ , ์๋ก์ด ์ํ๋ฅผ ๋ฐํ
๐ง Redux ๋ฐ์ดํฐ ํ๋ฆ (๋จ๋ฐฉํฅ!)
Redux๋ Flux ํจํด์ ๊ธฐ๋ฐ์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ ๋จ๋ฐฉํฅ ํ๋ฆ์ ๋๋ค.
์ด ๊ตฌ์กฐ ๋๋ถ์ ๋ฐ์ดํฐ ํ๋ฆ์ด ๋งค์ฐ ๋ช
ํํด์ง๊ณ
๊ท๋ชจ๊ฐ ํฐ ์ฑ์์๋ ์์ ์ ์ผ๋ก ๋์ํฉ๋๋ค.
๐จ ์์ฃผ ์ฌ์ด ๋น์ ๋ก ์ ๋ฆฌํ๋ฉด
โ Store = ์ค์ ํ์์ค(๋ชจ๋ ์ ๋ณด ๋ณด๊ด)
โ Action = ํ์ ์์ฒญ์(๋ณ๊ฒฝ ์์ฒญ)
โ Reducer = ๊ฒฐ์ฌ ํ๋ก์ธ์ค(์ด๋ป๊ฒ ๋ฐ๊ฟ์ง ๊ฒฐ์ )
โ UI = ์ต์ข ๊ฒฐ๊ณผ(ํ๋ฉด ๋ฐ์)
ํ์ฌ์ฒ๋ผ ๊น๋ํ ํ๋ก์ธ์ค๋ก ์ํ๋ฅผ ๋ณ๊ฒฝํ๋๊น
๋๊ฐ, ์ธ์ , ์ ์ํ๋ฅผ ๋ฐ๊ฟจ๋์ง ๋ช
ํํด์ง๋๋ค.
๐ฉ ์์ฆ์ Redux ๊ผญ ์จ์ผ ํ ๊น?
์ฌ์ค ์์ฆ React์์๋ ์ ํ์ง๊ฐ ๋ง์์:
- Redux Toolkit(RTK) → Redux์ ๊ณต์ ์ต์ ๋ฒ์ (ํจ์ฌ ๋จ์ํจ)
- Recoil
- Zustand
- Context API
ํ์ง๋ง ๋๊ท๋ชจ ์ฑ์์๋ ์ฌ์ ํ Redux๊ฐ ์์ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ ๋ฉด์์ ๊ฐ๋ ฅํฉ๋๋ค.
'Project ESG+AI > Tech Basics' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 36์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.11.27 |
|---|---|
| 35์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.11.26 |
| 33์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (1) | 2025.11.24 |
| 32์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (1) | 2025.11.21 |
| 31์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (1) | 2025.11.20 |