01.Micro Service

Micro Service

Monolith System

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ ν•œ λ©μ–΄λ¦¬λ‘œ ꡬ성

  • 단일 ν”„λ‘œμ„ΈμŠ€ μ‹€ν–‰

  • ν•œκΊΌλ²ˆμ— μˆ˜μ •, 배포 ν•„μš” -> μ„œλΉ„μŠ€ 쀑단

  • ν•˜λ‚˜κ°€ μ‹€νŒ¨ν•˜λ©΄ λͺ¨λ‘ μ‹€νŒ¨

  • λͺ¨λ…Έλ¦¬μŠ€λ₯Ό ν΄λΌμš°λ“œ μΈν”„λΌμ—μ„œ ν™œμš© μ‹œ μŠ€μΌ€μΌ 아웃 λŒ€μƒμ€ λͺ¨λ…Έλ¦¬μŠ€ 전체

    • ν™•μž₯μ„±, 탄λ ₯μ„± 보μž₯이 κ°€λŠ₯ν•˜λ‚˜ λΉ„μš©μ΄ λΉ„νš¨μœ¨μ 

β”œβ”€β”€ Client
β”‚   β”œβ”€β”€ Server1
β”‚   β”œβ”€β”€ Server2
β”‚   └── Server3
β”‚      └── DataBase
└── 

Micro Service

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ—¬λŸ¬ 개의 μ„œλΉ„μŠ€ 쑰각으둜 ꡬ성

  • μ„œλΉ„μŠ€λŠ” 각기 독립적인 κΈ°λŠ₯을 제곡

  • μ„œλΉ„μŠ€κ°€ μ‚¬μš©ν•˜λŠ” μ €μž₯μ†ŒλŠ” λ‹€λ₯Έ μ„œλΉ„μŠ€μ™€ μ™„λ²½νžˆ 격리

    • λ…λ¦½μ μœΌλ‘œ μˆ˜μ •, 별도 배포, ν™•μž₯ κ°€λŠ₯

  • ν•˜λ‚˜μ˜ μ„œλΉ„μŠ€ μ‹€νŒ¨λŠ” 전체 μ‹€νŒ¨κ°€ μ•„λ‹Œ 뢀뢄적인 μ‹€νŒ¨λ₯Ό 의미

...

λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ˜ μ •μ˜

  • Public Interface, 데이터 μΊ‘μŠν™”

  • ν™•μž₯ μ‹œ, νŠΉμ • κΈ°λŠ₯별 λ…λ¦½μ μœΌλ‘œ ν™•μž₯ κ°€λŠ₯

  • νŠΉμ • μ„œλΉ„μŠ€μ˜ λ³€κ²½ μ‹œ ν•΄λ‹Ή μ„œλΉ„μŠ€λ§Œ λΉŒλ“œ, 배포

  • λ…λ¦½μ μœΌλ‘œ μ„œλ‘œ λ‹€λ₯Έ μ–Έμ–΄λ‘œ 개발 κ°€λŠ₯

  • μ—¬λŸ¬ 개의 μž‘μ€ μ„œλΉ„μŠ€ μ§‘ν•©μœΌλ‘œ κ°œλ°œν•˜λŠ” μ ‘κ·Ό 방법

  • 각 μ„œλΉ„μŠ€λŠ” κ°œλ³„ ν”„λ‘œμ„ΈμŠ€μ—μ„œ μ‹€ν–‰

  • HTTP μžμ› API 같은 κ°€λ²Όμš΄ μˆ˜λ‹¨μ„ μ‚¬μš©ν•˜μ—¬ 톡신

  • μ„œλΉ„μŠ€λŠ” Biz κΈ°λŠ₯ λ‹¨μœ„λ‘œ ꡬ성

    • 쀑앙 집쀑적인 관리 μ΅œμ†Œν™”

  • 각 μ„œλΉ„μŠ€λŠ” μ„œλ‘œ λ‹€λ₯Έ μ–Έμ–΄, 데이터, μ €μž₯ 기술 μ‚¬μš©

  • μ°Έκ³ . SOA(Service-Oriented Architecture)λŠ” μ €μž₯μ†Œλ₯Ό κ³΅μœ ν•˜λŠ” ν˜•νƒœ

μ•„ν‚€ν…μ²˜ μ •μ˜

Outer Architecture μ •μ˜

Cloud Infra μ •μ˜

  • IaaS(Infrastructure as a Service): 인터넷을 톡해 ν™•μž₯성이 λ›°μ–΄λ‚œ μ»΄ν“¨νŒ… λ¦¬μ†ŒμŠ€λ₯Ό μ„œλΉ„μŠ€λ‘œμ„œ μ œκ³΅ν•˜λŠ” μ£Όλ¬Έν˜• κ°€μš©μ„± μ„œλΉ„μŠ€

    • ex. AWS EC2, AWS S3

  • PaaS(Platform as a Service): ν΄λΌμš°λ“œ μ»΄ν“¨νŒ… μ„œλΉ„μŠ€ λͺ¨λΈλ‘œμ„œ 앱을 개발, 배포, μ‹€ν–‰, 관리할 수 μžˆλŠ” μœ μ—°ν•˜κ³  ν™•μž₯ κ°€λŠ₯ν•œ ν΄λΌμš°λ“œ ν”Œλž«νΌμ„ 제곡

    • ex. AWS Lambda

  • CaaS(Containers as a Service): μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‚¬μš©ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•˜κ³  λ°°ν¬ν•˜λŠ” 데 ν•„μš”ν•œ λͺ¨λ“  ν•˜λ“œμ›¨μ–΄ 및 μ†Œν”„νŠΈμ›¨μ–΄ λ¦¬μ†ŒμŠ€λ₯Ό μ œκ³΅ν•˜κ³  관리

    • ex. AWS ECS, EKS

Platform κ΅¬μ„±μš”μ†Œ , MSA νŒ¨ν„΄

  • λΌμš°νŒ…, λ‘œλ“œ λ°ΈλŸ°μ‹±, 인증/인가, λ‘œκΉ…, νŠΈλ ˆμ΄μ‹±, λͺ¨λ‹ˆν„°λ§

DevOps Infra μ •μ˜

  • ν˜•μƒκ΄€λ¦¬, λΉŒλ“œ, 배포(CI/CD)

.

Inner Architecture μ •μ˜

Front End

  • 기술 stack μ •μ˜

  • λ‚΄λΆ€ ꡬ쑰 μ •μ˜

Back End

  • 기술 stack, ν”„λ ˆμž„μ›Œν¬

  • λ‚΄λΆ€ ꡬ쑰 μ •μ˜

톡신

  • μ„œλΉ„μŠ€ κ°„

  • λ ˆκ±°μ‹œ 연계

.

섀계와 κ΅¬ν˜„

  • μ‹œμŠ€ν…œ λ³΅μž‘μ„±μœΌλ‘œ 둜컬 λ³΅μž‘μ„±κ³Ό κΈ€λ‘œλ²Œ λ³΅μž‘μ„±μ΄ μžˆλŠ”λ°, λ„ˆλ¬΄ λ§Žμ§€λ„ 적지도 μ•ŠλŠ” μ μ ˆν•œ μˆ˜μ€€μœΌλ‘œ 뢄리가 ν•„μš”ν•˜λ‹€.

    • 둜컬 λ³΅μž‘μ„±: 각각의 κ°œλ³„ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ˜ λ³΅μž‘μ„±

    • κΈ€λ‘œλ²Œ λ³΅μž‘μ„±: 전체 μ‹œμŠ€ν…œμ˜ λ³΅μž‘μ„±, μ„œλΉ„μŠ€ κ°„μ˜ μƒν˜Έμž‘μš©κ³Ό μ˜μ‘΄μ„±

섀계

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

Book review: Learning Domain-Driven Design by Vlad Khononov

ν…ŒμŠ€νŠΈ μ „λž΅ κ²°μ •

Last updated