프로그래밍 기초

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

hs-archive 2023. 6. 19. 14:41

마이크로서비스 아키텍처(MSA, Microservice Architecture)란

마이크로서비스 아키텍처(MSA, Microservice Architecture)는 소프트웨어 개발 기법입니다. 모든 아키텍처는 기존에 존재하는 어떠한 문제를 해결하기 위해 만들어집니다. 이에 근거하여 마이크로서비스 아키텍처 또한, 어떠한 문제를 해결하기 위해 만들어진 아키텍처입니다. 마이크로서비스 아키텍처는 흔히 모놀리식 아키텍처(Monolithic Architecture)의 문제를 해결하기 위해 사용됩니다.

 

따라서, 마이크로서비스 아키텍처를 알아보기 위해 이 글에서는 1)모놀리식 아키텍처가 무엇인지 알아보고, 2)마이크로 서비스 아키텍처를 알아본 뒤, 3)각각의 장단점을 비교하는 시간을 갖겠습니다.

 

모놀리식 아키텍처(Monolithic Architecture)

 

모놀리식 아키텍처

모놀리식 아키텍처는 하나의 큰 애플리케이션으로 구성된 전통적인 아키텍처 스타일입니다. 이 아키텍처에서는 모든 기능과 컴포넌트가 하나의 단일한 코드 베이스 안에 포함되어 있습니다. 모든 코드는 같은 프로세스에서 실행되며, 데이터베이스나 파일 시스템과 같은 공유된 리소스에 직접 접근합니다.

 

모놀리식 아키텍처는 단순하고 직관적인 구조를 가지며, 개발과 배포가 비교적 간단합니다. 코드 간의 호출이 로컬이므로 성능도 빠르고 효율적입니다. 또한 전체 시스템을 관리하기 용이합니다.

 

하지만 모놀리식 아키텍처는 모든 코드가 하나의 코드 베이스에 포함되므로, 큰 규모의 애플리케이션에서는  복잡성이 증가할 수 있습니다. 또한 모놀리식 아키텍처에서는 하나의 컴포넌트의 장애가 전체 시스템에 영향을 미칠 수 있으며, 기능 간의 의존성이 높아 유연성과 확장성이 제한될 수 있습니다.

 

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

마이크로서비스 아키텍처

마이크로서비스 아키텍처는 애플리케이션을 작고 독립적인 작은 서비스로 나누는 아키텍처 스타일입니다. 각각의 서비스는 특정한 기능을 수행하고, 자체적으로 독립적으로 실행될 수 있습니다. 이 서비스들은 서로 통신하며 필요한 기능을 제공하고, 전체적으로 큰 애플리케이션을 이루게 됩니다.

 

마이크로서비스 아키텍처에서는 각 서비스가 독립적으로 실행되기 때문에 서비스 단위로 개발하고 배포할 수 있고, 이를 통해 변경이 필요한 서비스만 수정하고 배포할 수 있게 되므로 시스템 전체에 영향을 덜 주게 됩니다. 또한 각 서비스가 독립적으로 실행되므로 해당 서비스만 scale-out 할 수도 있습니다. 또한, 각 서비스가 작고 관리하기 쉽기 때문에 개발팀들이 서로 독립적으로 작업을 진행할 수 있어서 협업이 용이합니다.

 

하지만 마이크로서비스 아키텍처는 서비스 간 통신이 필요하기 때문에 네트워크 부하가 증가할 수 있고, 분산 시스템을 구축하는 데 추가적인 노력이 필요합니다. 예를 들어, 각 서비스가 따로 분산되어 있어 각 서버의 URL이 다르므로 이를 일원화하기 위해 API Gateway를 사용해야 하고, 서버가 여러 개이므로 관리해야 하는 서버의 환경변수 또한 여러 개이며, 여러 서비스별 로그를 중앙집중화하며 한 곳에서 파악할 수 있도록 해야 하고, 마이크로서비스 간의 호출을 추적할 수 있어야 합니다. 한마디로 인프라적인 부담이 늘어납니다.

 

장단점 비교

모놀리식 아키텍처

장점

  • 작은 규모의 애플리케이션에서는 개발과 배포가 간단하고 단순합니다.
  • 단일 코드 베이스로 관리되기 때문에 마이크로서비스에 비해 인프라 설정이 쉽습니다.
  • 서비스 간 호출이 없으므로 네트워크 지연이 없고 성능이 좋을 수 있습니다.

 

단점

  • 큰 규모의 애플리케이션에서는 개발과 배포가 복잡해질 수 있습니다.
  • 변경 사항이 전체 시스템에 영향을 주기 때문에 확장성과 유연성이 제한될 수 있습니다.
  • 서비스 간 결합도가 높아져 특정 기능의 수정이 다른 기능에도 영향을 미칠 수 있습니다.

 

마이크로서비스 아키텍처

장점

  • 각 서비스가 독립적으로 실행되기 때문에 개발과 배포가 유연하고 빠르게 이루어질 수 있습니다.
  • 각 서비스를 독립적으로 확장하고 관리할 수 있어 시스템 전체의 확장성과 견고성을 높일 수 있습니다.
  • 서비스 간 결합도가 낮아져 특정 기능의 수정이 다른 기능에 미치는 영향이 제한됩니다.

 

단점

  • 서비스 간 통신과 분산 시스템 관리가 복잡해질 수 있습니다.
  • 서비스마다 독립적인 배포와 운영을 위한 추가적인 관리 작업이 필요합니다.
  • 전체 시스템의 이해와 통합 테스트가 어려울 수 있습니다.

 

 

정리하자면, 이러한 장단점과 현재 애플리케이션의 규모, 복잡성, 확장성, 개발 및 운영의 요구사항을 고려하여 상황에 적합한 아키텍처를 선택해야 합니다. 작은 규모 혹은 MSA의 필요성을 느끼지 못할 정도의 규모에서 굳이 MSA로 전환할 필요는 없습니다. 위 trade-off를 고려하여 상황에 적합한 아키텍처를 선택하는 것이 중요합니다.

 

 

 

 

 


https://www.youtube.com/watch?v=8d4h7K_Fq-0