MSA (Micro Service Architecture) λž€?

2016-10-10

Micro Service Architecture

μ–Όλ§ˆ μ „λΆ€ν„° Node.jsκ°€ λ§Žμ€ κ°œλ°œμžλ“€μ΄ κ³΅λΆ€ν•˜κ³  ν˜„μ—…μ—μ„œλ„ 많이 μ‚¬μš© 쀑에 μžˆλ‹€. Node.jsλ₯Ό μ•ŒκΈ° 이전에 MSAλ₯Ό λ¨Όμ € μ•Œμ•„μ•Ό ν•œλ‹€κ³  μƒκ°ν•˜κΈ°μ— κ²€μƒ‰ν•˜κ³  κ³΅λΆ€ν•΄μ„œ λ‚˜λ¦„λŒ€λ‘œ κ°„λž΅νžˆ 정리해 보렀 ν•œλ‹€.

Micro Service Architectureλž€?

λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λ₯Ό 제일 처음 μ–ΈκΈ‰ν•œ μ‚¬λžŒμ€ Martin FowlerλΌλŠ” μ‚¬λžŒμ΄λ‹€. 이뢄은 객체지ν–₯ μ–Έμ–΄λ₯Ό 곡뢀해본 μ‚¬λžŒμ΄λΌλ©΄ ν•œλ²ˆμ―€μ€ 듀어봀을리라 μƒκ°ν•œλ‹€. 이뢄이 처음 μžμ‹ μ˜ Blogμ—μ„œ Microserviceλ₯Ό μ΄λ ‡κ²Œ μ†Œκ°œν•˜κ³  μžˆλ‹€.

λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜ μŠ€νƒ€μΌμ€ 단일 μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ‚˜λˆ„μ–΄ μž‘μ€ μ„œλΉ„μŠ€μ˜ μ‘°ν•©μœΌλ‘œ κ΅¬μΆ•ν•˜λŠ” 방법이며, 각 κ°œλ³„ μ„œλΉ„μŠ€λŠ” >μžμ‹ μ˜ ν”„λ‘œμ„ΈμŠ€μ—μ„œ μ‹€ν–‰ν•˜λŠ” HTTP 기반 API λ“±μœΌλ‘œ κ°€λ²Όμš΄ μ—°κ²° 방식을 μ‚¬μš©ν•©λ‹ˆλ‹€. 각 μ„œλΉ„μŠ€λŠ” λΉ„μ§€λ‹ˆμŠ€ 둜직의 μˆ˜ν–‰ >κΈ°λŠ₯에 맞게 ꡬ좕 된 μ™„μ „νžˆ μžλ™ν™” 된 머신에 μ˜ν•œ 배포λ₯Ό 톡해 이루어 μ§‘λ‹ˆλ‹€. 각 μ„œλΉ„μŠ€μ˜ μ΅œμ†Œν•œμ˜ 쀑앙 관리 κΈ°λŠ₯은 μžˆμ§€λ§Œ,>μ„œλ‘œ λ‹€λ₯Έ ν”„λ‘œκ·Έλž˜λ° 언어에 μ˜ν•΄ 개발되고, λ‹€λ₯Έ 데이터 μ €μž₯ 기술이 μ΄μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€..

@Martin Fowler’s Blog http://martinfowler.com/articles/microservices.html

일반적으둜 κ°œλ°œμ— μ‚¬μš©λ˜λŠ” 아킀텍쳐인 λͺ¨λ†€λ¦¬μ‹ μŠ€νƒ€μΌμ€ 일반적인 κ³„λ°œ 방법과 같이 ν”„λ‘œκ·Έλž¨μ„ ν•˜λ‚˜μ˜ 큰 λ©μ–΄λ¦¬λ‘œ κ΅¬μΆ•ν•˜λŠ” 것을 λ§ν•œλ‹€. λͺ¨λ†€λ¦¬μ‹ μ‘μš© ν”„λ‘œκ·Έλž¨μ€ 일반적으둜 잘 μž‘λ™ν•˜μ§€λ§Œ κ°œλ°œν•  λ•Œ 문제점이 μ‘°κΈˆμ”© λ°œμƒν•˜κ²Œ λœλ‹€. μ•„μ£Ό μž‘μ€ 뢀뢄을 λ³€κ²½ν•˜λ”λΌλ„ λͺ¨λ‘ λΉŒλ“œν•΄μ„œ λ‹€μ‹œ 배포해야 ν•˜λ©° 이것은 졜근처럼 배포주기가 짧닀면 맀우 λΉ„νš¨μœ¨μ μ΄κ²Œ λœλ‹€. λ˜ν•œ ν”„λ‘œκ·Έλž¨μ΄ 점점 μ»€μ§€κ²Œ λœλ‹€λ©΄ 각 λͺ¨λ“ˆμ˜ ꡬ쑰λ₯Ό 변경없이 μœ μ§€ν•˜λŠ” 것은 맀우 μ–΄λ ΅λ‹€.

λͺ¨λ†€λ¦¬μ‹ vs 마이크둜 좜처

κ·ΈλŸ¬λ‚˜ MicroserviceλŠ” μž‘μ€ μ„œλΉ„μŠ€μ˜ 결합을 톡해 ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨μ„ κ°œλ°œν•˜λŠ” λ°©λ²•μœΌλ‘œ, 각각의 μ„œλΉ„μŠ€λŠ” 독립적인 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직으둜 κ΅¬μ„±λ˜λ©°, μ™„μ „ μžλ™ν™”λœ 개발/λ°°ν¬ν™˜κ²½μ— μ˜ν•΄ 각각 λ…λ¦½μ μœΌλ‘œ 배포가 κ°€λŠ₯ν•˜λ‹€. λ˜ν•œ μ΅œμ†Œν•œμ˜ 쀑심적인 관리 체계가 있으며 이 μ‹œμŠ€ν…œμ€ 각각 λ‹€λ₯Έ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄, λ‹€λ₯Έ λ°μ΄ν„°μŠ€ν† λ¦¬μ§€ 기술둜 μž‘μ„±ν•˜λŠ” 것이 κ°€λŠ₯ν•˜λ‹€.

λΆ„μ‚° 데이터

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

  • κ°œλ°œμžκ°€ κ΄€λ¦¬ν•˜λŠ” μŠ€μ½”ν”„κ°€ λͺ…ν™•ν•΄μ§€κ²Œ 되며, 이λ₯Ό ν† λŒ€λ‘œ μ†Œν”„νŠΈμ›¨μ–΄μ˜ λ³΅μž‘μ„±μ„ μ œμ–΄ν•˜λŠ” 것이 κ°€λŠ₯ 졜근 UI와 컨트둀, 도메인 둜직이 λ³„λ„μ˜ 마이크둜 μ„œλΉ„μŠ€λ‘œ κ΅¬μ„±λ˜μ–΄ μ™„μ „νžˆ λ…λ¦½μ μœΌλ‘œ 개발이 κ°€λŠ₯ν•œ λ°©ν–₯으둜 λ‚˜μ•„κ°€κ³  μžˆλ‹€
  • 각각의 νŒ€μ—μ„œ λ…λ¦½μ μœΌλ‘œ 개발/배포가 κ°€λŠ₯ν•˜μ—¬ κ°œλ°œνŒ€μ˜ 운영과 μŠ€μΌ€μ€„λ§μ— μžˆμ–΄ 높은 μžμœ λ„λ₯Ό κ°€μ Έλ‹€ μ€€λ‹€.
  • 각각의 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λŠ” λ‹€λ₯Έ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄, λ‹€λ₯Έ 도ꡬλ₯Ό μ‚¬μš©ν•˜μ—¬ 개발 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— μš”κ΅¬μ‚¬ν•­μ„ κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ μ΅œμ ν™”λœ 언어와 아킀텍쳐λ₯Ό 선택할 수 μžˆλ‹€.
  • 각각의 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λŠ” λ‹€λ₯Έ 데이터저μž₯μ†Œλ₯Ό μ‚¬μš©ν•  수 있으며 μ„œλ‘œ λŠμŠ¨ν•˜κ²Œ μ—°κ²°λœλ‹€.
  • DevOps와 κ²°ν•©λœ 각각의 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λŠ” μ‹¬ν”Œν•œ ꡬ쑰λ₯Ό μ§€λ‹ˆλŠ” 만큼 κ°œλ°œμ†λ„μ™€ κ°œμ„ μ— μžˆμ–΄ 높은 νš¨μš©μ„±μ„ μ§€λ‹Œλ‹€. λ˜ν•œ μžλ™ν™”λœ μœ λ‹› ν…ŒμŠ€νŠΈμ™€ μ‹œλ‚˜λ¦¬μ˜€ ν…ŒμŠ€νŠΈλŠ” λΉ λ₯Έ 배포주기에도 λΆˆκ΅¬ν•˜κ³  λ›°μ–΄λ‚œ ν’ˆμ§ˆμ„ μœ μ§€ν•  수 μžˆκ²Œλ” 도와쀀닀.

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

  • 각각의 μ„œλΉ„μŠ€μ— μ΅œμ ν™”λœ DBλ₯Ό μ‚¬μš©ν•˜κ²Œ λœλ‹€λ©΄ 데이터 μ€‘λ³΅μ˜ 문제점이 λ°œμƒν•  수 μžˆλ‹€.
  • μ„œλΉ„μŠ€λ§ˆλ‹€ 같은 μ–Έμ–΄λ‚˜ ν”„λ ˆμž„μ›μ„ μ‚¬μš©ν•˜κ²Œ λœλ‹€λ©΄ 곡유λ₯Ό 톡해 ν•΄κ²°ν•  수 μžˆμ§€λ§Œ μ„œλ‘œ λ‹€λ₯Έ μ–Έμ–΄λ₯Ό 가지고 κ°œλ°œν•˜κ²Œ λœλ‹€λ©΄ μ½”λ“œκ°€ μ€‘λ³΅λ˜λŠ” ν˜„μƒμ΄ λ°œμƒν•  수 μžˆλ‹€.
  • λΉ„λ™κΈ°λ‘œ λ™μž‘ν•˜λŠ” νŠΉμ„±μƒ 각각의 μ„œλΉ„μŠ€μ— λŒ€ν•œ ν…ŒμŠ€νŠΈλŠ” μ‰¬μš°λ‚˜ 전체적인 ν…ŒμŠ€νŠΈλŠ” 어렀움이 λ”°λ₯Έλ‹€.
  • μˆ˜λ§Žμ€ λ°°ν¬μž‘μ—…μ΄ μˆ˜λ°˜λœλ‹€. λ¦΄λ¦¬μ¦ˆκ°€ κ°œλ³„μ μœΌλ‘œ μ΄λ£¨μ–΄μ§€λŠ” νŠΉμ„±μƒ 이λ₯Ό λ³„λ„μ˜ μš΄μ˜νŒ€μ—μ„œ μΌκ΄„μ μœΌλ‘œ κ΄€λ¦¬ν•˜λŠ”κ²ƒμ€ λΆˆκ°€λŠ₯에 κ°€κΉμš°λ©° 일련의 μž‘μ—…λ“€μ„ μžλ™ν™” μ‹œν‚€μ§€ μ•ŠμœΌλ©΄ κ³Όλ‹€ν•œ μ—…λ¬΄λŸ‰μ΄ λ°œμƒν•˜κ²Œ 되며, 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ κ°œλ°œμ— μžˆμ–΄μ„œ DevOps의 λ„μž…μ€ ν•„μˆ˜μš”μ†Œμ΄λ‹€.
  • νŠΈλžœμ μ…˜ μ•„λ§ˆ 이 뢀뢄이 제일 μ²˜λ¦¬ν•˜κΈ° λ‚œκ°ν•œ 뢀뢄일 것이닀. 일반적인 λͺ¨λ†€λ¦¬μ‹ 아킀텍쳐λ₯Ό μ‚¬μš©ν•œ ν”„λ‘œμ νŠΈλΌλ©΄ RDBMS의 νŠΈλžœμ μ…˜μ„ μ‚¬μš©ν•΄ μ—λŸ¬κ°€ λ°œμƒμ‹œ rollbackν•˜λ©΄ κ·Έλ§Œμ΄λ‹€. ν•˜μ§€λ§Œ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ˜ κ²½μš°λŠ” 이 뢀뢄에 λŒ€ν•΄μ„œ λ§Žμ€ 고민이 ν•„μš”ν•˜λ‹€.

마무리

정말 수 λ§Žμ€ ν”„λ‘œκ·Έλž˜λ° 아킀텍쳐가 μ‘΄μž¬ν•œλ‹€. κ·Έ μ€‘μ—μ„œ μ–΄λ–€ 것이 κ°€μž₯ 쒋은 것이냐 λ¬»λŠ”λ‹€λ©΄ ν™•μ‹€ν•˜κ²Œ λ‹΅ν•˜κΈ° 맀우 μ–΄λ €μšΈ 것이닀. κ·Έ μˆ˜λ§Žμ€ 아케틱쳐듀 쀑에 μžμ‹ μ˜ ν”„λ‘œκ·Έλž¨μ— κ°€μž₯ μ ν•©ν•œ 아킀텍쳐λ₯Ό μ„ νƒν•΄μ„œ κ°œλ°œν•˜λ©΄ 그게 κ°€μž₯ 쒋은 아킀텍쳐라고 μƒκ°ν•œλ‹€.

문제점이 μžˆλ‹€λ©΄ 가감없이 μ§€μ ν•΄μ£Όμ‹œκΈ° λ°”λžλ‹ˆλ‹€. 항상 κ°μ‚¬ν•œ 마음으둜 μˆ˜μš©ν•˜λ©° κ³΅λΆ€ν•˜κ² μŠ΅λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€.

Reference