이번에 학교 동기들과 Kpaas활용 공모전을 참가하기로 하면서, 처음으로 MSA를 도전해보기로 했고, 교수님께 자료를 받았으나 나의 두뇌로는 도저히 이해가 가질 않아 이 곳에 정리글을 남겨볼까 한다.
출처 - https://kr.tmaxsoft.com/info/storyTView.do?seq=345
마이크로서비스 아키텍처에 대한 정확한 정의는 없다고 한다.
마이크로 서비스란 작고, 독립적으로 배포 가능한 각각의 기능을 수행하는 서비스로 구성된 프레임워크라고 할 수 있다. 마이크로서비스는 완전히 독립적으로 배포가 가능하고, 다른 기술 스택(개발 언어, 데이터베이스 등) 이 사용 가능한 단일 사업 영역에 초점을 둔다고 한다.
MSA는 API를 통해서만 상호작용이 가능하다.
즉, 마이크로서비스는 서비스의 end-point를 API 형태로 외부에 노출하고, 실질적인 세부사항은 모두 추상화한다.
내부의 구현 로직, 아키텍처와 프로그래밍 언어, DB, 품질 유지 체계와 같은 기술적인 사항들은 서비스API에 의해 철저하게 가려진다
따라서 *SOA(Service Oriented Architecture)의 특징을 다수 공통으로 가진다.
SOA - 대규모 컴퓨터 시스템을 구축할 때의 개념으로, 업무상 일 처리에 해당하는 소프트웨어 기능을 서비스로 판단하고 그 서비스를 네트워크상에 연동하여 시스템 전체를 구축해 가는 방법론이다. 업무 처리 변화를 시스템에 빠르게 반영하고자 하는 수요에 대응하기 위해 2004년부터 IT 업계에서 주목 하고 있다.
출처: https://wooaoe.tistory.com/57 [개발개발 울었다:티스토리]
소프트웨어의 구성요소가 하나로 통합되어 있는 형태이다.
쇼핑몰을 예시로 들면 장바구니, 결제, 로그인 등등을 하나의 서비스에 묶어 개발 한 형태라고 보면 된다.
- 부분 장애가 전체 서비스의 장애로 확대될 수 있다.
- 부분적인 Scale-out(여러 server로 나누어 일을 처리하는 방식)이 어렵다.
- 서비스의 변경이 어렵고, 수정 시 장애의 영향도 파익이 힘들다.(결합도가 높다.)
- 배포의 시간이 오래걸린다.
- 한 프레임워크와 언어에 종속적이다.
제대로 설계된 마이크로서비스는 하나의 비즈니스 범위에 맞춰 만들어지므로 하나의 기능만 수행한다. 즉, 어플리케이션 출시처럼 하나의 목표를 향해 일하지만 자기가 개발하는 서비스만 책임진다. 그리고 여러 어플리케이션에서 재사용할 수 있어야한다.
어플리케이션은 항상 기술 중립적 프로토콜을 사용해 통신하므로 서비스 구현 기술과는 무관하다. 따라서 마이크로서비스 기반의 어플리케이션을 다양한 언어와 기술로 구축할 수 있다는 것을 의미한다.