Skip to content

Files

186 lines (112 loc) Β· 9.33 KB

MicroserviceArchitecture.md

File metadata and controls

186 lines (112 loc) Β· 9.33 KB

Microservice Architecture (MSA)

λͺ¨λ†€λ¦¬μ‹(Monolithic) 아킀텍쳐
λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€(Microservice) 아킀텍쳐
λͺ¨λ†€λ¦¬μ‹ vs λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€

λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ 아킀텍쳐λ₯Ό μ΄ν•΄ν•˜κΈ° μœ„ν•΄μ„œ λͺ¨λ†€λ¦¬μ‹ 아킀텍쳐가 무엇이고, λͺ¨λ†€λ¦¬μ‹μ—μ„œ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ³λ‘œ μ „ν™˜λ˜μ–΄ κ°€λŠ” μ΄μœ κ°€ 무엇인지 μ•Œμ•„μ•Ό ν•œλ‹€.


λͺ¨λ†€λ¦¬μ‹ 아킀텍쳐

Untitled

Monolithic : λ‹¨λ‹¨νžˆ μ§œμ—¬ ν•˜λ‚˜λ‘œ λ˜μ–΄ μžˆλŠ”

λͺ¨λ†€λ¦¬μ‹ μ•„ν‚€ν…μ³λž€?

ν”„λ‘œμ νŠΈμ˜ λͺ¨λ“  κΈ°λŠ₯이 단일 codebase에 μ‘΄μž¬ν•˜λŠ” 아킀텍쳐λ₯Ό λͺ¨λ…Έλ¦¬μ‹ 아킀텍쳐 라고 ν•œλ‹€.

  • UI/λΉ„μ§€λ‹ˆμŠ€ 둜직/λ°μ΄ν„°λ² μ΄μŠ€ μ—‘μ„ΈμŠ€ 둜직이 λͺ¨λ‘ ν•˜λ‚˜μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‚°μΆœλ¬Όλ‘œ νŒ¨ν‚€μ§•λ˜κ³  μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„μ— λ°°ν¬λ˜λŠ” 것을 λ§ν•œλ‹€.

λͺ¨λ†€λ¦¬μ‹ μ•„ν‚€ν…μ³μ˜ 단점 : λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ³λ‘œ μ „ν™˜ν•˜λŠ” 이유

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μœ μ € 관리 , μƒν’ˆ 결제 , νŽ˜μ΄μ§€ UI κΈ°λŠ₯이 μžˆλ‹€κ³  κ°€μ •ν•΄λ³΄μž.

  • μ‹œκ°„μ΄ μ§€λ‚ μˆ˜λ‘ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 크기가 λ„ˆλ¬΄ 컀져 κ΄€λ¦¬ν•˜κΈ° μ–΄λ €μ›Œμ§„λ‹€.

  • μ‹ κ·œ κ°œλ°œμžκ°€ ν”„λ‘œμ νŠΈμ— μ°Έμ—¬ν•  경우, λͺ¨λ†€λ¦¬μ‹ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ꡬ쑰λ₯Ό μ΄ν•΄ν•˜κΈ° 맀우 νž˜λ“€λ‹€

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— νŠΉμ • 계측(μœ μ € 관리)만 μ—…λ°μ΄νŠΈν•˜μ—¬λ„ 전체λ₯Ό μž¬λ°°ν¬ν•΄μ•Ό ν•œλ‹€.

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ν•œ λΆ€λΆ„(μƒν’ˆ 결제)μ—μ„œ μ„œλ²„ λΆ€ν•˜κ°€ λ°œμƒν•˜μ—¬ Scaling out이 ν•„μš”ν•œ 경우, 전체 μ• ν”Œλ¦¬μΌ€μ΄μ…˜(μœ μ € 관리, μƒν’ˆ 결제, νŽ˜μ΄μ§€ UI) μΈμŠ€ν„΄μŠ€λ₯Ό μ—¬λŸ¬ μ„œλ²„μ— λ°°ν¬ν•΄μ•Όν•œλ‹€.

    β†’ μžμ›λ‚­λΉ„κ°€ 맀우 μ‹¬ν•˜κΈ° λ•Œλ¬Έμ— λͺ¨λ†€λ¦¬μ‹ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ Scaling out이 λΆˆκ°€λŠ₯ν•˜λ‹€

  • νŠΉμ • λͺ¨λ“ˆ(μœ μ € 관리)μ—μ„œ 버그가 λ°œμƒν•˜λ”λΌλ„ 전체 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— 영ν–₯이 λ―ΈμΉœλ‹€.


λͺ¨λ†€λ¦¬μ‹ μ•„ν‚€ν…μ³μ˜ μž₯점

  • 단일 JAR/WAR 파일만 λ°°ν¬ν•˜κΈ° λ•Œλ¬Έμ— 배포 과정이 κ°„λ‹¨ν•˜λ‹€
  • λ„€νŠΈμ›Œν¬ μ§€μ—°/λ³΄μ•ˆ λ¬Έμ œκ°€ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ 아킀텍쳐보닀 μƒλŒ€μ μœΌλ‘œ 적닀
  • End-to-End ν…ŒμŠ€νŠΈκ°€ μš©μ΄ν•˜λ‹€

λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ 아킀텍쳐

Untitled

λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ³λž€?

λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ 아킀텍쳐(MSA) λž€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μž‘μ€ μ„œλΉ„μŠ€λ“€λ‘œ κ΅¬μ„±λ˜λŠ” 아킀텍쳐이닀. 각각의 μ„œλΉ„μŠ€λ“€μ€ HTTP와 같은 κ²½λŸ‰ ν”„λ‘œν† μ½œμ„ μ΄μš©ν•˜μ—¬ 직접 μ„œλ‘œ ν†΅μ‹ ν•œλ‹€.


λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ : DB = 1 : 1

λŠμŠ¨ν•œ κ²°ν•©

마이크둜 μ„œλΉ„μŠ€λ“€μ€ 각자 μžμ‹ λ“€λ§Œμ˜ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό κ°€μ§€κ³  μžˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 일뢀 데이터가 μ€‘λ³΅λ˜μ§€λ§Œ λŠμŠ¨ν•œ κ²°ν•©(Coupling)을 보μž₯ν•œλ‹€λŠ” μž₯점이 μžˆλ‹€. λ”°λΌμ„œ MSA의 이점을 μ–»κΈ° μœ„ν•΄ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ λ‹Ή ν•˜λ‚˜μ˜ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ³΄μœ ν•˜λŠ” 것이 ν•„μˆ˜μ μ΄λ‹€.

μ„œλΉ„μŠ€μ— μ ν•©ν•œ λ°μ΄ν„°λ² μ΄μŠ€ μœ ν˜•

마이크둜 μ„œλΉ„μŠ€λ‹Ή λ³„λ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ³΄μœ ν•˜κΈ° λ•Œλ¬Έμ— μ„œλΉ„μŠ€μ˜ νŠΉμ§•μ— 따라 μ ν•©ν•œ μœ ν˜•μ˜ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

  • κ²€μƒ‰μš© μ„œλΉ„μŠ€μ— Elasticsearchλ₯Ό μ‚¬μš©ν•˜μ—¬ 검색 속도λ₯Ό λ†’νžˆκ³ , κ°μ²΄κ°„μ˜ 관계가 μ€‘μš”ν•œ μ„œλΉ„μŠ€μ—μ„œλŠ” RDBλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ 원리

  1. 단일 μ±…μž„ 원칙 (SRP)

    SOILD 원칙쀑 ν•˜λ‚˜λ‘œ 클래슀, λ©”μ†Œλ“œ, λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ λ“±κ³Ό 같은 ν•˜λ‚˜μ˜ λ‹¨μœ„κ°€ ν•˜λ‚˜μ˜ μ±…μž„λ§Œ μ§„λ‹€λŠ” 원칙이닀. λ‹€λ₯΄κ²Œ λ§ν•˜λ©΄, κ°œλ°œν•΄μ•Ό ν•  λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ˜ κ°œμˆ˜λŠ” ν•„μš”ν•œ κΈ°λŠ₯의 μˆ˜μ™€ λ™μΌν•˜λ‹€κ³  λ³Ό 수 μžˆλ‹€.

    • 각 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λ§ˆλ‹€ λ…λ¦½λœ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ³΄μœ ν•˜λŠ” 것이 단일 μ±…μž„ 원칙에 λ”°λ₯Έ κ²ƒμœΌλ‘œ λ³Ό 수 μžˆλ‹€.
  2. λΉ„μ§€λ‹ˆμŠ€ κΈ°λŠ₯을 기반으둜 μ„œλΉ„μŠ€ ꡬ좕

    각 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λŠ” λΉ„μ§€λ‹ˆμŠ€ μš”κ΅¬μ‚¬ν•­μ— 따라 μ„œλ‘œ λ‹€λ₯Έ κΈ°μˆ μ„ μ‚¬μš©ν•  수 μžˆλ‹€.

    • μ„œλΉ„μŠ€μ˜ νŠΉμ§•μ— 따라 개발 μ–Έμ–΄, λ°μ΄ν„°λ² μ΄μŠ€ μœ ν˜• 등을 달리할 수 μžˆλ‹€λŠ” μ˜λ―Έμ΄λ‹€.
  3. μ‹€νŒ¨μ— λŒ€ν•œ 섀계

    ν•˜λ‚˜μ˜ 마이크둜 μ„œλΉ„μŠ€κ°€ λ‹€μš΄λ˜μ–΄λ„ 전체 μ‹œμŠ€ν…œμ— 영ν–₯을 λ―ΈμΉ˜μ§€ μ•Šμ•„μ•Ό ν•˜κ³ , λ‹€λ₯Έ μ„œλΉ„μŠ€λ“€μ€ μ •μƒμ μœΌλ‘œ 운영될 수 μžˆλ‹€.


SOA(Service Oriented Architecture) vs λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ 아킀텍쳐

SOA

단일 μ•„ν‚€ν…μ³μ˜ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ“±μž₯ν•œ 아킀텍쳐이닀. ν•˜λ‚˜μ˜ 큰 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 독립적인 μ†Œκ·œλͺ¨ μ„œλΉ„μŠ€λ“€λ‘œ λΆ„ν• ν•œλ‹€. ν•˜μ§€λ§Œ 각각의 μ†Œκ·œλͺ¨ μ„œλΉ„μŠ€λ“€μ€ μ„œλ‘œ μ§μ ‘μ μœΌλ‘œ μ†Œν†΅ν•˜μ§€ μ•Šκ³ , ESB(Enterprise Service Bus)λ₯ΌλΌλŠ” 미듀웨어λ₯Ό 톡해 μ†Œν†΅ν•œλ‹€.

  • ESB : μ„œλ‘œ λ‹€λ₯Έ ν”„λ‘œν† μ½œμ΄λ‚˜ λ©”μ‹œμ§€ ν‘œμ€€μ„ μ‚¬μš©ν•˜λŠ” μ„œλΉ„μŠ€λ“€κ°„μ˜ μ†Œν†΅μ„ λ„μ™€μ£ΌλŠ” 미듀웨어 λ˜λŠ” μ„œλ²„

MSA

λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ³λŠ” SOA의 진화이닀. 즉 MSAλŠ” SOA의 ν•˜μœ„ κ°œλ…μ΄λ©° 각 마이크둜 μ„œλΉ„μŠ€λ“€μ€ ESB와 같은 미듀웨어 없이 μ„œλ‘œ 직접 톡신할 수 μžˆλ‹€.


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

  • 각각의 μ„œλΉ„μŠ€λ“€μ„ λΆ„ν• ν–ˆκΈ° λ•Œλ¬Έμ— 규λͺ¨κ°€ μž‘μ•„ 관리가 μš©μ΄ν•˜λ‹€.
  • μƒˆλ‘œμš΄ κ°œλ°œμžλŠ” μžμ‹ μ΄ μž‘μ—…ν•  κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” νŠΉμ • 마이크둜 μ„œλΉ„μŠ€λ§Œ μ΄ν•΄ν•˜λ©΄ 되기 λ•Œλ¬Έμ— ν”„λ‘œμ νŠΈ μ°Έμ—¬κ°€ μˆ˜μ›”ν•˜λ‹€
  • 마이크둜 μ„œλΉ„μŠ€ 쀑 μ—…λ°μ΄νŠΈκ°€ μžˆλ‹€λ©΄, ν•΄λ‹Ή 마이크둜 μ„œλΉ„μŠ€λ§Œ μž¬λ°°ν¬ν•˜λ©΄ λœλ‹€.
  • νŠΉμ • 마이크둜 μ„œλΉ„μŠ€μ— λΆ€ν•˜κ°€ λ°œμƒν•˜λ©΄, ν•΄λ‹Ή 마이크둜 μ„œλΉ„μŠ€λ§Œ Scaling outν•  수 μžˆλ‹€.
  • 마이크둜 μ„œλΉ„μŠ€λ“€μ€ λΉ„μ§€λ‹ˆμŠ€ μš”κ΅¬μ‚¬ν•­μ— 따라 μ„œλ‘œ λ‹€λ₯Έ κΈ°μˆ μ„ μƒμš©ν•  수 μžˆλ‹€.
  • νŠΉμ • 마이크둜 μ„œλΉ„μŠ€κ°€ λ‹€μš΄λ˜μ–΄λ„, λ‹€λ₯Έ 마이크둜 μ„œλΉ„μŠ€μ— 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠλŠ”λ‹€.

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

  • λΆ„μ‚°ν˜• μ‹œμŠ€ν…œμ΄κΈ° λ•Œλ¬Έμ— λͺ¨λ†€λ¦¬μ‹ 아킀텍쳐보닀 관리가 νž˜λ“€κ³  λ³΅μž‘ν•˜λ‹€
  • 마이크둜 μ„œλΉ„μŠ€λ“€ 끼리 μƒν˜Έ μž‘μš©ν•΄μ•Όν•˜κΈ° 떄문에 톡신이 λ§Žμ•„μ§„λ‹€. 톡신이 λ§Žμ•„μ§€λ©΄ λ„€νŠΈμ›Œν¬κ°€ μ§€μ—°λ˜κ³  λΉ„μš©μ΄ λ§Žμ΄λ“€κ³  톡신 였λ₯˜κ°€ μž¦μ•„μ Έ μ•ˆμ •μ„±μ΄ λ–¨μ–΄μ§„λ‹€.
  • End-to-End ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ μ—¬λŸ¬κ°œμ˜ 마이크둜 μ„œλΉ„μŠ€λ₯Ό κ΅¬λ™μ‹œμΌœμ•Ό ν•˜λ―€λ‘œ ν…ŒμŠ€νŠΈ 과정이 λΆˆνŽΈν•˜λ‹€.

λͺ¨λ†€λ¦¬μ‹ vs λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€

Untitled


+

이전 νšŒμ‚¬μ—μ„œ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ ν™˜κ²½μœΌλ‘œ κ°œλ°œμ„ ν•˜μ˜€κ³ ,
ν˜„μž¬ νšŒμ‚¬μ—μ„œλŠ” λͺ¨λ†€λ¦¬μ‹ μ•„ν‚€ν…μ³λ‘œ κ°œλ°œλ˜μ–΄μžˆλŠ” ν”„λ‘œμ νŠΈμ— νˆ¬μž…λ˜μ–΄μžˆλŠ”λ°
κ°œμΈμ μœΌλ‘œλŠ” λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€κ°€ κ°œλ°œμ— μ‘°κΈˆλ” μš©μ΄ν•œ 것 κ°™λ‹€.

κ°€μž₯ 큰 μ΄μœ λŠ”
λ§€ μ£Όλ§ˆλ‹€ μƒˆλ‘œμš΄ κΈ°νšμ•ˆκ³Ό μˆ˜μ •μš”μ²­μ΄ μƒκΈ°λŠ”λ° μ‘°κ·Έλ§ˆν•œ 변경사항에도 전체λ₯Ό λ‹€μ‹œ λΉŒλ“œν•˜κ³  배포λ₯Ό ν•΄μ•Όν•˜λ‹ˆ
λΆ€λ‹΄μ΄λ˜κ³  ν•œ κΈ°λŠ₯을 μˆ˜μ •ν•˜μ˜€λŠ”λ° 잘λͺ»λœ 뢀뢄이 μžˆμ–΄ 전체가 였λ₯˜κ°€ μƒκΈ°λŠ” κ²½μš°λ„ μžˆμ—ˆλ‹€. 
λ”°λΌμ„œ λͺ¨λ“  κΈ°λŠ₯을 λ‹€μ‹œ ν…ŒμŠ€νŠΈλ₯Ό ν•˜κ³  배포가 λ˜λŠ”λ° 이것 λ˜ν•œ λΆ€λ‹΄μ΄μ—ˆλ‹€.

μ²˜μŒλΆ€ν„° 마이크둜 μ„œλΉ„μŠ€λ‘œ κ°œλ°œν•˜λŠ” 것은 λͺ¨λ†€λ¦¬μ‹ μ•„ν‚€ν…μ³μ˜ κ°œλ°œλ°©μ‹λ³΄λ‹€ λΆˆνŽΈν•œ 것은 ν™•μ‹€ν•˜λ‹€.
ν•˜μ§€λ§Œ λΉ λ₯΄κ²Œ λ³€ν™”ν•΄μ•Όν•˜λŠ” IT μ„œλΉ„μŠ€ μ‹œμž₯μ—μ„œ 발 맞좰 κ°œλ°œν•˜λ €λ©΄ 마이크둜 μ„œλΉ„μŠ€λ₯Ό μ„ νƒν•˜λŠ”κ²ƒμ΄ 쒋을것이닀.

MSAλ₯Ό λ„μž…ν•˜λŠ”λ° μžˆμ–΄μ„œ λΆ„λͺ…ν•œ ROI(Return Of Investment, 투자 λŒ€λΉ„ 효과)κ°€ μžˆμ–΄μ•Ό ν•œλ‹€.

λͺ¨λ†€λ¦¬μ‹μ—μ„œ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ³λ‘œ μ „ν™˜ν•˜κΈ° μœ„ν•΄μ„œ Application λ‹¨μ—μ„œλΆ€ν„° Infra κΉŒμ§€ μˆ˜μ •ν•΄μ•Όν•œλ‹€. μˆ˜μ • μž‘μ—…λ§ŒμœΌλ‘œλ„ 맀우 λΆ€λ‹΄μŠ€λŸ½κ³  이후 마이크둜 μ„œλΉ„μŠ€λ“€μ„ κ΄€λ¦¬ν•˜λŠ” 것도 κΉŒλ‹€λ‘­λ‹€.

ν•˜μ§€λ§Œ 배포가 λΉˆλ²ˆν•œ κΈ°λŠ₯이 ν•œμ •λ˜μ–΄ 있고, νŠΉμ • μ„œλΉ„μŠ€μ— scaling out이 ν•„μš”ν•œ 경우 MSAλ₯Ό λ„μž…ν•˜λ―€λ‘œμ¨ 고질적인 λ¬Έμ œκ°€ 해결될 수 μžˆλ‹€.

(ν˜„μž¬ Netflix와 λ°°λ‹¬μ˜ λ―Όμ‘± μ—μ„œ MSA둜 μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜κ³  μžˆλ‹€.)


μ°Έμ‘°

https://www.geeksforgeeks.org

https://lion-king.tistory.com

https://www.youtube.com/watch?v=dSGnJWHuxtQ

https://ssungkang.tistory.com

https://shaul1991.medium

[μš°μ•„μ½˜2020] λ°°λ‹¬μ˜λ―Όμ‘± λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ—¬ν–‰κΈ°

devops microservices docker κ°œλ…


λ©΄μ ‘ μ˜ˆμƒ 질문

MSAκ°€ λ¬΄μ—‡μΈκ°€μš”?

μ™œ MSAλ₯Ό μ‚¬μš©ν•˜λ‚˜μš”?

본인은 μ–΄λ–€ μ•„ν‚€ν…μ³λ‘œ ν”„λ‘œμ νŠΈλ₯Ό κ°œλ°œν•˜μ˜€λ‚˜μš”? κ·Έ μ΄μœ λŠ”?