Architecture
Software Architecture
System Design
ποΈ[Architecture] Stateless λ°©μ vs Stateful λ°©μ.
-
Stateless(무μν)μ Stateful(μν μ μ§) λ°©μ
- βοΈ μμ€ν
μ΄λ μ ν리μΌμ΄μ
μ΄ μ¬μ©μ μνλ₯Ό μ΄λ»κ² κ΄λ¦¬νλμ§μ λν μ€κ³ ν¨ν΄.
- βοΈ μ£Όλ‘ μΈμ¦(Authentication)κ³Ό μΈμ
κ΄λ¦¬(Session Management)μμ μ€μν κ°λ
1οΈβ£ Stateless(무μν) λ°©μ.
π μ μ.
- μλ²κ° ν΄λΌμ΄μΈνΈμ μνλ₯Ό μ μ₯νμ§ μλ λ°©μ
- κ° μμ²(Request)λ λ
립μ , μ΄μ μμ²(Request)μ μνλ μ 보λ₯Ό κΈ°μ΅νμ§ μμ.
-
JWT(JSON Web Token)μ κ°μ ν ν° κΈ°λ° μΈμ¦μ΄ μ£Όλ‘ μ¬μ©.
π οΈ μλ λ°©μ.
- 1οΈβ£ ν΄λΌμ΄μΈνΈκ° μλ²μ λ‘κ·ΈμΈ μμ²μ ν¨.
- 2οΈβ£ μλ²λ JWT(Access Token + Refresh Token)λ₯Ό λ°κΈν¨.
- 3οΈβ£ ν΄λΌμ΄μΈνΈλ μμ² μλ§λ€ Access Tokenμ ν€λμ ν¬ν¨ν΄ 보λ.
- 4οΈβ£ μλ²λ ν΄λΉ Access Tokenμ μ ν¨μ±μ κ²μ¦ν¨.
- 5οΈβ£ μν(μΈμ
λ±)λ ν ν° λ΄ νμ΄λ‘λ(Payload)μ μ μ₯λ¨.
π νΉμ§.
-
μλ² νμ₯μ±.
- βοΈ μ¬λ¬ μλ²μ λΆμ° λ°°ν¬νκΈ° μ¬μ.
-
λ©λͺ¨λ¦¬ μ¬μ©λ μ΅μν.
- βοΈ μλ²λ μΈμ
μ 보λ₯Ό μ μ₯νμ§ μμΌλ―λ‘ λ©λͺ¨λ¦¬ μλͺ¨κ° μ μ.
-
μ μ°ν μΈμ¦ μ²λ¦¬.
- βοΈ μ€μ μ§μ€μ μΈμ¦ μλ²λ‘ κ΅¬μ± κ°λ₯.
-
보μ μ·¨μ½μ .
- βοΈ ν ν° μ μΆ μ μ
μ©λ μνμ΄ μμ.(ν ν° λ§λ£ μκ°, HTTPS μ¬μ© νμ.)
π μμ.
- JWT(JSON Web Token)λ₯Ό μ¬μ©ν μΈμ¦
- API Gatewayλ₯Ό ν΅ν΄ Stateless μΈμ¦ μ²λ¦¬
π μ₯μ .
- μλ²κ° μΈμ
μ μ μ₯ν νμκ° μμ΄ νμ₯μ±μ΄ λ°μ΄λ¨.
- λ‘λ λ°Έλ°μ±(Load Balancing)μ μ 리.
- μμ²λ§λ€ μΈμ¦μ΄ λ
립μ μΌλ‘ μν.
β οΈ λ¨μ
- ν ν°μ΄ ν΄λΌμ΄μΈνΈμ μ μ₯λλ―λ‘ λ
ΈμΆ μνμ΄ μ‘΄μ¬.
- λ‘κ·Έμμ μ²λ¦¬ μ Access Tokenμ 무ν¨ννκΈ° μ΄λ €μ.
- βοΈ Refresh Tokenμ 무ν¨ννμ¬ μ²λ¦¬ν¨.
2οΈβ£ Stateful(μν μ μ§) λ°©μ.
π μ μ.
- μλ²κ° ν΄λΌμ΄μΈνΈμ μν μ 보λ₯Ό μ μ₯νκ³ κ΄λ¦¬ν¨.
- μ£Όλ‘ μΈμ
(Session)μ μ¬μ©ν΄ ν΄λΌμ΄μΈνΈμ μνλ₯Ό μ μ§ν¨.
- μ¬μ©μμ λ‘κ·ΈμΈ μνλ κΆν μ λ³΄κ° μλ² λ©λͺ¨λ¦¬ λλ λ°μ΄ν°λ² μ΄μ€(DataBase, DB)μ μ μ₯λ¨.
π οΈ μλ λ°©μ.
- 1οΈβ£ ν΄λΌμ΄μΈνΈκ° λ‘κ·ΈμΈ μμ²μ ν¨.
- 2οΈβ£ μλ²λ μΈμ
ID(Session ID)λ₯Ό μμ±νκ³ , ν΄λΌμ΄μΈνΈμκ² μ λ¬ν¨.
- 3οΈβ£ μλ²λ ν΄λΉ μΈμ
ID(Session ID)λ₯Ό κΈ°λ°μΌλ‘ μ¬μ©μμ μν μ 보λ₯Ό μ μ₯ν¨.
- 4οΈβ£ ν΄λΌμ΄μΈνΈλ μμ² μλ§λ€ μΈμ
ID(Session ID)λ₯Ό μΏ ν€λ ν€λμ ν¬ν¨ν΄ 보λ.
- 5οΈβ£ μλ²λ μΈμ
μ μ₯μλ₯Ό ν΅ν΄ μνλ₯Ό νμΈν¨.
π νΉμ§.
-
μν μ μ§.
- βοΈ μλ²κ° μ¬μ©μμ μΈμ
μ μ μ§νλ©° μνλ₯Ό μΆμ ν¨.
-
μΈμ
μ μ₯μ.
- βοΈ μν μ 보λ μλ² λ©λͺ¨λ¦¬, Redis, DB λ±μ μ μ₯λ¨.
-
λ‘λ λ°Έλ°μ± λ¬Έμ .
- μ¬μ©μκ° λ€λ₯Έ μλ²μ μ κ·Όνλ©΄ μΈμ
μ λ³΄κ° μμ μ μμ.(Sticky Session μ¬μ© νμ.)
π μμ.
- HttpSessionμ μ¬μ©ν μΈμ
κ΄λ¦¬.
- Redisλ₯Ό μ¬μ©ν μΈμ
ν΄λ¬μ€ν°λ§
π μ₯μ .
- μΈμ
무ν¨νκ° μ¦μ κ°λ₯ (λ‘κ·Έμμ μ μν κ΄λ¦¬ κ°λ₯)
- μ¬μ©μλ³ μνλ₯Ό μ½κ² κ΄λ¦¬ν μ μμ
β οΈ λ¨μ
- μλ² λ©λͺ¨λ¦¬ μ¬μ©λ μ¦κ°.
- λ‘λ λ°Έλ°μ± λ¬Έμ λ°μ(Stick Session νμ)
- μλ² νμ₯ μ μΈμ
μ 보 λκΈ°ν νμ
3οΈβ£ μ΄λ€ λ°©μμ μ νν΄μΌ ν κΉ? π€
1οΈβ£ Stateless(무μν) λ°©μ μΆμ² μλ리μ€.
- RESTful API μλΉμ€.
- λ§μ΄ν¬λ‘μλΉμ€ μν€ν
μ².
- μλ² κ° λΆν λΆμ°(λ‘λ λ°Έλ°μ±)μ΄ νμν λ.
- λμ νμ₯μ±μ΄ νμν λ.
2οΈβ£ Stateful(μν μ μ§) λ°©μ μΆμ² μλ리μ€.
- μνλ₯Ό μ§μμ μΌλ‘ κ΄λ¦¬ν΄μΌ νλ κ²½μ°.
- μ¦κ°μ μΈ μΈμ
무ν¨νκ° νμν κ²½μ°.
- λκ·λͺ¨ μ¬μ©μ μΈμ
κ΄λ¦¬κ° νμν λ.
4οΈβ£ νμ΄λΈλ¦¬λ μ κ·Όλ².
-
Stateless (Access Token) + Stateful (Refresh Token)
- βοΈ Access Token π Statelessλ‘ μΈμ¦μ μν.
- βοΈ Refresh Token π Statefulλ‘ μλ²κ° μ ν¨μ±μ κ΄λ¦¬.
5οΈβ£ κΆμ₯ μ κ·Ό λ°©μ πββοΈ
- μΈμ¦: Stateless (JWT).
- μΈμ
κ΄λ¦¬: Stateful (Refresh Token κ΄λ¦¬).
- λ‘κ·Έμμ μ²λ¦¬: Refresh Tokenμ revokeνκ³ Access Tokenμ ν΄λΌμ΄μΈνΈ μΈ‘μμ μ κ±°.
π κ²°λ‘ .
-
Stateless(무μν) λ°©μ.
- βοΈ νμ₯μ±κ³Ό μ μ°μ±μ΄ λ°μ΄λλ©°, API μΈμ¦μ μ ν©ν¨.
-
Stateful(μν μ μ§) λ°©μ.
- βοΈ μ¬μ©μμ μΈμ
μ 보λ₯Ό κ΄λ¦¬ν΄μΌ νλ κ²½μ° μ 리ν¨.
- νλμ μΈ μν€ν
μ²μμλ Stateless λ°©μμ μ£Όλ‘ μ¬μ©νλ©°, Refresh Tokenμ ν΅ν΄ νμν λΆλΆλ§ Statefulλ‘ κ΄λ¦¬νλ νμ΄λΈλ¦¬λ λ°©μμ΄ λ리 μ¬μ©λ¨.