01.Micro Service
Micro Service
Monolith System
μ ν리μΌμ΄μ μ΄
ν λ©μ΄λ¦¬λ‘ ꡬμ±λ¨μΌ νλ‘μΈμ€μ€ννκΊΌλ²μ μμ , λ°°ν¬ νμ -> μλΉμ€ μ€λ¨
νλκ° μ€ν¨νλ©΄ λͺ¨λ μ€ν¨
λͺ¨λ Έλ¦¬μ€λ₯Ό ν΄λΌμ°λ μΈνλΌμμ νμ© μ μ€μΌμΌ μμ λμμ
λͺ¨λ Έλ¦¬μ€ μ 체νμ₯μ±, νλ ₯μ± λ³΄μ₯μ΄ κ°λ₯νλ λΉμ©μ΄ λΉν¨μ¨μ
βββ Client
β βββ Server1
β βββ Server2
β βββ Server3
β βββ DataBase
βββ Micro Service
μ ν리μΌμ΄μ μ΄
μ¬λ¬ κ°μ μλΉμ€ μ‘°κ°μΌλ‘ ꡬμ±μλΉμ€λ κ°κΈ°
λ 립μ μΈ κΈ°λ₯μ μ 곡μλΉμ€κ° μ¬μ©νλ μ μ₯μλ
λ€λ₯Έ μλΉμ€μ μλ²½ν 격리λ 립μ μΌλ‘ μμ , λ³λ λ°°ν¬, νμ₯ κ°λ₯
νλμ μλΉμ€ μ€ν¨λ μ 체 μ€ν¨κ° μλ
λΆλΆμ μΈ μ€ν¨λ₯Ό μλ―Έ
βββ Client
β βββ Servive A
β β βββ DataBase A
β β
β βββ Servive B
β β βββ DataBase B
β β
β βββ Servive C-1
β βββ Servive C-2
β βββ Servive C-3
β βββ DataBase C
βββ ...
λ§μ΄ν¬λ‘μλΉμ€μ μ μ
Public Interface,λ°μ΄ν° μΊ‘μννμ₯ μ, νΉμ κΈ°λ₯λ³
λ 립μ μΌλ‘ νμ₯κ°λ₯νΉμ μλΉμ€μ λ³κ²½ μ
ν΄λΉ μλΉμ€λ§λΉλ, λ°°ν¬λ 립μ μΌλ‘ μλ‘ λ€λ₯Έ μΈμ΄λ‘ κ°λ° κ°λ₯
βββ Client
β βββ Java Service
β β βββ Oracle
β β
β βββ Node.JS Service
β β βββ MariaDB
β β
β βββ C# Service
β β βββ MySQL
β β
β μ¬λ¬ κ°μ μμ
μλΉμ€ μ§ν©μΌλ‘ κ°λ°νλ μ κ·Ό λ°©λ²κ° μλΉμ€λ
κ°λ³ νλ‘μΈμ€μμ μ€νHTTP μμ
APIκ°μ κ°λ²Όμ΄ μλ¨μ μ¬μ©νμ¬ν΅μμλΉμ€λ
Biz κΈ°λ₯ λ¨μλ‘ κ΅¬μ±μ€μ μ§μ€μ μΈ κ΄λ¦¬ μ΅μν
κ° μλΉμ€λ μλ‘ λ€λ₯Έ μΈμ΄, λ°μ΄ν°, μ μ₯ κΈ°μ μ¬μ©
μ°Έκ³ . SOA(Service-Oriented Architecture)λ μ μ₯μλ₯Ό 곡μ νλ νν
μν€ν
μ² μ μ
Outer Architecture μ μ
IaaS(Infrastructure as a Service): μΈν°λ·μ ν΅ν΄ νμ₯μ±μ΄ λ°μ΄λ μ»΄ν¨ν 리μμ€λ₯Ό μλΉμ€λ‘μ μ 곡νλ μ£Όλ¬Έν κ°μ©μ± μλΉμ€ex. AWS EC2, AWS S3
μνλ μ§μ λͺ¨μ΅κ³Ό λ°© κ°μλ₯Ό μλ €μ£Όλ©΄ λκΈμ μλ μ§μμ λ°λΌ μ§μ μ§μ΅λλ€. IaaSλ λ§μ°¬κ°μ§λ‘ νλμ¨μ΄λ₯Ό λμ¬νμ¬ μ ν리μΌμ΄μ μ μ€ννμ§λ§ OS, λ°νμ, νμ₯ λ° λͺ¨λ λ°μ΄ν°λ₯Ό κ΄λ¦¬ν μ± μμ λ³ΈμΈμκ² μμ΅λλ€.PaaS(Platform as a Service): ν΄λΌμ°λ μ»΄ν¨ν μλΉμ€ λͺ¨λΈλ‘μ μ±μ κ°λ°, λ°°ν¬, μ€ν, κ΄λ¦¬ν μ μλ μ μ°νκ³ νμ₯ κ°λ₯ν ν΄λΌμ°λ νλ«νΌμ μ 곡ex. AWS Lambda
κ±°μ€ κ°κ΅¬λ₯Ό κ³ λ₯΄λ μΌμ΄ λ²κ±°λ‘κ² λκ»΄μ§λ€λ©΄ κ°κ΅¬κ° λΉμΉλ μ§μ λμ¬ν μ μμ΅λλ€. PaaSλ₯Ό μ¬μ©νλ©΄ μ체 μ½λλ₯Ό κ°μ Έμ λ°°ν¬ν μ μμ§λ§ μλ² κ΄λ¦¬ λ° μμ§ νμ₯μ ν΄λΌμ°λ μ 곡μ μ²΄κ° λ§‘μ΅λλ€CaaS(Containers as a Service): 컨ν μ΄λλ₯Ό μ¬μ©νμ¬ μ ν리μΌμ΄μ μ κ°λ°νκ³ λ°°ν¬νλ λ° νμν λͺ¨λ νλμ¨μ΄ λ° μννΈμ¨μ΄ 리μμ€λ₯Ό μ 곡νκ³ κ΄λ¦¬ex. AWS ECS, EKS
μ§μ ꡬ맀ν κ²½μ° λ€λ°λ₯΄λ μ μ§κ΄λ¦¬κ° λΆλ΄μ€λ¬μ΄ κ²½μ° λμ¬λ₯Ό μ νν μ μμ΅λλ€. κΈ°λ³Έ μ€λΉλ ν¬ν¨λμ΄ μκ³ κ°κ΅¬λ₯Ό μ§μ λ€μ¬λκ³ κ³΅κ°μ κΎΈλ°λλ€. 컨ν μ΄λλ₯Ό μ¬μ©νλ©΄ 컨ν μ΄λνλ μ ν리μΌμ΄μ μ λμ ν μ μμΌλ―λ‘ κΈ°λ³Έ μ΄μ체μ μ λν΄ κ±±μ ν νμ μμ΄ κ·λͺ¨μ λ°νμμ μ μ΄ν μ μμ΅λλ€
Platform ꡬμ±μμ , MSA ν¨ν΄
λΌμ°ν , λ‘λ λ°Έλ°μ±, μΈμ¦/μΈκ°, λ‘κΉ , νΈλ μ΄μ±, λͺ¨λν°λ§
DevOps Infra μ μ
νμκ΄λ¦¬, λΉλ, λ°°ν¬(CI/CD)
.
Inner Architecture μ μ
Front End
κΈ°μ stack μ μ
λ΄λΆ ꡬ쑰 μ μ
Back End
κΈ°μ stack, νλ μμν¬
λ΄λΆ ꡬ쑰 μ μ
ν΅μ
μλΉμ€ κ°
λ κ±°μ μ°κ³
.
μ€κ³μ ꡬν
(1) DDD μ€κ³λ₯Ό ν΅ν λ§μ΄ν¬λ‘μλΉμ€ μλ³
β’ λλ©μΈ: μ
무 μμ, μ 곡 μλΉμ€
⒠ꡬμ±μ μλ, μ΄μ μ‘°μ§ κ΅¬μ‘°
β’ μλΉμ€ λ³κ²½/λ°°ν¬ λΉλ
β’ μ¬μ©λ: νΈλμμ
λΉλ
β’ λ°μ΄ν°λ² μ΄μ€ μ£Όμ μμ, μ€λμ½
(2) λ°±μλ μ€κ³
β’ λλ©μΈ λͺ¨λΈ μ€κ³
β’ API μ€κ³
β’ λ°μ΄ν° λͺ¨λΈ μ€κ³
(3) νλ‘ νΈμλ μ€κ³
β’ UI νλ¦
β’ UI λ μ΄μμ μ μ
(4) ν
μ€νΈ
β’ λ¨μ
β’ API
β’ EtoE
(5) λ°°ν¬
β’ CI/CDμμ€ν 볡μ‘μ±μΌλ‘
λ‘컬 볡μ‘μ±κ³ΌκΈλ‘λ² λ³΅μ‘μ±μ΄ μλλ°, λ무 λ§μ§λ μ μ§λ μλ μ μ ν μμ€μΌλ‘ λΆλ¦¬κ° νμνλ€.λ‘컬 볡μ‘μ±: κ°κ°μ κ°λ³ λ§μ΄ν¬λ‘μλΉμ€μ 볡μ‘μ±
κΈλ‘λ² λ³΅μ‘μ±: μ 체 μμ€ν μ 볡μ‘μ±, μλΉμ€ κ°μ μνΈμμ©κ³Ό μμ‘΄μ±
μ€κ³
REST API
REST ꡬμ±
REST(Representational State Transfer): μμμ μ 보λ₯Ό μ£Όκ³ λ°λ ꡬ쑰
HTTP νλ‘ν μ½κ³Ό JSON ν¬λ§·μ μ¬μ©ν ꡬ쑰
μμ(Resource) : URIλ‘ νν (http://service/apis)νμ(Verb): HTTP Method (POST, GET, PUT, DELETE)νν(Representations): HTTP POST, http://service/apis{"apis":{"name":"sample"}}
μμ
κ°κ²°νκ³ μ§κ΄μ μΈ κΈ°μ€ URL μ μ§
μμ(Resource) λ³λ‘ λ κ°μ§ νμμ κΈ°μ€ URL μ¬μ©
GET /dogs (λͺ©λ‘ μ‘°ν)
GET /dogs/1 (1λ² κ°μ²΄ μ‘°ν)
POST /dogs (κ°μ²΄ μμ±)
PUT /dogs/1 (1λ² κ°μ²΄ μμ )
DELETE /dogs/1 (1λ² κ°μ²΄ μμ )
λμ¬ λ³΄λ€λ 볡μ λͺ μ¬ μ¬μ©
κΆμ₯ λ°©λ²: GET /dogs, POST /dogs/{puppy}/owner/{terry}
λΉκΆμ₯νλ λ°©λ²: /getDogs, /setDogs
νμ
POST: 리μμ€ μμ±
GET: 리μμ€ μ‘°ν
PUT: 리μμ€ μμ
DELETE: 리μμ€ μμ
HTTP μν μ½λ
200-level: μ±κ³΅
400-level: μλͺ»λ μμ²
500-level: μλ² μλ¬
...
REST API λμμΈ κ°μ΄λ
REST API μ€κ³λ μν€ν μ² μ€νμΌμ΄μ§ νμ€μ μλλ―λ‘ μ μ°νκ² μ μ©
API λͺ©νλ κ°λ°μμ μμ°μ±κ³Ό μ±κ³΅μ κ·Ήλν (μ€μ©μ£Όμ)
λ©±λ±μ±(Idempotent)
λ°λ³΅μ μΌλ‘ νΈμΆνλλΌλ μνκ° κ³μ μ μ§λκ³ , μνμ λ³νκ° μλ κ²
μμ± μμ²μ POSTλ λ©±λ±μ±μ λ°λ₯΄μ§ μμ
GET, DELETEλ λ©±λ±μ±μ λ°λ₯΄κ² μ€κ³ κ°λ₯
Vesioning
/v1/products
/v2/products
EventStorming
UML Tool: https://lucid.co/
EventStorming Tool: https://miro.com/
μ΄λ²€νΈ μ€ν λ° μ§ν μμ
μꡬμ¬ν λΆμ
λλ©μΈ μ΄λ²€νΈ, ν«μ€ν λμΆ
컀맨λ λ° μΈλΆμμ€ν λμΆ
μ΄κ·Έλ¦¬κ±°νΈ λμΆ
λ°μ΄λλ 컨ν μ€νΈ μλ³
컨ν μ€νΈ λ§€ν μ μ
μ 무 νλ¦ μμ
μ¬λ΄ λμ λμ¬ μμ€ν

μ΄λ²€νΈ μ€ν λ° κ²°κ³Ό μμ
λ ΈλμΉ: μ΄κ·Έλ¦¬κ±°νΈ
νλμ: 컀맨λ
μ£Όν©μ: λλ©μΈ μ΄λ²€νΈ

컨ν μ€νΈ λ§€ν κ²°κ³Ό μμ

λλ©μΈ λͺ¨λΈλ§μ μν μ΄λ²€νΈ μ€ν λ° κ²°κ³Ό μμ
μ΄λ²€νΈ μ€ν λ°μ ν΅ν΄ λμΆλ
μ΄κ·Έλ¦¬κ±°νΈκ° λλ©μΈ λͺ¨λΈ μμ
컀맨λκ° μ»¨νΈλ‘€λ¬ μν
λλ©μΈ μ΄λ²€νΈλ λλ©μΈ λͺ¨λΈμ ν¬ν¨

Domain Modeling
λμ¬ λλ©μΈ λͺ¨λΈ μμ

νμ λλ©μΈ λͺ¨λΈ μμ

λμ λλ©μΈ λͺ¨λΈ μμ

BEST λμ λλ©μΈ λͺ¨λΈ μμ

Heuristics
κ²½νμ κΈ°λ°ν κ·μΉ
λ°μ΄λλ 컨ν μ€νΈ
ν¬κΈ°λ‘ κ²½κ³λ₯Ό ꡬλΆνμ§ μλλ€.
λ°μ΄λλ 컨ν μ€νΈλ₯Ό μλ³ν λλ λμ κ²½κ³λ‘ μμ
λμ€μ λλ©μΈ μ§μμ΄ μμ΄κ² λλ©΄ μ’ λ μμ κ²½κ³λ‘ λΆλ¦¬
λΉμ¦λμ€ λ‘μ§ κ΅¬ν ν¨ν΄κ³Ό μν€ν μ² ν¨ν΄ κ²°μ
κ°λ¨ν λΉμ¦λμ€ λ‘μ§(μ§μ, μΌλ°):
Transaction Script,Active Recordλ¨μν μλ£ κ΅¬μ‘°:
Transaction Script볡μ‘ν μλ£κ΅¬μ‘°:
Active Record
볡μ‘ν λΉμ¦λμ€ λ‘μ§(ν΅μ¬): Domain Model
κΈμ λλ ν΅νμ νΈλμμ μΆμ , μΌκ΄λ κ°μ¬ λ‘κ·Έ, λμμ λ°λ₯Έ μ¬μΈ΅μ λΆμ μꡬ -> Event Sourcing

ν μ€νΈ μ λ΅ κ²°μ

Last updated