msa
Last updated
Last updated
https://www.nginx.com/blog/introduction-to-microservices/
μ ν리μΌμ΄μ μμ λͺ¨λ λΉμ¦λμ€ λ‘μ§μ΄ λ€ λ€μ΄κ° μλ ꡬ쑰
μ ν΅μ μΈ IT νλ‘μ νΈμ κ·Όκ°μ΄ λλ λ¨μΌ ꡬ쑰 νμ
νΉμ§
λ¨μΌνλ ν΅ν© λ°μ΄ν°λ² μ΄μ€λ₯Ό μ¬μ©
μλΉμ€λ₯Ό μ΄λ£¨κ³ μλ μ 체 κΈ°λ₯μ λ¨ νλμ μ½λλ² μ΄μ€λ‘ κ°λ°(μΌμνλ μ½λ 체κ³)
μ₯μ
λͺ¨λ κ²μ΄ νλμ νλ‘μ νΈμ λ€μ΄κ° μκΈ° λλ¬Έμ κ°λ°, λΉλ, λ°°ν¬, ν μ€νΈκ° μ©μ΄ν©λλ€.
κΈ°μ‘΄ IDEμ ν΄μ μ΄μ©ν΄ κ°λ°νκΈ°κ° μ©μ΄ν©λλ€.
κ°μ μ ν리μΌμ΄μ μ μ¬λ¬ κ° λκ³ λ‘λ λ°Έλ°μλ₯Ό μμ λλ λ°©λ²μΌλ‘ μ½κ² νμ₯(scale)ν μ μμ΅λλ€.
λ¨μ
κΈ°μ μ΄ λμμμ΄ λ°λλ νκ²½μμ κΈ°μ‘΄ νλ μμν¬μ μμ‘΄μ±μ΄ μκΈ°λ©° μ μ¬μ μΈ λ¬Έμ λ°μ κ°λ₯ν©λλ€.
κΈ°λ₯μ΄ λ§μμ§κ³ κ·λͺ¨κ° μ»€μ Έ 볡μ‘ν΄μ§μλ‘ μ§μμ ν΅ν©/λ°°ν¬(CI/CD) λ° μ μ§λ³΄μκ° μ΄λ ΅μ΅λλ€.
SPOF(Single Point of Failure) : ν κ°μ§ κΈ°λ₯ μ₯μ λ°μ μ μ 체 μλΉμ€ μ₯μ λ° μ¬μ© λΆκ°
μ¬λ¬ λͺ¨λμ΄ ν¨κ» μ‘΄μ¬νκΈ° λλ¬Έμ κ° λͺ¨λλ³ νΉμ±μ λ§λ νλμ¨μ΄ νμ₯(scale-out)μ νκΈ° μ΄λ €μ
μ 체 νλ‘μΈμ€κ° νλμ νλ‘μΈμ€μμ λκΈ° λλ¬Έμ μμ μ±μλ λ¬Έμ κ° μμ΅λλ€. ν΄λΉ νλ‘μΈμ€μμ λ©λͺ¨λ¦¬ λμ(memory leak)κ° μΌμ΄λκ±°λ νλ‘μΈμ€κ° μ£½λ κ²½μ°, λ²κ·Έκ° λ°μνλ κ²½μ° λ± λͺ¨λ μν₯μ νκΊΌλ²μ λ°μ
μλ‘μ΄ κΈ°μ , μΈμ΄, νλ μμν¬ λ±μ μ μ©νκΈ° μ΄λ ΅μ΅λλ€. λΆλΆμ μΌλ‘ λ€μ΄λ΄λ κ²μ΄ μ΄λ ΅κΈ° λλ¬Έμ κΈ°μ λ Ένκ° μ¬ λκΉμ§ λ΄λ²λ € λκ² λκ³ , νμ°Έ λ€μμΌ μ°¨μΈλ νλ‘μ νΈλ‘ μ 체λ₯Ό κ°μμκ² λ©λλ€.
https://www.nginx.com/blog/introduction-to-microservices/
λ§μ΄ν¬λ‘μλΉμ€λ μ ν리μΌμ΄μ μ λμ¨νκ² κ²°ν©λ μλΉμ€μ λͺ¨μμΌλ‘ ꡬ쑰ννλ μλΉμ€ μ§ν₯ μν€ν μ²(SOA) μ€νμΌμ μΌμ’ μΈ μννΈμ¨μ΄ κ°λ°κΈ°λ²
μ ν리μΌμ΄μ μ λ μ‘°κ·Έλ§ν μ¬λ¬ μλΉμ€λ₯Ό λΆν΄ν λμ μ₯μ μ λͺ¨λμ±μ κ°μ νκ³ μ ν리μΌμ΄μ μ μ΄ν΄, κ°λ°, ν μ€νΈλ₯Ό λ μ½κ² ν΄ μ£Όκ³ μ ν리μΌμ΄μ μΉ¨μμ λ νλ ₯μ μΌλ‘ λ§λ€μ΄ μ€λλ€.
λ§μ΄ν¬λ‘μλΉμ€λ₯Ό μ¬μ©νλ©΄ μλΉμ€λ₯Ό μκ² λΆλ¦¬ν¨μΌλ‘μ¨ μ μμΌν κ°λ° νκ²½κ³Ό μ μ λ 볡μ‘ν΄μ§λ μ ν리μΌμ΄μ μμ λΆλͺ ν μ΄μ μ΄ μμ§λ§, μλΉμ€λ₯Ό λΆλ¦¬νλ©΄μ μκΈ°λ λ¨μ λ μ‘΄μ¬ν©λλ€.
κ·λͺ¨κ° μμ μμ¨μ μΈ νλ€μ΄ νλ³ μλΉμ€λ₯Ό λ 립μ μΌλ‘ κ°λ°, μ κ°, κ·λͺ¨ νμ₯μ ν μ μκ² ν¨μΌλ‘μ¨ λ³λ ¬λ‘ κ°λ°ν μ μκ² ν©λλ€. μ§μμ μΈ λ¦¬ν©ν°λ§μ ν΅ν΄ κ°κ°μ μλΉμ€ μν€ν μ²κ° νλλ‘ λ³ν©λ μ μκ² νμ©ν©λλ€.
μ½ κ΄λ¦¬, κ³ κ° κ΄λ¦¬ λ± μλΉμ€ λ¨μλ‘ λλκ³ κ°κ°μ μλΉμ€λ€μ API ννλ‘ μ 곡λ©λλ€. κ°κ°μ μλΉμ€λ νλμ μμ μ ν리μΌμ΄μ μ²λΌ λ°°ν¬κ° κ°λ₯ν©λλ€. λ°λΌμ λΆλΆμ μΌλ‘ μλ‘μ΄ κΈ°λ₯μ μΆκ°νκ±°λ, μλ‘μ΄ κΈ°μ μ μ μ©ν μλ μμ΅λλ€. λν λΆλΆμ μΌλ‘ μ₯μ κ° λ°μνλλΌλ 볡ꡬνλ λμ ν΄λΉ μλΉμ€μ μ°κ΄μ΄ μλ λ€λ₯Έ μλΉμ€λ μ μ λμν©λλ€.
λ§μ΄ν¬λ‘μλΉμ€ κΈ°λ° μν€ν μ²λ μ§μμ λ°°ν¬μ μ κ°(λνλ‘μ΄)λ₯Ό κ°λ₯μΌ ν©λλ€.
νΉμ§
MSAμ μλΉμ€λ€μ HTTPμ κ°μ κΈ°μ λΆκ°μ§λ‘ μ μΈ νλ‘ν μ½μ μ¬μ©νμ¬ λͺ©νλ₯Ό λ¬μ±νκΈ° μν΄ λ€νΈμν¬λ₯Ό ν΅ν΄ ν΅μ νλ νλ‘μΈμ€λ€μΈ κ²½μ°λ μμ΅λλ€.
λ§μ΄ν¬λ‘μλΉμ€ μν€ν μ²μ μλΉμ€λ€μ λ 립μ μΈ μ κ°(deploy)κ° κ°λ₯ν©λλ€.
μλΉμ€ κ΅μ²΄κ° μ½μ΅λλ€.
μλΉμ€λ κΈ°λ₯λ³λ‘ λΆλ₯λ©λλ€.
μλΉμ€λ μ΅μ μ 쑰건μ λΆν©νλ λ°μ λ°λΌ κ°κΈ° λ€λ₯Έ νλ‘κ·Έλλ° μΈμ΄, λ°μ΄ν°λ² μ΄μ€, νλμ¨μ΄, μννΈμ¨μ΄ νκ²½μ μ¬μ©νμ¬ κ΅¬νν μ μμ΅λλ€.
μλΉμ€λ€μ κ·λͺ¨κ° μκ³ , λ©μμ§ μ λ¬μ΄ κ°λ₯νλ©° 컨ν μ€νΈλ³λ‘ λ¬Άμ΄λ©° μμ¨μ μΌλ‘ κ°λ°λλ©° λ 립μ μΌλ‘ μ κ°ν μ μμΌλ©° λΆμ°μ μ΄λ©° λΉλκ° λλ©° μλνλ νλ‘μΈμ€λ€λ‘ μΆμλ©λλ€.
μ₯μ
μλΉμ€λ³λ‘ λ 립μ μΈ λ°°ν¬κ° κ°λ₯ν©λλ€.
μ€μΌμΌλ§(Scaling) : νΉμ μλΉμ€ λΆνλ‘ μ€μΌμΌλ§μ΄ νμν κ²½μ° ν΄λΉ μλΉμ€λ§ νμ₯
μ₯μ λμ : μ 체 μλΉμ€ μ 곡μ λ―ΈμΉλ μν₯ μ΅μν
λ€μ€μΈμ΄(Polyglot) : κ° μλΉμ€λ§λ€ λ€μν μΈμ΄/νκ²½ κ΅¬μ± κ°λ₯
λ¨μ
λ§μ΄ν¬λ‘μλΉμ€ μ ν리μΌμ΄μ μ΄ λΆμ° μμ€ν μ΄λΌλ μ¬μ€μμ λ°μνλ 볡μ‘μ±μ λλ€.
λ§μ΄ν¬λ‘μλΉμ€ κΈ°λ° μ ν리μΌμ΄μ μ ν μ€νΈ λ° λ°°ν¬νλ κ²λ ν¨μ¬ λ 볡μ‘ν©λλ€.
μν€ν μ²
λͺ¨λμ±μ΄ μλ ꡬ쑰λ₯Ό μμ°μ€λ½κ² κ°μ ν¨
μκΈ° μμ μ μ§μμ λ°°ν¬ μννΈμ¨μ΄ κ°λ° νλ‘μΈμ€μ μμΉμν΅λλ€. μ ν리μΌμ΄μ μ μ¬μν λΆλΆμ λ³κ²½μ νλ μ΄μμ μ μ μμ μλΉμ€μ λ€μ λΉλ, μ¬μ κ°λ§μ νμλ‘ ν©λλ€.
μ¬μΈν μΈν°νμ΄μ€(λ 립μ μΌλ‘ μλΉμ€λ₯Ό μ κ°ν μ μμ), λΉμ¦λμ€ μ£Όλμ κ°λ°(λλ©μΈ λλ¦¬λΈ λμμΈ), ν΄λΌμ°λ μ ν리μΌμ΄μ μν€ν μ², ν΄λ¦¬κ³³ νλ‘κ·Έλλ°, νΌμμ€ν΄μ€, κ°λ²Όμ΄ 컨ν μ΄λ μ κ°, νμ€μ¬νλ μ§μμ λ°°ν¬, μ μ²΄λ‘ μ μΈ μλΉμ€ λͺ¨λν°λ§μ κ°μΆ λ°λΈμ΅μ€μ κ°μ μμΉλ€μ κ³ μν©λλ€.
νμ₯μ±μ μ΄λμ΄ λλ νΉμ§λ€μ μ 곡ν©λλ€.
κ° μλΉμ€λ μλ‘ APIλ₯Ό μ 곡νκ³ μ΄λ₯Ό μ΄μ©ν΄μ μλ‘ νΈμΆν©λλ€. κ° μλΉμ€λ λΉλκΈ°(async)λ‘ λμνκ³ λ©μμ§ κΈ°λ°μΌλ‘ ν΅μ
λ§μ΄ν¬λ‘μλΉμ€ μν€ν μ²λ μμ£Ό μμ λ¨μλ‘ λμνλ μλΉμ€κ° ꡬλλλλ‘ μμ€ν λ° μννΈμ¨μ΄μ ꡬμ±κ³Ό ꡬμ±μμ κ°μ κ΄κ³λ₯Ό μ μν μν€ν μ²
λͺ¨λ μμλ₯Ό νλμ μ ν리μΌμ΄μ μ ꡬμΆνλ μ ν΅μ μΈ λͺ¨λλ‘μ μ κ·Ό λ°©μ λμ λ§μ΄ν¬λ‘μλΉμ€μμλ λͺ¨λ μμκ° λ 립μ μ΄λ©° μ°λλμ΄ λμΌν νμ€ν¬λ₯Ό μμ
κ΅¬μ± μμΉ
λ¨μΌ μ± μμ μμΉ(Single Responsibility) : κ° μλΉμ€λ νλμ μ± μλ§ κ°μ§
λ 립μ μΈ λ°°ν¬(Independently Deployable) : κ° μλΉμ€λ₯Ό λ 립μ μΌλ‘ λ°°ν¬
λμ¨ν κ²°ν©(Loosely Coupled) : κ° μλΉμ€ κ° μμ‘΄μ±μ μ΅μν
λμ μ μ§μ±, ν μ€νΈ κ°λ₯μ±(Highly Maintainable and Testable) : λΆλ¦¬λ μλΉμ€λ³ κ΄λ¦¬ λ° μ μ§κ° νΈνκ³ ν μ€νΈλ λ 립μ μΌλ‘ κ°λ₯
ν λ¨μ ꡬμ±μ΄ κ°λ₯(Owned by a Small Team) : μλΉμ€ λ¨μλ‘ ν ꡬμ±μ νμ¬ κ°λ°/μ΄μ κ°λ₯
μ¬μ λ¨μ(μλΉμ€ λ¨μ)μ μ‘°μ§(Organized around Business Capabilities) : κ° μλΉμ€μ λ¨μλ₯Ό μ¬μ μ λ¨μλ‘ νλ¨ν μ μμ
κ΅¬μ± μμ
https://developers.redhat.com/blog/2016/12/09/spring-cloud-for-microservices-compared-to-kubernetes
Config Management : μλΉμ€μ μ¬λΉλ, μ¬λΆν μμ΄ μ€μ μ¬νμ λ°μ
Service Discovery : MSA κΈ°λ° μλΉμ€ λ°°ν¬ μ μλΉμ€ κ²μ λ° λ±λ‘
API Management : ν΄λΌμ΄μΈνΈ μ κ·Ό μμ²μ μΌμν
Centralized Logging : μλΉμ€λ³ λ‘κ·Έμ μ€μμ§μ€ν
Distributed Tracing : λ§μ΄ν¬λ‘μλΉμ€ κ°μ νΈμΆ μΆμ
Centralized Monitoring : μλΉμ€λ³ λ©νΈλ¦ μ 보μ μ€μμ§μ€ν
Resilience & Fault Tolerance : MSA ꡬ쑰μμ νλμ μ€ν¨ν μλΉμ€κ° 체μΈμ μ°κ²°λ μ 체 μλΉμ€λ€μ νκΈ ν¨κ³Όλ₯Ό λ°μμν€μ§ μλλ‘ νκΈ° μν κ³λ¨μ μ€ν¨ λ°©μ§ κ΅¬μ‘°
Auto-Scaling & Self-Healing : μλ μ€μΌμΌλ§, 볡ꡬ, μλνλ₯Ό ν΅ν μλΉμ€ κ΄λ¦¬ ν¨μ¨ν
MSAλ₯Ό ꡬννλ κΈ°λ° κΈ°μ
https://developers.redhat.com/blog/2016/12/09/spring-cloud-for-microservices-compared-to-kubernetes
λͺ¨λλ¦¬ν± μν€ν μ²μ λΉκ΅
λͺ¨λλ¦¬ν± μν€ν μ²λ νλμ μ ν리μΌμ΄μ μ λͺ¨λ κΈ°λ₯μ΄ νλμ ꡬ쑰μ ν΅ν©λμ΄ μλ ννλ‘ μ ν΅μ μΈ μννΈμ¨μ΄ κ°λ° λ°©λ²λ‘ μμ μμ£Ό μ¬μ©λλ λ°©λ²λ‘ μΌλ‘ νλμ ꡬμ±νκ²½λ§ κ΄λ¦¬νλ©΄ λκΈ° λλ¬Έμ κ°λ° λ° ν μ€νΈκ° μ©μ΄νλ€λ μ₯μ μ΄ μμ§λ§ λ°°ν¬μ μ΄λ €μκ³Ό νλ‘μ νΈκ° 컀μ§λ©΄ μ 체 μ½λλ₯Ό νμ νκΈ° νλ€λ€λ λ¨μ μ΄ μμΌλ©° μκ·λͺ¨ μ ν리μΌμ΄μ κ°λ°μ μ ν©ν ꡬ쑰μ λλ€.
MSAλ νλμ μ ν리μΌμ΄μ μ μ¬λ¬ λ¨μμ κΈ°λ₯ λ³λ‘ λλλ ννλ‘ κΈ°λ₯ λ³λ‘ λλμ΄μ λ°°ν¬λ₯Ό κ°λ₯νκ³ μ μ°ν νμ₯μ΄ κ°λ₯νλ€λ μ₯μ μ΄ μμ§λ§, μ°κ΄λ μ¬λ¬ λͺ¨λλ€ κ°μ ν΅ν© ν μ€νΈκ° μ΄λ ΅κ³ , ν©μ΄μ§ μ€μ λ€μ ν΅ν©μ μΌλ‘ μ κ΄λ¦¬ν΄μΌ νλ€λ λ¨μ μ΄ μμ΅λλ€. 볡μ‘ν λκ·λͺ¨ μ΄ν리μΌμ΄μ κ°λ°μ μ ν©ν ꡬ쑰μ λλ€.
https://www.oreilly.com/library/view/infrastructure-as-code/9781098114664/
http://www.yes24.com/Product/Goods/64728692
http://www.yes24.com/Product/Goods/69304366
https://www.oreilly.com/library/view/cloud-native-devops/9781492040750/