마이크로서비스 아키텍처는 최근 분산 컴퓨팅과 클라우드 기반 서비스가 일반화 되면서 데브옵스 기반 개발 문화의 변화와 필연적으로 조우한다. 마이크로 서비스는 분산 시스템에 대한 접근 방식으로 각자의 생명주기를 가지고 협력하는 세분화한 서비스 사용을 장려한다.  미시적인 컴퓨터 프로그래밍 부문에서 리팩토링이 기술 부채를 줄이는 수단이라면, 거시적인 서비스 개발과 운영부문에서는 마이크로서비스가 기술 부채를 줄이는 강력한 수단이다.


1. 마이크로서비스란 

: 작고 자율적으로 협업하는 서비스 

1.1 작고, 한 가지 일을 잘하는 데 주력

코드베이스는 새로운 기능을 추가하면서 성장하지만 시간이 지날수록 방대해져서 어디를 변경해야 할지 파악하기 어려워지며, 중간 경계의 어딘가가 빈번히 무너지기 시작하고, 버그를 고치거나 어려운 구현을 하는 과정에서 유사한 기능과 연관된 코드가 곳곳으로 퍼저나간다. 모놀리식 시스템에서 코드를 더 응집하고, 추상화 또는 모듈화 해야한다. 응집력, 즉 관련된 코드들을 함께 그룹화하려는 힘은 마이크로서비스의 중요한 개념이다. 같은 이유로 변경되는 것들은 한데 모으고, 서로 다른 이유로 변경되는 것들은 분리하라는 단일 책임을 강조한다.

그렇다면 얼마나 작아야 하는 것인가? 충분히 작아서 더 이상 작아질 수 없는 크기이다. 서비스가 작아질수록 마이크로서비스 아키텍처의 혜택과 단점은 더 극대화 되며, 서비스를 작게 만들수록 상호의존성에 대한 문제는 줄어든다. 

1.2 자율성 

서비스 간의 분산도를 높이고 이 서비스 들은 독립적으로 변경, 배포 될 수 있어야 한다. 황금률은 다른 변경 없이 특정 서비스만 변경하고 배포할 수 있는가? 이다. 구현 방식에 영향을 받지 않는 좋은 API가 중요하다. 


2. 주요혜택

2.1 기술 이기종성

다수의 협업 서비스로 구성된 시스템에서는 각 서비스가 다른 기술을 사용하도록 결정할 수 있다. 

2.2 회복성

한 시스템의 컴포넌트에 장애가 발생하더라도 그 장애가 전파되지 않는다면 해당 문제를 격리하고 나머지 시스템을 계속 작동시킬 수 있다. 

2.3 확장성

작은 서비스들로 구성되어 있다면 필요한 서비스만 골라 확장시킬 수 있다.

2.4 배포 용이성

배포시에도 나머지 시스템과 독립적으로 배포, 수정이 가능하다. 

2.5 조직 부합성

아키텍처를 조직 구조에 맞게 더 적절히 정렬할 수 있고 최적의 팀 크기와 생산성을 위해 하나의 코드베이스에서 일하는 인원을 최소화할 수 있다. 

2.6 조합성

다양한 방법과 목적으로 우리가 제공하는 기능이 소비되도록 할 수있다. 기능을 재사용할 기회가 많다. 데스크탑 웹사이트나 모바일 어플리케이션에 국한해서 생각하는 시대는 지났다. 이제 우리는 웹, 네이티브 앱, 모바일 앱, 테블릿 앱이나 웨어러블 장치를 위한 기능들을 함께 엮을 무궁무진한 방법을 고민해야 한다. 조직이 고객과의 좁은 채널에서 멋어나 곡앵이 직접 참여하는 더 포괄적인 개념을 고려하게 된 만큼 이를 지원할 수 있는 아키텍처가 필요하다. 

2.7 대체 가능성을 위한 최적화 

마이크로서비스 방식을 사용한느 팀은 필요할 경우 서비스를 완전히 재작성하는 것을 편하게 생각하며, 서비스가 더 이상 필요치 않으면 쉽게 제거할 수 있다. 코드베이스가 단지 볓 백 줄 규모일 때 개발자들은 자기가 쓴 코드이더라도 집착하지 않으며 교체 비용 또한 매우 적다. 


3. 서비스 지향 아키텍처란

서비스의 최종 능력 집합을 제공하는 여러 서비스가 서로 협업하도록 하는 설계 접근 방식이다. 여기서 서비스린 일반적으로 완전히 분리된 운영시스템의 프로세스를 의미하며, 서비스 간 통신은 네트워크 호출로 이루어진다. 마이크로서비스는 서비스 지향 아키텍저에 대한 특정 접근법으로 보아야 한다. 


4. 기타 분해 기술

4.1 공유 라이브러리

4.2 모듈 



+ Recent posts