유명 서비스 기업들이 앞다투어 사용하는 아키텍처가 MSA다. 프로젝트에서도 이를 다루면 좋을 것 같아 학습하려 한다. MSA란 무엇인지 다른 아키텍처와 비교해 알아보고, Java로 구축하려면 무엇이 필요한지 살펴보자.
MSA(Micro Service Architecture)란, 독립적인 서비스들의 모음이 경량화 API를 통해 통신하는 애플리케이션 아키텍처의 한 유형이다. 하나의 애플리케이션 내에 있는 각 핵심 기능이 독립적으로 존재하게끔 소프트웨어를 구축하는 클라우드 네이티브 접근 방식이다.
분리는 협력을 이끈다. 개발팀과 운영팀은 분리된 애플리케이션을 통해, 서로 방해되지 않게 협력할 수 있다. 따라서 동일한 애플리케이션 개발에 더 많은 개발자들이 동시 참여할 수 있어, 개발에 소요되는 시간을 단축할 수 있다.
MA(Monolithic Architecture, 모놀로식 아키텍처)는 전통적인 애플리케이션 빌드 방식으로, 애플리케이션 내의 모든 기능과 서비스가 맞물려 단일 유닛으로 운영되는 방식이다.
MA에서는 애플리케이션이 추가되거나 개선될 경우 아키텍처는 복잡해지며, 하나의 프로세스가 확장되기 위해서는 전체 애플리케이션도 확장되어야 했다.
MSA에서는 각 핵심 기능이 독립적으로 작동하게끔 빌드된다. 따라서 모든 애플리케이션을 중단하지 않고 부분 구축 및 업데이트가 가능하다.
SOA(Service Oriented Architecture, 서비스 지향 아키텍처)는 네트워크에서 공통의 통신 언어를 사용하는 서비스 인터페이스를 활용하여 소프트웨어 구성 요소를 다시 사용할 수 있게 만드는 소프트웨어 설계 유형이다.
MSA는 SOA가 진화한 형태이다. 크고 복잡한 애플리케이션을 작업하기 쉬운 작은 구성요소로 세분화한다는 점이 유사하다. 그러나 SOA가 전사적인 아키텍처 접근 방식이라 레거시 인프라, 즉 표준 네트워크 프로토콜을 이용하는 반면, MSA는 애플리케이션 개발 팀의 구현 전략이므로 쿠버네티스 등을 사용한다.
수동으로 배포하기엔 너무 복잡하기에 자동화를 진행해야 한다. 초기에는 시간을 들여 서비스 간의 종속성을 파악해야 역호환성을 감소할 수 있다.
모든 로그를 한 곳에 모으는 과정이 필요하다.
모든 문제를 중앙에서 모니터링하여야 한다.
로컬 환경에서만이 아니라, 외부 조건을 모두 고려해야 한다.
중앙집중식 또는 통합형 여부에 관계 없이 서비스 검색을 고려해야 한다.
RESTful API, 비동기 메시지 큐 및 이벤트 기반 아키텍처와 같은 다양한 통신 패턴 사용