Micro Service

조영래·2022년 6월 27일
0

Micro Service란?

마이크로서비스는 소프트웨어가 잘 정의된 API를 통해 통신하는 소규모의 독립적인 서비스로 구성되어 있는 경우의 소프트웨어 개발을 위한 아키텍처 및 조직적 접근 방식

모놀리식 아키텍처와 마이크로서비스 아키텍처 비교

Monilith
모놀리식 아키텍처의 경우 모든 프로세스가 긴밀하게 결합되고 단일 서비스로 실행된다. 따라서 애플리케이션의 한 프로세스에 대한 수요가 급증하면 해당 아키텍처 전체를 확장해야하기 때문에 코드 베이스가 증가하게 되며, 모놀리식 애플리케이션의 기능을 추가하거나 개선하기가 더 복잡해진다. 또한 이러한 복잡성으로 인해 실험에 제한을 받고 새로운 아이디어를 구현하기가 어려워진다.

MSA
마이크로서비스 아키텍처의 경우, 애플리케이션이 독립적인 구성 요소로 구축되어 각 애플리케이션 프로세스가 서비스로 실행된다. 이러한 서비스는 경량 API를 사용하여 잘 정의된 인터페이스를 통해 통신을하고 서비스는 비즈니스 기능을 위해 구축되며 서비스마다 한 가지 기능을 수행한다. 그 결과 서비스가 독립적으로 실행되기 때문에 애플리케이션의 특정 기능에 대한 수요를 충족하도록 각각의 서비스를 업데이트, 배포 및 확장할 수 있다.

장점

1. 민첩성
마이크로서비스는 해당 서비스를 소유한 독립적인 소규모 팀 조직을 육성하는 역할을 합니다. 팀은 충분한 이해를 바탕으로 하는 소규모 컨텍스트 내에서 활동하며 더 독립적이면서 신속하게 업무를 수행할 수 있다.

2. 유연한 확장성
마이크로서비스의 경우 각 서비스가 지원하는 애플리케이션 기능의 수요를 충족하도록 해당 서비스를 독립적으로 확장할 수 있다.

3. 손쉬운 배포
마이크로서비스는 지속적 통합 및 지속적 전달을 통해 새로운 아이디어를 손쉽게 시험하고 문제가 발생할 경우 간단히 롤백할 수 있게 해준다.

4. 기술적 자유
마이크로서비스 아키텍처는 “모든 규모에 부합하는” 접근 방식을 추구하지 않는다. 팀은 특정한 문제를 해결하는 데 가장 적합한 도구를 자유롭게 선택할 수 있다.

5. 재사용 가능한 코드
소프트웨어를 잘 정의된 소규모 모듈로 분할하면 팀이 기능을 여러 용도로 사용할 수 있다.

문제점

1. 개발 복잡도와 숙련도
분산 시스템 개발은 일반 개발보다 복잡하다. 독립적인 서비스이기 때문에 각 모듈의 인터페이스를 신중하게 처리해야 한다. 요청에 응답하지 않게 될 경우에 대한 방어 코드도 작성해야 하며 호출 대기 시간이 일정 수준을 넘기면 복잡한 상황이 발생할 수 있다. 또한 동기적인 처리방식인 REST 통신으로 인한 제약이 발생할 수 있다.

2. 어려운 트랜잭션 관리
마이크로 서비스 세상은 분산 환경이기 때문에 강력한 트랜잭션 일관성을 제공하기 힘들다. 최종적인 일관성 제공을 위한 보상 트랜잭션 패턴과 같은 메커니즘이 필요하다. 정말 트랜잭션 무결성이 필요한 상황을 처리하기 매우 어려울 수 있으며, 이를 해결하기 위한 메커니즘을 구현하는데 큰 비용이 발생할 수 있다.

3. 통합 테스트 어려움
MSA 기반의 애플리케이션을 테스트하는 것은 번거로울 수 있다. 테스트를 시작하기 전에 의존성이 있는 서비스를 미리 확인해야 한다.

4. 시스템의 복잡성
독립적인 서비스들에 의해 시스템이 구성되어 있고 서비스들간의 협업을 통해 비즈니스가 처리되다보니 시스템이 복잡하다.

참조
https://junhyunny.github.io/msa/msa-pros-and-cons/
https://aws.amazon.com/ko/microservices/

profile
난될놈이야

0개의 댓글