마이크로서비스(microservice)는 서비스를 단일 보다 분할하는 형태를 가지는 소프트웨어 개발 기법이다. Ex 각 애플리케이션 프로세스가 독립 서비스로 실행되고 서비스마다 한 가지 기능을 수행한다.
마이크로서비스는 정의된 API를 통해 통신하는 소규모의 독립적인 서비스로 구성되는 소프트웨어 개발을 위한 아키텍처 및 조직적 접근 방식이다.
애플리케이션을 느슨하게 결합된 서비스의 모임으로 구조화하는 서비스 지향 아키텍처(SOA)로 볼 수 있다.
마이크로서비스 아키텍처의 반대는
모놀리식 아키텍처다
모놀리식 아키텍처의 경우 모든 프로세스가 긴밀하게 결합되고 단일 서비스로 실행된다.
애플리케이션의 한 프로세스에 대한 수요가 급증하면 해당 아키텍처 전체를 확장해야 한다. 코드 규모가 증가하게 되면 모놀리식 애플리케이션은 기능을 추가하거나 개선하기가 더 복잡해진다.
마이크로서비스 특징
- 애플리케이션의 배포 확장 용이.
- 서버스마다 독립 실행. 애플리케이션의 특정 기능에 대한 수요를 충족하도록 각각의 서비스를 업데이트, 배포 및 확장에 유리.
- 소규모 팀으로 분할.
- 새로운 유형의 기능 도입에 유리. 새로운 아이디어를 구현하기가 유리하다.
- 자율성
독립된 다른 서비스의 기능에 영향을 주지 않으면서 개발, 배포, 운영하고 확장할 수 있다. 코드 또는 구현을 다른 서비스와 공유할 필요는 없다. 개별 구성 요소 간의 통신은 잘 정의된 API를 통해 이루어진다.
- 전문성
각 서비스는 일련의 기능을 위해 설계되며 특정 문제를 해결하는 데 중점을 둔다. 시간이 지남에 따라 서비스에 더 많은 코드를 제공하여 서비스가 복잡해지면 더 작은 서비스로 분할할 수 있다.
- 민첩성
필요에 띠라 독립적인 소규모 팀 조직을 집중 육성 가능.
- 유연한 확장성
독립적인 팀은 필요한 인프라의 규모를 적절히 조절하고, 기능의 비용을 정확하게 측정하고, 서비스의 수요가 급증하는 경우에도 가용성을 유지할 수 있다.
- 기술적 자유
팀은 특정한 문제를 해결하는 데 가장 적합한 도구를 자유롭게 선택할 수 있다.
마이크로서비스 문제
- 자원 효율성
- 재사용 가능한 코드
소규모 모듈로 분할하여 개선 접근.
- 안정성
서비스가 독립적이다. 많은 단일 구성 요소 중 하나라도 실패하는 경우 전체 연관 서비스가 실패하게 될 수 있다. 마이크로서비스에서는 기능을 저하시키고 전체 애플리케이션을 충돌시키지 않는 방식으로 전체 서비스 실패를 처리해야 한다.