본문 바로가기
이론/IT

마이크로 서비스 아키텍처 (MSA)

by 프로그래밍 공부 2023. 11. 9.

 마이크로 서비스 아키텍처(MSA)는 독립적으로 배포 가능한 각각의 기능을 마이크로하게 나눠 

독립적인 서비스로 연결하는 구조로 생각할 수 있다.

 

MSA는 기존의 모놀리식 아키텍처(Monolithic Architecture)의 한계점을 보완하기 위해 등장하게 됐다.

여기서 모놀리식 아키텍처란 모든 구성요소가 한 프로젝트에 통합되어 있는 형태의 아키텍처를 말한다.

 

모놀리식 아키텍처는 하나의 코드 베이스를 사용하여 여러 비즈니스 기능을 수행하는 전통적인 소프트웨어 개발 모델이다. 또한 모든 소프트웨어 구성 요소는 시스템 내의 데이터 교환 매커니즘으로 인해서 상호 의존적인 성질이 있다. 이로 인해서 작은 변경 사항에도 코드 베이스의 넓은 영역에 영향을 미치기 때문에 모놀리식 아키텍처를 수정할 때는 제한이 많고 시간도 많이 소요된다.

반면에 MSA는 소프트웨어를 작은 독립 구성 요소, 또는 서비스로 구성하는 아키텍처 접근 방식이기 때문에 각 서비스가 하나의 기능을 수행하고, 잘 정의된 인터페이스를 통해 다른 서비스와 통신하는 등의 구조를 가진다. 또한 각 요소는 독립되어 있기 때문에 필요에 따라 각 서비스를 업데이트, 수정, 배포하는 데 유리하다.

모놀리식과 마이크로서비스 비교 - 소프트웨어 개발 아키텍처의 차이 - AWS (amazon.com)

 

모놀리식과 마이크로서비스 비교 - 소프트웨어 개발 아키텍처의 차이 - AWS

마이크로서비스는 더 빠르게 혁신하고, 위험을 낮추고, 출시를 가속화하며, 총 소유 비용을 줄이는 데 도움이 됩니다. 마이크로서비스 아키텍처의 운영상 이점을 요약하면 다음과 같습니다. 더

aws.amazon.com

 

아마존에서 모놀리식 아키텍처와 마이크로 서비스 아키텍처의 차이점에 대해 잘 정리해 주었다.

1. 개발 프로세스의 차이

모놀리식 어플리케이션은 사전 계획이 많이 필요하지 않아 시작하기가 쉽다. 또한 시작한 후에도 필요에 따라 코드 모듈을 추가적으로 구성할 수 있다. 하지만 이는 시간이 지남에 따라 해당 어플리케이션을 복잡하게 만들고, 이로 인해 업데이트 등이 어려워지는 결과를 낳게 된다.

반면에 마이크로 서비스 기반 어플리케이션은 시작하기 전에 많은 계획과 설계를 필요로 한다. 독립적으로 작동 가능한 다양한 기능을 판단하고, 일관된 API를 계획해야 한다. 하지만 이를 통해 코드를 훨씬 더 효율적으로 유지 및 관리할 수 있고, 빠르게 변경하고 버그를 보다 수월하게 찾아낼 수 있으며, 더 나아가 코드 재사용성 또한 시간이 지남에 따라 더더욱 증가하게 된다.

2. 배포의 차이

모놀리식 어플리케이션은 마이크로 서비스 어플리케이션보다 배포가 간단하다. 전체 어플리케이션의 코드 베이스와 종속성이 단일 환경에 설치되기 때문이다.

반대로 마이크로 서비스 기반 어플리케이션은 보다 복잡하다. 각 마이크로 서비스는 독립적으로 배포 가능한 소프트웨어 패키지이기 때문에 일반적으로 컨테이너화된 후 배포된다. 이로 인해 각 컨테이너는 마이크로 서비스의 코드 및 관련 종속성을 패키징하여 플랫폼 독립성을 유지한다.

여기서 컨테이너화란 어플리케이션의 코드를 모든 인프라에서 실행하는 데 필요한 모든 파일 및 라이브러리를 함께 번들로 제공하는 소프트웨어 배포 프로세스이다. 이는 추후에 다시 공부해보고 다시 MSA와 모놀리식 아키텍처의 차이점에 대해 알아보자.

3. 디버깅의 차이

모놀리식 아키텍처를 디버깅할 때는 동일한 프로그래밍 환경 내에서 데이터 이동을 추적하거나 코드 동작을 검사할 수 있다. 

반면에 마이크로 서비스 아키텍처에서는 코딩 문제를 식별하려면 느슨하게 결합된 여러 개별 서비스를 살펴봐야 한다. 여기서 문제인 것은, 다양한 마이크로 서비스를 담당하는 개발자가 한 명이 아니라 여러 명일 수 있기 때문에, 마이크로 서비스 어플리케이션을 디버깅하는 것이 더 어려울 수 있다는 것이다. 예를 들면 디버깅을 하기 위해서 팀 구성원 간에 조정된 테스트, 논의 및 피드백이 필요할 수 있고, 이 과정에서 보다 많은 시간과 리소스가 필요할 수 있기 때문이다. 

4. 수정의 차이

디버깅과는 반대로, 모놀리식 어플리케이션에서의 수정은 MSA 어플리케이션보다 유연하지 못하다. 모놀리식 어플리케이션은 코딩이 긴밀하게 결합되어 있기 때문에 한 부분을 조금만 변경해도 여러 소프트웨어 기능이 영향을 받는다. 이로 인해 새로운 변경 사항을 도입할 때는 전체 시스템을 다시 테스트한 후, 서버에 다시 배포해야하는 번거로운 과정을 거쳐야 한다.

반면에 MSA 어플리케이션은 보다 유연하다. 모놀리식 어플리케이션처럼 모든 서비스를 수정하는 대신 특정 기능만 변경하면 된다. 또한 이렇게 수정한 특정 서비스를 독립적으로 배포할 수 있다. 이렇게 MSA 접근 방식은 시스템 안정성에 미치는 영향 없이, 작은 변경 사항을 자주 수행하는 지속적인 배포 워크 플로우에 적합하다. 

5. 크기의 조정 차이

모놀리식 어플리케이션은 크기를 조정할 때 몇 가지 문제가 발생한다. 단일 코드 베이스 내에서 모든 기능을 포함하므로 요구 사항이 변경되면 전체 어플리케이션의 크기를 조정할 수 밖에 없다. 예를 들면 통신 기능에 트래픽이 급증하여 어플리케이션 성능이 저하되는 경우, 컴퓨팅 리소스를 늘려 전체 모놀리식 어플리케이션을 수용해야 한다. 그러나 어플리케이션의 모든 부분이 최대 용량에 도달하는 것은 아니기에 특정 부분을 제외한다면 리소스가 낭비될 수 있다. 

반면에 MSA 어플리케이션은 각 소프트웨어 구성 요소가 분산 시스템에서 자체 컴퓨팅 리소스를 할당 받는다. 이 리소스는 현재 용량 및 예측된 수요에 따라서 독립적으로 조정이 가능하기에 보다 유연하다. 예를 들면 전체 시스템 대신에 지리적 위치 서비스를 제공하는 부분에 더 많은 리소스를 할당할 수 있는 것이다. 

 

MSA의 장점

1. 더 빠른 혁신

MSA는 다양한 프레임 워크 및 소프트 웨어 기술을 사용하여 각각의 독립적인 소프트웨어를 구성할 수 있다. MSA의 느슨한 결합과 같은 특성 때문에 특정 구성 요소를 더 빠르게 혁신시킬 수 있는 것이다.

2. 위험 감소

모놀리식 어플리케이션은 코드베이스의 사소한 오류로 인해 전체 어플리케이션에서 장애가 발생할 수 있다. 반면에 MSA는 특정 기능에서 장애가 발생해도 다른 기능들은 독립적으로 운영되기에 서로 미치는 영향이 제한된다. 이를 통해 해당 장애를 빠르게 수정하고 복구할 수 있고, 다양한 도구를 통해 영향을 미치는 문제를 사전 예방 및 수정할 수 있다.

3. 출시 기간 단축

MSA는 분산 소프트웨어 아키텍처에서 각 개발자가 큰 코드 대신에 작은 코드에 집중할 수 있기에 특정 마이크로 서비스를 만들 때 다른 마이크로 서비스가 어떻게 작동하는지 이해할 필요가 없다. 이로 인해서 더 빠르고 쉽게 서비스를 개발하고 배포할 수 있는 것이다.

4. 총 소유 비용 절감

MSA는 장기적으로 봤을 때 비용 효율적이다. 필요에 따라 컴퓨팅 리소스를 추가하여 수평적으로 확장할 수 있기 때문이다. 전체 어플리케이션 대신에 개별 서비스에 대한 리소스만 추가하면 되기에 어플리케이션의 메모리와 처리 파워를 전체적으로 업그레이드해야 하는 모놀리식 아키텍처보다 효율적인 것이다. 

'이론 > IT' 카테고리의 다른 글

프로비저닝  (0) 2023.11.11
IT 거버넌스  (0) 2023.11.11
클라우드의 장점과 고려 사항  (0) 2023.11.11
클라우드란?  (0) 2023.11.11
컨테이너화  (0) 2023.11.09