====== 마이크로 서비스 아키텍처 (MSA) ====== ===== MSA 정의 ===== 표준프레임워크 실행환경은 응용SW의 구성기반이 되며 응용SW실행 시 필요한 기본 기능을 제공하는 환경을 의미한다.\\ 즉 전자정부 업무 구현을 목적으로 개발된 프로그램이 사용자가 의도하는 대로 정상적으로 실행될 수 있도록 지원하는 재사용 가능한 서버 실행 모듈, SW구조의 집합을 의미 한다. 마이크로서비스를 위키백과에서는 아래와 같이 정의하였다.\\ “마이크로서비스(microservice)는 애플리케이션을 느슨히 결합된 서비스의 모임으로 구조화하는 서비스 지향 아키텍처(SOA) 스타일의 일종인 소프트웨어 개발 기법이다.\\ 마이크로서비스 아키텍처에서 서비스들은 섬세(fine-grained)하고 프로토콜은 가벼운 편이다.\\ 애플리케이션을 더 조그마하나 여러 서비스로 분해할 때의 장점은 모듈성을 개선시키고 애플리케이션의 이해, 개발, 테스트를 더 쉽게 해주고 애플리케이션 침식에 더 탄력적으로 만들어 준다.\\ 규모가 작은 자율적인 팀들이 팀별 서비스를 독립적으로 개발, 전개, 규모 확장을 할 수 있게 함으로써 병렬로 개발할 수 있게 한다. 또, 지속적인 리팩토링을 통해 개개의 서비스 아키텍처가 하나로 병합될 수 있게 허용한다.\\ 마이크로서비스 기반 아키텍처는 지속적인 배포와 전개(디플로이)를 가능케 한다.” \\ 즉, 전통적인 애플리케이션은 단일 플랫폼(시스템)에 여러 서비스를 모놀리식 아키텍처로 배포가능한 단일 소프트웨어 산출물로 전달된다.\\ 예로, UI(User Interface) 및 비즈니스 로직, 데이터베이스 엑세스 로직 모두가 하나의 애플리케이션 산출물로 패키징되어 애플리케이션 서버(WAS)로 배포되는 것이다.\\ 이러한 구조에서는 고객의 요구조건에 맞추어 확장성 및 성능을 위한 신속한 대처가 어려워, 보다 유연성 및 작고 독립적으로 분산된 플랫폼 아키텍처가 요구되며 이를 위한 마이크로 서비스 아키텍처가 활용되고 있다.\\ 마이크로 서비스는 대형 애플리케이션의 경계를 허물고, 시스템 내부에 논리적으로 독립적인 소형 시스템들을 구축하는데 도움을 준다. {{:egovframework:msa:monolith_vs_msa.png|monolith와 msa 비교}} 위 다이어그램의 마이크로 서비스 아키텍처에서 볼 수 있듯이, 각각의 마이크로 서비스는 자체 비즈니스 계층과 데이터베이스를 가지고 있다.\\ 그렇게 함으로써, 하나의 마이크로 서비스를 수정한다고 해서 다른 마이크로 서비스에 영향을 주지 않는다.\\ 일반적으로 마이크로 서비스는 HTTP, REST 같은 널리 채택된 lightweight 프로토콜 또는 JMS 또는 AMQP 와 같은 메시징 프로토콜을 사용하여 서로 통신한다.\\ 특정 시나리오에서는 더 전문화된 프로토콜을 사용할 수도 있다. 마이크로서비스 아키텍처(MSA)의 특징은 다음과 같다.\\ * 애플리케이션 로직을 각자 책임이 명확한 작은 컴포넌트들로 분해하고 이들을 조합해서 솔루션을 제공한다. * 각 컴포넌트는 작은 책임 영역을 담당하고 완전히 상호 독립적으로 배포된다. 마이크로서비스는 비즈니스 영역의 한 부분에서만 책임을 담당한다. 그리고 애플리케이션에서 재사용할 수 있어야 한다. * 마이크로서비스는 몇 가지 기본 원칙(표준이 아닌 원칙임에 유의)에 기반을 두며, 서비스 소비사와 서비스 제공자 사이의 데이터 교환을 위해 HTTP와 JSON(JavaScript Object Notation) 같은 경량 통신 프로토콜을 사용한다. * 애플리케이션은 항상 기술 중립적 프로토콜(JSON이 가장 보편적이다)을 사용해 통신하므로 서비스 구현 기술과는 무관한다. 따라서 마이크로서비스 기반의 애플리케이션을 다양한 언어와 기술로 구축할 수 있다는 것을 의미한다. * 작고 독립적이며 분산된 마이크로서비스를 사용해 조직은 명확히 정의된 책임 영역을 담당하는 소규모 팀을 보유할 수 있다. 이 팀들은 애플리케이션 출시(delivery)처럼 하나의 목표를 향해 일하지만, 자기가 개발하는 서비스만 책임진다. ===== 참고자료 ===== * Java Message Service : 자바 프로그램이 네트워크를 통해 데이터를 송수신하는 자바 API이다. * Advanced Message Queuing Protocal : 메시지 지향 미들웨어를 위한 개방형 표준 응용 계층 프로토콜이다. * [[https://ko.wikipedia.org/wiki/마이크로서비스|위키 백과 “마이크로서비스”]] * [[https://howtodoinjava.com/microservices/microservices-definition-principles-benefits/|Microservices – Definition ]]