마이크로서비스란 무엇인가요?

Leslie Tsang

Leslie Tsang

December 14, 2022

Technology

명확히 말하자면, 모든 상황에 적합한 단일 아키텍처는 없으며, 최고나 최악의 아키텍처도 없습니다. 오직 비즈니스에 가장 적합한 아키텍처만이 존재합니다.

마이크로서비스 소개

마이크로서비스 아키텍처는 대규모 소프트웨어 시스템을 더 쉽게 개발, 배포 및 유지보수할 수 있도록 설계된 유연하고 확장 가능한 소프트웨어 아키텍처입니다.

마이크로서비스의 기본 아이디어는 대규모 소프트웨어 시스템을 여러 개의 상대적으로 독립적인 서비스로 분할하고, 각 서비스가 단일 기능에 집중하도록 하는 것입니다.

마이크로서비스 아키텍처의 서비스는 종종 네트워크를 통해 통신하는 프로세스로, HTTP나 gRPC와 같은 기술에 구애받지 않는 프로토콜을 사용하여 목표를 달성합니다. 이를 통해 다양한 비즈니스 요구를 충족하기 위해 필요에 따라 서비스를 결합할 수 있습니다.

소프트웨어 아키텍처의 진화

스타트업 아키텍처로 모놀리식 아키텍처를 사용하는 것부터 시작해 보겠습니다. 시간이 지남에 따라 비즈니스가 성장하면서 다양한 아키텍처에서 어떤 문제가 발생하는지 살펴보겠습니다.

모놀리식 아키텍처

모놀리식 아키텍처는 자체 포함형으로 설계되어, 애플리케이션의 구성 요소나 기능이 모듈식 애플리케이션처럼 느슨하게 결합된 것이 아니라 긴밀하게 결합되어 있습니다. 모놀리식 아키텍처를 사용하는 데는 많은 이점이 있기 때문에 많은 애플리케이션이 여전히 이 개발 패러다임을 사용하여 만들어지고 있습니다.

일반적인 모놀리식 애플리케이션의 배포 개요입니다. 이 설계는 의심할 여지 없이 배포를 단순하게 만들지만, 롤링 업데이트는 어려우며, 모듈이 실패할 경우 치명적일 수 있습니다.

monoliths-deploy.png

예를 들어, 모놀리식 애플리케이션은 처리량 측면에서 모듈식 애플리케이션보다 더 나은 성능을 발휘할 수 있습니다. 각 구성 요소와 관련 구성 요소의 코드가 애플리케이션을 실행하거나 컴파일하기 위해 존재해야 하기 때문에, 모놀리식 애플리케이션은 테스트와 디버깅이 더 쉬울 수 있습니다.

모놀리식 애플리케이션은 과거에 성공적이었습니다. 그러나 클라우드 시대에 들어서면서, 점점 더 많은 모놀리식 애플리케이션이 클라우드 기반 환경에 배포되면서 모놀리식 아키텍처에 대한 불만이 커지고 있습니다. 변경 주기가 함께 묶여 있어서, 애플리케이션의 작은 부분을 변경하더라도 전체 모놀리스를 다시 빌드하고 배포해야 합니다.

개발자는 각 업데이트 후에 변경된 부분만이 아니라 전체 코드베이스를 다시 컴파일하고 전체 모놀리식 애플리케이션을 다시 설치해야 합니다. 이는 지속적이거나 정기적인 배포를 어렵게 만들며, 이는 애플리케이션과 팀의 민첩성을 떨어뜨립니다.

monoliths-deploy-scale.png

시간이 지남에 따라 모놀리식 애플리케이션을 모듈화된 좋은 구조로 유지하는 것은 어려울 수 있으며, 이는 내부 모듈 하나에만 영향을 미쳐야 하는 수정 사항을 유지하는 것을 어렵게 만듭니다. 확장은 더 많은 리소스가 필요한 부분만이 아니라 전체 애플리케이션을 확장해야 합니다.

서비스 지향 아키텍처

서비스 지향 아키텍처(SOA)는 이산적이고 느슨하게 결합된 소프트웨어 에이전트로 구성된 애플리케이션을 의미하는 소프트웨어 아키텍처로, 소프트웨어 구성 요소를 재사용할 수 있도록 서비스 인터페이스를 사용하는 방법을 정의합니다. 이러한 인터페이스는 널리 사용되는 통신 프로토콜을 사용하므로, 상당한 통합 없이도 새로운 애플리케이션에 빠르게 추가할 수 있습니다.

일반적인 SOA 배포 개요입니다. 이러한 아키텍처를 사용하면 단일 서비스 실패의 영향을 효과적으로 줄일 수 있으며, 단일 서비스의 반복 속도가 증가합니다.

이러한 아키텍처는 팀 확장을 더 잘 관리할 수 있도록 하여, 각 팀이 특정 서비스 자체에 집중할 수 있게 합니다. 팀을 과거의 무거운 부담에서 해방시켜, 하나의 작업에 집중하고 올바르게 수행할 수 있게 합니다.

SOA-with-ESB-deploy.png

SOA와 모놀리식 아키텍처의 장점은 다음과 같습니다:

  • 더 나은 유지보수성: 각 서비스는 독립적인 엔티티이므로, 롤링 업데이트와 유지보수가 간단하고 다른 서비스에 위험을 주지 않습니다.
  • 더 높은 신뢰성: 모놀리식 아키텍처에서 사용되는 대규모 코드 블록은 서비스보다 디버깅과 테스트가 더 어렵습니다. 따라서 SOA 기반 제품은 더 신뢰할 수 있습니다.
  • 병렬 개발: 서비스 지향 아키텍처는 계층이 있기 때문에 개발 프로세스에서 병렬성을 촉진합니다. 독립적인 서비스를 동시에 생성하고 완료할 수 있습니다.

마이크로서비스 아키텍처

마이크로서비스 아키텍처는 애플리케이션을 구성하는 일련의 자율적인 구성 요소를 구축하는 데 초점을 맞춘 SOA의 한 형태입니다. 단일 불가분의 전체로 구축된 모놀리식 애플리케이션과 달리, 마이크로서비스 애플리케이션은 API로 결합된 여러 독립적인 구성 요소로 구성됩니다.

아키텍처의 범위는 SOA와 마이크로서비스의 주요 차이점입니다. 마이크로서비스 아키텍처는 독립적으로 운영될 수 있는 이산적인 서비스를 기반으로 하는 반면, SOA 모델은 서비스나 모듈이 전체 조직에서 공유되고 재사용될 수 있도록 합니다. 다시 말해, 마이크로서비스는 애플리케이션에 초점을 맞추는 반면, SOA는 기업 범위를 가지고 있습니다.

추가적인 차이점은 아래 차트에 요약되어 있습니다:

SOA마이크로서비스
아키텍처서비스는 기업 수준에서 재사용되고 공유됩니다.서비스는 분리되어 독립적으로 운영됩니다.
세분화상대적으로 크고 모듈화된 서비스더 작고 유연한 서비스로, 비즈니스에 특정 목적이나 기능을 제공합니다.
통신ESBAPI
결합리소스 공유/느슨한 결합경계 컨텍스트
상호 운용성Simple Object Access Protocol (SOAP), Advanced Messaging Queuing Protocol (AMQP), Microsoft Messaging Queuing (MMQ)와 같은 여러 메시지 프로토콜을 지원합니다.HTTP, Representational State Transfers (REST), Java Messaging Service (JMS)와 같은 경량의 언어에 구애받지 않는 메시징 프로토콜을 사용합니다.
데이터 거버넌스구성 요소 공유로 인해 기업 전체에 걸쳐 공통 데이터 거버넌스가 적용됩니다.서비스의 독립적인 특성으로 인해 팀 간에 일관된 데이터 거버넌스가 없습니다.
저장소주어진 애플리케이션 내의 모든 서비스가 공유하는 단일 데이터 저장소 계층각 서비스에 필요한 독립적인 데이터 서버 또는 데이터베이스를 사용합니다.

일반적인 마이크로서비스 배포 개요

microservice-deploy.png

모놀리식 아키텍처와 마이크로서비스 아키텍처의 확장 전략

Monoliths-and-microservices.png

더 자세히 읽어보려면 https://martinfowler.com/articles/microservices.html

모놀리식 아키텍처와 비교하여, 마이크로서비스 아키텍처는 반복적인 개발 방법론과 애자일 방법에 더 유연합니다. 다양한 구성 요소 간의 느슨한 상호작용으로 인해, 더 확장 가능하고 별도로 테스트할 수 있습니다. 또한, 모듈은 각자의 데이터베이스를 가지고 서로 통신하며, 프로그램 시작 속도를 높입니다.

마이크로서비스가 필요한 이유

마이크로서비스를 활용하면 개발 배포 주기의 효율성을 크게 높이고 프로세스의 민첩성을 증가시킬 수 있습니다. DevOps와 마이크로서비스의 결합은 변경 사항과 새로운 기능의 배포 속도를 높입니다. 마이크로서비스는 일반적인 대규모 소프트웨어 개발 프로젝트보다 더 빠르게 구축할 수 있으며, 변경 사항을 관리하는 것이 더 쉽고 빠릅니다.

마이크로서비스의 변경은 모놀리식 애플리케이션보다 더 유연하고 원활합니다. 마이크로서비스 개발 프로세스에는 모놀리식 애플리케이션에서와 같은 폭포수 모델이 없습니다. 각 마이크로서비스는 독립적이며, 어떤 프로그래밍 언어나 구조로도 개발할 수 있습니다.

마이크로서비스의 실패는 대규모 시스템의 실패보다 덜 심각합니다. 모놀리식 애플리케이션의 한 부분에서의 실패는 일반적으로 전체 시스템에 큰 부정적인 영향을 미칩니다. 마이크로서비스 설계에서는 문제를 더 빠르고 쉽게 해결할 수 있습니다. 문제를 인식하고, 격리하고, 보상합니다. 마이크로서비스를 사용하는 아키텍처라면, 성능 장벽을 극복하기 위해 마이크로서비스를 확장할 수 있습니다. 모놀리식 애플리케이션의 운영 폭포수를 피하기 위해, 결함이 있는 마이크로서비스의 새 버전을 신속하게 생성할 수 있습니다.

마이크로서비스의 장점

전통적인 아키텍처에 비해 마이크로서비스의 장점은 다음과 같습니다.

  • 모듈성: 대규모 소프트웨어 시스템을 여러 상대적으로 독립적인 서비스로 분할하고, 각 서비스가 특정 기능을 수행하도록 합니다. 이를 통해 다양한 비즈니스 요구를 충족하기 위해 필요에 따라 서비스를 결합할 수 있습니다.
  • 확장성: 마이크로서비스 아키텍처의 중요한 장점은 확장성입니다. 각 서비스가 상대적으로 독립적이기 때문에, 실제 필요에 따라 각 서비스를 동적으로 확장하거나 축소할 수 있습니다. 이는 비즈니스 트래픽의 변동에 더 잘 대처할 수 있게 합니다.
  • 배포성: 마이크로서비스 아키텍처는 각 서비스를 독립적으로 유연하게 배포할 수 있게 합니다. 이를 통해 새로운 기능을 더 빠르게 배포할 수 있고, 전체 시스템에 영향을 주지 않고 빠르게 반복할 수 있습니다.
  • 확장 용이성: 마이크로서비스 아키텍처는 각 서비스에 단일 책임과 기능을 부여합니다. 이러한 아키텍처 하에서, 마이크로서비스는 전통적인 소프트웨어 아키텍처의 모듈보다 업데이트와 재구성이 더 쉽고, 단일 서비스 실패의 영향 범위를 관리할 수 있습니다.
  • 유지보수 용이성: 마이크로서비스 아키텍처는 각 서비스를 더 작게 만들고 특정 기능만 수행하도록 합니다. 이는 유지보수를 더 쉽게 하고, 고장 수리를 더 빠르게 할 수 있게 합니다.
  • 기술적 이질성: 마이크로서비스 아키텍처는 각 서비스가 특정 기술 스택에 제한되지 않게 합니다. 서비스 간의 데이터 상호작용은 표준화된 인터페이스를 통해 이루어질 수 있으며, 현재 서비스 시나리오에 가장 적합한 기술 스택을 사용하여 서비스를 개발하여 최적의 솔루션을 달성할 수 있습니다.

요약

소프트웨어 아키텍처는 변화하는 요구 사항에 대응하기 위해 진화해 왔으며, 종종 새로운 관심사를 통합합니다. 마이크로서비스 아키텍처는 클라우드 네이티브 시대에 점점 더 인기를 얻고 있습니다. 더 나은 마이크로서비스 아키텍처를 구축하려면 APISIX, 최고의 API 게이트웨이, 그리고 API7.ai를 방문하여 더 많은 상업적 지원을 받으십시오.

Tags: