솔리드원칙
도메인주도설계

마이크로서비스아키텍처(Microservices Architecture; MSA)

하나의 큰 애플리케이션을 여러 개의 작은 애플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍처를 말한다.

예를들어 ‘인증’을 담당하는 서비스는 그 구체적인 구현 내용을 모르더라도 다른 서비스에서 약속된 인터페이스를 이용해 인증 과정을 수행할 수 있다. 또한, 검색창의 ‘자동완성’을 담당하는 서비스는 사용자의 입력을 받아서 자동완성 결과만을 응답해주면 되기 때문에 해당 API를 유지한 상태에서 세부적인 구현내용을 언제든지 손쉽게 개선하고 변경할 수 있다.

마이크로서비스아키텍처는 언제 필요할까?
  1. 애플리케이션의 배포에 한 시간 이상 소요된다.
  2. 단순한 기능 하나를 수정해도 전체 기능에 대한 QA가 필요하다.
  3. 단순한 버그 수정이 더 중대한 버그를 생산하는 일이 많아졌다.
  4. 현재의 애플리케이션을 기능별로 나눈다고 가정했을 때 수십개의 마이크로서비스가 가능하다.
반대개념 : 모놀리틱 아키텍처(Monolithic Architecture)

모놀리틱 아키텍처는 통으로 묶어서 배포하는 형식이다.

예를들어 자바의 경우 웹애플리케이션이면 WAR파일을 톰캣같은 WAS에 배포 할것이다.
모놀리틱의 장점은 아래와 같다.

  1. 개발 환경과 개발 방법이 통일되어 있으므로 심플하다.
  2. 기존 IDE와 툴을 이용해 개발하기가 용이하다.
  3. 배포가 간편합니다(빌드 결과를 WAS에 올리기만 하면 됨)

하지만 이러한 심플한 아키텍처는 서비스의 규모가 커질경우 한계에 부딪힌다.

그럼 마이크로서비스아키텍처의 장점은??

마이크로서비스는 규모가 커질수록 장점을 가진다. 첫번째로 독립적인 애플리케이션 단위이기 때문에 변경이 용이하고 다른 서비스에 영향을 미칠가능성이 낮다. 또한 개별서비스 단위로 배포가 가능하기 때문에 하루에도 여러번 배포할 수 있다.
비용적인 측면에서는 특정 서비스를 위해 전체 애플리케이션을 스케일 아웃할 필요가 없기 때문에 불필요한 자원의 낭비를 줄일 수 있다.
마지막으로 시스템의 아키텍처가 개발 조직과 나아가서 회사의 조직 문화에 큰 영향을 미친다는 점이다.


참조사이트 + 출처
참고블로그
참고깃허브

chanhee.kim's profile image

chanhee.kim

2019-04-03 14:38

Read more posts by this author