
๋ฌด์ํ ํ๋ก๊ทธ๋๋ฐ
โ ๋ฌด์ํ ํ๋ก๊ทธ๋๋ฐ(Stateless Programming)์ด๋?
๋ฌด์ํ ํ๋ก๊ทธ๋๋ฐ์ด๋,
๐ ํ๋ก๊ทธ๋จ(๋๋ ํจ์, ์๋ฒ)์ด ์ด์ ์์
์ ์ํ(state)๋ฅผ ๊ธฐ์ตํ์ง ์๊ณ ,
๐ ๋งค ์์ฒญ๋ง๋ค ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ํจ๊ป ๋ฐ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ๋งํฉ๋๋ค.
์ฝ๊ฒ ๋งํด **“๊ณผ๊ฑฐ๋ ์๊ณ , ์ง๊ธ ๋ค์ด์จ ๊ฒ๋ง ๋ณด๊ณ ์ผํ๋ ๋ฐฉ์”**์ ๋๋ค.
๐ ํต์ฌ ์์ฝ
- ์ํ(State): ์ด์ ์คํ์์ ์ ์ฅํด ๋ ๋ฐ์ดํฐ
- ๋ฌด์ํ(Stateless): ์ด์ ์ํ๋ฅผ ์ ํ ์ ์ฅํ์ง ์์
- ๊ฒฐ๊ณผ๋ ํญ์ ์ ๋ ฅ๊ฐ์๋ง ์์กด
๊ฐ์ ์ ๋ ฅ → ํญ์ ๊ฐ์ ์ถ๋ ฅ
(๋ง์น ์ํ ํจ์์ฒ๋ผ ๋์)
๐ง ์ผ์์ ์ธ ๋น์ ๋ก ์ดํดํ๊ธฐ
๐ ๋ฌด์ํ ํ๋ก๊ทธ๋๋ฐ
ํธ์์ ์๋ฐ์์ด ๋งค ์๋๋ง๋ค ์ด๋ ๊ฒ ์ผํ๋ ๊ฒฝ์ฐ์ ๋๋ค.
“์ ๋ ์ด์ ์๋์ด ๋ญ ์๋์ง ๋ชฐ๋ผ์.
์๋์ด ๊ณ ๋ฅธ ๋ฌผ๊ฑด๋ง ๊ณ์ฐํฉ๋๋ค.”
→ ๋งค ์์ฒญ์ด ๋ ๋ฆฝ์
๐ ์ํ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ
๋จ๊ณจ ์๋์ ๊ธฐ์ตํ๋ ๋๋ค ๊ฐ๊ฒ ์ฌ์ฅ๋
“์, ์ง๋๋ฒ์ ์ปคํผ ๋ง์ จ์ฃ ? ์ค๋๋ ๊ทธ๊ฑธ๋ก ๋๋ฆด๊ฒ์.”
→ ์ด์ ์ํ๋ฅผ ๊ธฐ์ต
๐งฉ ๋ฌด์ํ ํ๋ก๊ทธ๋๋ฐ์ ํน์ง
โ ์ฅ์
- ํ์ฅ์ฑ ๋ฐ์ด๋จ
→ ์๋ฒ๋ฅผ ์ฌ๋ฌ ๋๋ก ๋๋ฆฌ๊ธฐ ์ฌ์ (ํด๋ผ์ฐ๋, MSA์ ์ต์ ) - ๋ฒ๊ทธ ์ถ์ ์ด ์ฌ์
→ ์ํ ๊ผฌ์ ๋ฌธ์ ์์ - ํ
์คํธ๊ฐ ๊ฐ๋จํจ
→ ์ ๋ ฅ๋ง ์ฃผ๋ฉด ๊ฒฐ๊ณผ ์์ธก ๊ฐ๋ฅ
โ ๋จ์
- ๋งค ์์ฒญ๋ง๋ค ๋ชจ๋ ์ ๋ณด ์ ๋ฌ ํ์
- ๋ก๊ทธ์ธ ์ ๋ณด, ์ฌ์ฉ์ ์ํ ๋ฑ์ ๋ณ๋ ์ ์ฅ์(DB, ํ ํฐ) ํ์
๐ป ์ฝ๋ ์์๋ก ๋น๊ต
โ ์ํ ์์ (Stateful)
- total์ด๋ผ๋ ์ํ๋ฅผ ๊ธฐ์ต
- ์คํ ์์์ ๋ฐ๋ผ ๊ฒฐ๊ณผ ๋ฌ๋ผ์ง
โ ๋ฌด์ํ (Stateless)
- ์ด์ ์ํ๋ฅผ ์ธ๋ถ์์ ์ ๋ฌ
- ํจ์ ์์ฒด๋ ๊ธฐ์ตํ๋ ๊ฒ์ด ์์
๐ ์น/์๋ฒ์์์ ๋ฌด์ํ ๊ฐ๋
HTTP๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌด์ํ
- ์๋ฒ๋ “์ด ์ฌ์ฉ์๊ฐ ๋๊ตฌ์ธ์ง” ๊ธฐ์ตํ์ง ์์
- ๊ทธ๋์ ๋ฑ์ฅํ ๊ฒ์ด:
- ์ฟ ํค(Cookie)
- ์ธ์ (Session)
- JWT ํ ํฐ
๐ ์ํ๋ ์๋ฒ๊ฐ ์๋ ์ธ๋ถ(DB, ํ ํฐ) ์ ๋
๐ ์ด๋์ ๋ง์ด ์ฐ์ผ๊น?
- REST API
- ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ(MSA)
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- ์๋ฒ๋ฆฌ์ค(Serverless, ์: AWS Lambda)
๐ฏ ํ ์ค ์ ๋ฆฌ
๋ฌด์ํ ํ๋ก๊ทธ๋๋ฐ = ๊ณผ๊ฑฐ๋ฅผ ๊ธฐ์ตํ์ง ์๋ ์ค๊ณ
→ ๋จ์ํ์ง๋ง, ๋๊ท๋ชจ ์์คํ ์์ ๊ฐ๋ ฅํฉ๋๋ค.
๋ฌด์ํ ํ๋ก๊ทธ๋๋ฐ(Stateless Programming)์ด๋?
๋ฌด์ํ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋จ์ด๋ ํจ์๊ฐ ๋ด๋ถ ์ํ(internal state)๋ฅผ ์ ์งํ์ง ์๊ณ , ์ ๋ ฅ๊ฐ์๋ง ์์กดํ์ฌ ์ถ๋ ฅ์ ์์ฑํ๋ ํ๋ก๊ทธ๋๋ฐ ์คํ์ผ์ ์๋ฏธํฉ๋๋ค. ์ด๋ ์ฃผ๋ก ํจ์ํ ํ๋ก๊ทธ๋๋ฐ(functional programming) ํจ๋ฌ๋ค์์์ ๊ฐ์กฐ๋๋ ๊ฐ๋ ์ผ๋ก, ๊ฐ์ฒด์ ์ํ ๋ณ๊ฒฝ(๊ฐ๋ณ ์ํ, mutable state)์ ์ต์ํํ๊ฑฐ๋ ํผํฉ๋๋ค.
์ฃผ์ ํน์ง
- ์์ ํจ์(pure function) ์ค์ฌ: ๊ฐ์ ์ ๋ ฅ์ ๋ํด ํญ์ ๊ฐ์ ์ถ๋ ฅ์ ๋ฐํํ๋ฉฐ, ๋ถ์ ํจ๊ณผ(side effect)๊ฐ ์์ (์: ์ ์ญ ๋ณ์ ๋ณ๊ฒฝ, I/O ๆไฝ ๋ฑ).
- ์ํ๋ฅผ ์ ์งํ์ง ์์ผ๋ฏ๋ก, ํจ์ ํธ์ถ ์์์ ๋ฌด๊ดํ๊ฒ ์์ธก ๊ฐ๋ฅํ๊ณ ์ฌ์ฌ์ฉ์ฑ์ด ๋์.
- ์ํ๊ฐ ํ์ํ ๋๋ ํจ์์ ๋งค๊ฐ๋ณ์๋ก ๋ช ์์ ์ผ๋ก ์ ๋ฌํ๊ฑฐ๋, ๋ถ๋ณ ๋ฐ์ดํฐ(immutable data)๋ฅผ ์ฌ์ฉ.
์ฅ์
- ๋ฒ๊ทธ ๊ฐ์: ์ํ ๋ณ๊ฒฝ์ผ๋ก ์ธํ ์๊ธฐ์น ์์ ์ํธ์์ฉ(์: ๋ฉํฐ์ค๋ ๋ฉ์์์ race condition)์ด ์ฌ๋ผ์ง.
- ๋ณ๋ ฌ/๋์์ฑ ์ฒ๋ฆฌ ์ฉ์ด: ์ํ๊ฐ ์์ผ๋ฏ๋ก ์ฌ๋ฌ ์ค๋ ๋์์ ์์ ํ๊ฒ ์คํ ๊ฐ๋ฅ.
- ํ ์คํธ์ ์ ์ง๋ณด์ ์ฉ์ด: ์ ๋ ฅ-์ถ๋ ฅ๋ง ๊ฒ์ฆํ๋ฉด ๋๋ฏ๋ก ์ฝ๋๊ฐ ์์ธก ๊ฐ๋ฅ.
- ์ฌ์ฌ์ฉ์ฑ ๋์: ํจ์๋ฅผ ์กฐํฉ(composition)ํ๊ธฐ ์ฌ์.
๋จ์
- ์ํ๋ฅผ ๋งค๋ฒ ์ ๋ฌํด์ผ ํ๋ฏ๋ก ์ฝ๋๊ฐ ๊ธธ์ด์ง ์ ์์ (์: ์ฌ๊ท ํธ์ถ ์ ์ํ๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋๊น).
- ์ฑ๋ฅ ์ค๋ฒํค๋: ๋ถ๋ณ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์ฆ๊ฐ ๊ฐ๋ฅ.
์์ (Python์ผ๋ก ๊ฐ๋จํ ๋น๊ต)
์ํ ์ ์ง(stateful) ๋ฐฉ์ (๊ฐ์ฒด ์งํฅ์ ):
class Counter:
def __init__(self):
self.count = 0 # ๋ด๋ถ ์ํ ์ ์ง
def increment(self):
self.count += 1
return self.count
counter = Counter()
print(counter.increment()) # 1
print(counter.increment()) # 2 (์ด์ ์ํ ์์กด)
๋ฌด์ํ(stateless) ๋ฐฉ์ (ํจ์ํ):
def increment(count):
return count + 1 # ์ํ ์์, ์
๋ ฅ๋ง์ผ๋ก ์ถ๋ ฅ
count = 0
count = increment(count) # 1
count = increment(count) # 2 (์ํ๋ฅผ ๋ช
์์ ์ผ๋ก ์ ๋ฌ)
ํ๊ตญ์ด ์๋ฃ์์ ์ธ๊ธ๋๋ "๋ฌด์ํ ํ๋ก๊ทธ๋๋ฐ"
ํ๊ตญ ๊ฐ๋ฐ ์ปค๋ฎค๋ํฐ(์: Effective Programming ๋ธ๋ก๊ทธ ์๋ฆฌ์ฆ)์์๋ ๋ฌด์ํ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ์ฒด์ ์ํ ์ฒดํฌ(if ๋ฌธ ๋ฑ)๋ฅผ ์ต์ํํ๊ณ , ์ํ๋ฅผ ๊ฐ์ฒดํ(state pattern)ํ์ฌ ์กฐ๊ฑด๋ฌธ์ ํ ๊ณณ์ ๋ชจ์ผ๋ ์ค์ฒ ์์น์ผ๋ก ์ค๋ช ํฉ๋๋ค.
- ์ํ์ ๋ฐ๋ฅธ ๋ถ๊ธฐ(if/else)๋ฅผ ํผํ๊ณ , ์ํ๋ฅผ ๋ณ๋ ๊ฐ์ฒด๋ก ๋ง๋ค์ด ๋คํ์ฑ(polymorphism)์ ํ์ฉ.
- ๊ฒฐ๊ณผ: ์ฝ๋๊ฐ ๋ ์ ์ฐํ๊ณ , ์ํ ๊ด๋ จ ๋ฒ๊ทธ๊ฐ ์ค์ด๋ฆ.
๊ด๋ จ ๊ฐ๋ ๊ณผ์ ๊ตฌ๋ถ
- ๋ฌด์ํ ํ๋กํ ์ฝ(Stateless Protocol): HTTP์ฒ๋ผ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ ์ํ๋ฅผ ๊ธฐ์ตํ์ง ์์ (์น ์ํคํ ์ฒ์์ ํํจ).
- ๋ฌด์ํ ์ํคํ ์ฒ: ์๋ฒ๊ฐ ์ธ์ ์ ๋ณด๋ฅผ ์ ์ฅํ์ง ์๊ณ , ๋ชจ๋ ์์ฒญ์ ๋ ๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌ (์ค์ผ์ผ ์์ ์ฉ์ด).
โ Next.js · React · Redux ์ฐจ์ด์ ํ๋์ ์ ๋ฆฌ
์ด ์ธ ๊ฐ์ง๋ ๊ฐ์ ๋ ๋ฒจ์ ๊ธฐ์ ์ด ์๋๋๋ค.
์ญํ ์ด ์๋ก ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ “๋น๊ต”๋ณด๋ค๋ ์ด๋์ ์ฐ๋์ง๋ฅผ ์ดํดํ์๋ ๊ฒ ํต์ฌ์
๋๋ค.
๋จผ์ ํ ์ค ์์ฝ๋ถํฐ ๋๋ฆฌ๊ฒ ์ต๋๋ค ๐
React๋ UI,
Next.js๋ React ๊ธฐ๋ฐ์ ์น ํ๋ ์์ํฌ,
Redux๋ ์ํ ๊ด๋ฆฌ ๋๊ตฌ์ ๋๋ค.
๐ ํต์ฌ ์์ฝ ํ
| ์ ์ฒด | UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ | ์น ํ๋ ์์ํฌ | ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
| ์ญํ | ํ๋ฉด ๊ตฌ์ฑ | ์น ์ฑ ์ ์ฒด ๊ตฌ์กฐ | ์ ์ญ ์ํ ๊ด๋ฆฌ |
| ์๋ฒ ๊ธฐ๋ฅ | โ ์์ | โ ์์ (SSR ๋ฑ) | โ ์์ |
| ๋ผ์ฐํ | โ ์ง์ ๊ตฌํ | โ ์๋ ์ ๊ณต | โ ์์ |
| ์ํ ๊ด๋ฆฌ | โ ๊ธฐ๋ณธ๋ง ์ ๊ณต | โ ์์ | โ ์ ๋ฌธ์ ์ผ๋ก ๊ด๋ฆฌ |
| ๊ด๊ณ | ๊ธฐ๋ฐ | React ์์์ ๋์ | React์ ํจ๊ป ์ฌ์ฉ |
๐งฉ React๋?
๐ ์ ์
React๋
๐ ๋ฒํผ, ๋ฆฌ์คํธ, ํผ ๊ฐ์ UI๋ฅผ ์ปดํฌ๋ํธ ๋จ์๋ก ๋ง๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค.
๐ ํน์ง
- ํ๋ฉด์ ์ปดํฌ๋ํธ(Component) ๋ก ๋ถ๋ฆฌ
- ์ํ ๋ณํ์ ๋ฐ๋ผ ์๋ ๋ ๋๋ง
- SPA(Single Page Application)์ ํต์ฌ
๐ ์์ ๋น์
๋ ๊ณ ๋ธ๋ก ํ๋ํ๋ ๋ง๋๋ ๊ธฐ์
๐งฉ Next.js๋?
๐ ์ ์
Next.js๋
๐ **React๋ก ์น ์๋น์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํ ‘ํ์ธํธ ํ๋ ์์ํฌ’**์
๋๋ค.
๐ React์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณต
- ํ์ผ ๊ธฐ๋ฐ ๋ผ์ฐํ
- ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR)
- ์ ์ ์ฌ์ดํธ ์์ฑ(SSG)
- API ์๋ฒ ๊ธฐ๋ฅ
- SEO ์ต์ ํ
๐ ์์ ๋น์
๋ ๊ณ ๋ก ์ง ์ ์ฒด๋ฅผ ์ค๊ณํ๊ณ ์ง๋ ์ค๋ช ์ + ๊ณต๊ตฌ ์ธํธ
๐ ์ค์
Next.js ์์๋ React๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
(Next.js = React + α)
๐งฉ Redux๋?
๐ ์ ์
Redux๋
๐ ์ฑ ์ ์ฒด์์ ๊ณต์ ํ๋ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ๋๊ตฌ์
๋๋ค.
๐ ์ ํ์ํ๊ฐ?
React๋ง ์ฐ๋ฉด ์ํ๊ฐ:
- ๋ถ๋ชจ → ์์ → ์์ → ์ฆ์์…
- props ์ง์ฅ ๋ฐ์ ๐ต
Redux๋:
- ์ํ๋ฅผ ์ค์ ์ ์ฅ์(Store) ์์ ๊ด๋ฆฌ
- ์ด๋ ์ปดํฌ๋ํธ๋ ๋ฐ๋ก ์ ๊ทผ ๊ฐ๋ฅ
๐ ์์ ๋น์
์ํํธ ๊ด๋ฆฌ์ฌ๋ฌด์
(๊ฐ ์ง์ด ์ง์ ๊ด๋ฆฌ ์ ํ๊ณ ์ค์์์ ๊ด๋ฆฌ)
๐ง ํจ๊ป ์ฐ๋ฉด ์ด๋ ๊ฒ ๋ฉ๋๋ค
โ ์ค์ ํ์ ์์ ๊ฐ์ฅ ํํ ์กฐํฉ
- Next.js + React + (Redux ๋๋ ๋ค๋ฅธ ์ํ ๊ด๋ฆฌ ๋๊ตฌ)
โ ์์ฃผ ๋์ค๋ ์คํด
โ React vs Next.js (๊ฒฝ์ ๊ด๊ณ?)
→ โ ์๋
→ Next.js๋ React๋ฅผ ๋ ์ ์ฐ๊ธฐ ์ํ ๋๊ตฌ
โ Redux๋ ํ์?
→ โ ์๋
→ ์์ฆ์:
- React Context
- Zustand
- Recoil
๋ฑ์ผ๋ก ๋์ฒดํ๊ธฐ๋ ๋ง์
๐ฏ ์ธ์ ๋ฌด์์ ์ฐ๋ฉด ์ข์๊น?
- ๊ฐ๋จํ ํ๋ฉด → React
- ์ค์ ์๋น์ค/SEO/์๋ฒ ํ์ → Next.js
- ์ ์ญ ์ํ ๋ณต์กํจ → Redux (๋๋ ๋์ฒด ๋๊ตฌ)
โ ํ ๋ฌธ์ฅ ์์ฝ
React๋ ํ๋ฉด,
Next.js๋ ์น ์๋น์ค ๊ตฌ์กฐ,
Redux๋ ์ํ ๊ด๋ฆฌ ์ ๋ฌธ๊ฐ์ ๋๋ค.
'Project ESG+AI > Tech Basics' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 60์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (1) | 2026.01.08 |
|---|---|
| 59์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2026.01.07 |
| 51์ผ์ฐจ. ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.12.24 |
| 47์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.12.17 |
| 46์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.12.16 |