마이크로서비스 설계 패턴이란 무엇인가요?

일터에서 한 명은 코드나 데이터를 표시하는 노트북 화면을 가리키고 다른 한 명은 지켜보고 있는 두 명의 여성.

작성자

Stephanie Susnjara

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

마이크로서비스 설계 패턴이란 무엇인가요?

마이크로서비스 설계 패턴은 단일 애플리케이션을 더 작은 구성 요소 또는 서비스로 나누는 접근 방식인 마이크로서비스 아키텍처를 사용하며, 소프트웨어 구축 전략으로 사용됩니다.

이러한 아키텍처 패턴은 서비스 통신, 데이터 일관성, 내결함성 및 시스템 확장성 등 개발팀이 분산 컴퓨팅 시스템을 구현할 때 직면하는 일상적인 문제에 대해 표준화된 솔루션을 제공합니다.

오늘날 전 세계가 의존하는 디지털 경험 중 대부분은 마이크로서비스 설계 패턴을 통해 실현되었으며, 많은 실제 사용 사례에서 볼 수 있습니다. 예를 들어, Netflix에서 프로그램을 스트리밍하는 경우 수백 개의 개별 서비스가 협력하여 콘텐츠를 전달하고, 사용자 프로필을 관리하고, 다음에 무엇을 볼지 제안하게 됩니다.

마찬가지로 Amazon은 별도의 서비스를 통해 재고, 결제 및 배송을 조정합니다. 금융 산업에서 은행 및 기타 기관도 마이크로서비스 설계 패턴에 의존하여 위험 관리와 고객 서비스를 분리해 자금을 안전하게 보호하고 액세스할 수 있도록 합니다.

IBM의 '기업 내 마이크로서비스'(2021년) 설문조사에 따르면, 조직의 88%가 마이크로서비스가 개발팀에 많은 이점을 제공한다고 보고했습니다. 이러한 이점에는 더 나은 코드 정리, 보다 쉬운 유지 관리 및 더 빠른 배포 주기로 인한 개발자 생산성 20~50% 증가가 포함됩니다.

전문가의 인사이트를 바탕으로 한 최신 기술 뉴스

Think 뉴스레터를 통해 AI, 자동화, 데이터 등 가장 중요하고 흥미로운 업계 동향에 대한 최신 소식을 받아보세요. IBM 개인정보 보호정책을 참조하세요.

감사합니다! 구독이 완료되었습니다.

구독한 뉴스레터는 영어로 제공됩니다. 모든 뉴스레터에는 구독 취소 링크가 있습니다. 여기에서 구독을 관리하거나 취소할 수 있습니다. 자세한 정보는 IBM 개인정보 보호정책을 참조하세요.

마이크로서비스란?

마이크로서비스 아키텍처는 애플리케이션을 느슨하게 결합된 독립적인 서비스로 분할하여 Kubernetes 와 같은 오케스트레이션 플랫폼에서 관리하는 컨테이너에 배포하는 클라우드 네이티브 방법입니다.

각 서비스는 전용 데이터베이스데이터 관리 모델을 포함한 자체 기술 스택으로 독립적으로 운영됩니다. 서비스 간 통신은 REST API, 이벤트 스트리밍 플랫폼(예:Apache Kafka) 및 메시지 브로커를 통해 이루어지며, 팀은 경계 컨텍스트라는 명확한 경계를 통해 비즈니스 기능을 중심으로 서비스를 설계합니다.

소프트웨어 개발에 대한 이러한 최신 접근 방식은 DevOps 자동화 및 CI/CD 파이프라인, 클라우드 마이그레이션 , 애플리케이션 현대화인공 지능(AI) 통합과 같은 최신 디지털 혁신 이니셔티브에 필요한 운영 유연성을 지원합니다.

microservices

마이크로서비스란?

이 영상에서는 Dan Bettinger가 마이크로서비스에 대한 전체적인 개요를 설명합니다. Dan은 샘플 티켓팅 애플리케이션의 예시를 살펴보면서 마이크로서비스 애플리케이션 아키텍처와 기존 유형의 모놀리식 아키텍처를 비교하여 마이크로서비스의 무수한 장점과 모놀리식의 문제에 대한 해결책을 제시합니다.

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

마이크로서비스는 최신 애플리케이션에 상당한 이점을 제공하지만, 이 아키텍처를 선택해야 하는 시기를 이해하려면 기존의 모놀리식 접근 방식과 비교해야 합니다.

모놀리식 아키텍처는 모든 비즈니스 기능이 통합되어 동일한 코드베이스, 데이터베이스 및 런타임 환경을 공유하는 단일 배포 가능한 단위로 애플리케이션을 구축합니다. 마이크로서비스 아키텍처는 애플리케이션을 잘 정의된 API (애플리케이션 프로그래밍 인터페이스)를 통해 통신하는 작고 독립적인 서비스로 나눕니다. 각 서비스에는 자체적인 데이터베이스 및 배포 주기가 있을 수 있습니다.

이러한 설계 방법의 주된 차이점은 결합, 즉 시스템의 여러 부분이 얼마나 긴밀하게 연결되어 있는지입니다. 모놀리스는 내부 결합이 강하지만 배포가 간단한 반면, 마이크로서비스는 서비스 간 결합이 느슨하지만 IT 인프라 요구 사항이 더 복잡합니다.

많은 경우 소프트웨어 엔지니어는 비용을 제어하고 개발 속도를 높이려는 중소기업이나 스타트업의 보다 규모가 작고 단순한 애플리케이션을 위해 모놀리식 아키텍처를 선택합니다. 높은 확장성, 탄력성 및 유연성이 필요한 복잡한 시나리오(예: 소셜 미디어 플랫폼, 뱅킹 애플리케이션)의 경우 마이크로서비스가 더 나은 선택입니다.

조직은 어떤 접근 방식을 취할지 결정할 때 팀 규모, 애플리케이션 복잡성, 확장성 요구 사항, DevOps 성숙도 수준과 같은 특정 요구 사항에 따라 각 접근 방식을 평가해야 합니다.

모놀리식 아키텍처와 마이크로서비스에 대해 자세히 알아보기

마이크로서비스 설계 패턴의 유형

마이크로서비스 설계 패턴은 팀이 분산 아키텍처 문제를 해결하는 데 도움이 되는 테스트된 솔루션을 제공하는 다음 5가지 주요 영역에 걸쳐 있습니다.

  1. 서비스 커뮤니케이션 및 검색
  2. 데이터 및 트랜잭션 관리
  3. 복원력 및 결함 처리
  4. 아키텍처 및 통합
  5. 이벤트 및 커뮤니케이션

1. 서비스 커뮤니케이션 및 검색

서비스 레지스트리 패턴

서비스 레지스트리 패턴은 서비스가 엔드포인트 및 상황을 등록하는 중앙 디렉터리를 생성하므로 고정 주소를 필요로 하지 않습니다. 서비스가 통신해야 하는 경우, 레지스트리를 쿼리하여 사용 가능한 서버 인스턴스를 찾습니다. 예를 들어 결제 서비스가 인벤토리 서비스에 연결해야 하는 경우 레지스트리를 확인하여 정상 인벤토리 인스턴스를 찾습니다.

API Gateway 패턴

API Gateway 패턴은 클라이언트와 여러 백엔드 마이크로서비스 사이에 단일 진입점을 생성합니다. 클라이언트가 서로 다른 서비스에 대해 별도의 호출을 하는 대신, API Gateway는 하나의 요청을 수신하여 적절한 마이크로서비스로 라우팅하고 응답을 단일 결과로 결합합니다.

예를 들어, 제품 페이지를 로드할 때 게이트웨이는 여러 서비스에서 제품 세부 정보, 가격, 재고 및 후기를 동시에 가져올 수 있습니다. 그런 다음 게이트웨이는 이 모든 정보를 단일 통합 응답으로 클라이언트에게 반환합니다.

서비스 검색 패턴

서비스 검색 패턴은 동적 환경에서 서비스가 서로를 찾는 문제를 해결합니다. 마이크로서비스가 확장되거나 새 버전으로 업데이트됨에 따라 네트워크 위치는 지속적으로 변경됩니다. 서비스 검색 패턴은 서비스가 자체적으로 등록하고 통신해야 하는 다른 서비스를 찾을 수 있는 자동화된 메커니즘을 제공하므로, 하드코딩된 주소가 필요하지 않습니다.

2. 데이터 및 트랜잭션 관리

서비스 패턴당 데이터베이스

서비스당 데이터베이스 패턴은 각 마이크로서비스가 자체 데이터베이스를 소유하고 관리하도록 보장하여 서비스 간의 공유 데이터 종속성을 제거합니다. 이 접근 방식은 서비스 간의 데이터 접근을 방지하고 결합을 줄이지만, 다른 정보 소스의 정보가 필요할 때는 서비스가 API를 통해 통신해야 합니다. 예를 들어, ERP(기업 자원 계획) 시스템에서 회계 서비스는 HR 서비스의 직원 데이터베이스와 별도로 재무 데이터를 관리합니다.

Saga 패턴

Saga 패턴은 여러 마이크로 서비스에 걸친 트랜잭션을 조정된 단계로 나누어 관리합니다. 각 서비스는 로컬 트랜잭션을 완료하고 체인의 다음 단계를 트리거합니다. 단계가 실패하면 패턴이 이전 단계를 실행 취소하는 작업을 자동으로 실행합니다. 예를 들어, 온라인 주문을 처리할 때 재고가 예약된 후 결제가 실패하면 saga가 예약된 품목을 자동으로 예약 해제합니다.

CQRS(명령 쿼리 책임 분리 패턴)

CQRS 패턴은 각각에 대한 전용 모델을 사용하여 데이터 수정(명령)과 데이터 검색(쿼리)을 분리합니다. 이러한 구분을 통해 시스템은 각 경로를 독립적으로 최적화하여 명령 측의 쓰기 경합을 최소화하고 읽기 측의 쿼리 지연을 줄일 수 있습니다. 전자상거래 시스템에서는 주문은 쓰기에 최적화된 명령 모델을 사용하고, 판매 보고서 생성은 읽기 최적화된 쿼리 모델을 활용합니다.

3. 복원력 및 결함 처리

회로 차단기 패턴

회로 차단기 패턴은 다운스트림 서비스에 대한 호출을 모니터링하고 오류가 감지되면 요청을 중지하여 서비스의 오류가 전체 시스템으로 확산되는 일을 방지합니다. 서비스가 응답하지 않으면 회로 차단기가 추가 호출을 "트립"하고 차단하여 시스템 리소스를 보호하고 연쇄 장애를 방지합니다.

예를 들어, 재고 서비스가 다운되면 회로 차단기는 주문 서비스가 실패한 요청을 반복적으로 제출하지 못하도록 합니다. 이를 통해 시스템의 나머지 부분은 고객에게 대체 응답을 제공하면서 계속 작동할 수 있습니다.

벌크헤드 패턴

벌크헤드 패턴은 시스템 리소스를 격리하여 한 영역의 오류가 전체 시스템에 영향을 미치지 않도록 합니다. 선체의 구획과 마찬가지로 벌크헤드는 서로 다른 기능을 분리하여 한 기능이 장애를 일으켜도 다른 기능은 계속 작동할 수 있게 합니다. 이 패턴은 특정 서비스에 할당된 동시 요청 또는 리소스 수를 제한합니다.

4. 아키텍처 및 통합

Backend-for-frontend(BFF) 패턴

BFF(Backend for Frontend) 패턴은 각 특정 프런트엔드 인터페이스에 맞는 전용 백엔드 서비스를 만듭니다. 모바일 앱은 웹 애플리케이션과 요구 사항이 다르므로(예: 더 작은 화면, 제한된 대역폭, 다양한 성능 기능), BFF 패턴을 사용하면 개발자가 특정 프런트엔드에 맞게 각 백엔드를 최적화할 수 있습니다.

엔티티 및 집계 패턴

엔티티 및 집계 패턴은 DDD(도메인 기반 설계) 개념을 기반으로 관련 데이터를 논리적 단위로 정리합니다. 엔티티는 이메일 주소로 식별되는 고객 계정과 같이 고유한 ID를 가진 고유한 개체를 나타냅니다. 집계는 함께 업데이트해야 하는 관련 엔티티를 단일 단위로 결합합니다.

예를 들어, 전자상거래 시스템에서 주문 집계에는 주문 세부 정보, 품목 및 배송 정보가 포함되며, 이는 변경 사항이 발생할 때 모두 동기화된 상태를 유지해야 합니다.

스트랭글러(Strangler) 패턴

스트랭글러 패턴은 모놀리식 애플리케이션을 보다 유지 관리가 쉬운 마이크로서비스 아키텍처로 리팩토링하는 프로세스를 관리하는 데 도움이 됩니다. 새로운 마이크로서비스는 기존 모놀리스와 함께 점진적으로 구축되어 기존 시스템이 완전히 교체될 때까지 서서히 기능을 인계받습니다. 이 이름은 포도나무(마이크로서비스)가 시간이 지남에 따라 점차 자라서 결국 나무(모놀리식 애플리케이션)를 목 졸라 죽인다(Strangler)는 은유에서 유래되었습니다.

5. 이벤트 및 커뮤니케이션

이벤트 기반 패턴

이벤트 기반 패턴을 사용하면 마이크로 서비스가 직접 서비스 호출을 수행하는 대신 이벤트를 게시하고 사용하여 비동기적으로 통신할 수 있습니다. 서비스가 작업을 완료하면 다른 관심 있는 서비스가 수신하고 그에 따라 응답할 수 있는 이벤트를 브로드캐스트합니다. 이 접근 방식은 서비스 간 느슨한 결합을 생성하여 공유 이벤트 시스템을 통해 활동을 조정하면서 독립적으로 운영할 수 있도록 합니다.

사이드카 패턴

사이드카 패턴은 동일한 실행 환경 내에서 기본 애플리케이션 또는 서비스와 함께 보조 컨테이너("사이드카")를 배포하는 것을 의미합니다. 이 사이드카는 교차적 문제(예: 로깅, 모니터링, 보안, 관측 가능성)를 처리하여 코드베이스를 수정하지 않고도 기본 애플리케이션의 기능을 확장합니다.

어댑터 마이크로서비스 패턴

어댑터 마이크로서비스 패턴을 사용하면 호환되지 않는 시스템 또는 인터페이스 간 통신이 가능합니다. 마치 여행용 어댑터를 사용하여 장치를 외부 콘센트에 연결할 수 있듯이, 어댑터 패턴은 서로 다른 데이터 형식, 프로토콜 또는 API 간 변환을 수행합니다. 이 패턴은 서로 다른 통신 표준을 사용하는 레거시 시스템이나 타사 서비스와 통합할 때 유용합니다.

마이크로서비스 설계 사용 사례

마이크로서비스 설계 패턴은 높은 확장성, 복잡한 비즈니스 로직 및 신뢰할 수 있는 시스템 성능을 필요로 하는 산업에서 특히 유용합니다. 주요 사용 사례는 다음과 같습니다.

  • 전자상거래 플랫폼은 마이크로서비스 설계 패턴을 사용하여 판매 이벤트 중 로드 밸런싱을 처리하고 여러 창고에 걸쳐 복잡한 재고를 관리합니다. 또한 다양한 시스템에서 결제, 배송, 고객 서비스 운영을 조정하여 비즈니스 성과를 제고하고 고객 경험을 개선합니다.
  • 스트리밍 서비스는 마이크로서비스 패턴을 사용하여 전 세계에 콘텐츠를 전송하는 동시에 사용자 기본 설정 및 권장 사항을 관리하므로, 최소한의 버퍼링과 개인화된 경험으로 대규모 동시 사용자 부하를 처리할 수 있습니다.
  • 금융 서비스는 이러한 패턴을 구현하여 거래, 위험 관리, 인증 및 고객 대면 작업을 분리하는 동시에 금융 기관에서 요구하는 엄격한 규정 준수 및 보안 표준을 유지합니다.
  • 의료 시스템은 이러한 패턴을 사용하여 환자 기록, 약속 예약 및 청구 시스템을 통합하는 동시에 HIPAA 규정 준수를 유지하고 다양한 의료 서비스 제공자에 걸쳐 여러 의료 기기 API와 연결합니다.
  • 소셜 미디어 플랫폼은 마이크로서비스 설계 패턴을 사용하여 메시징, 콘텐츠 피드 및 미디어 처리를 독립적으로 확장하며, 이를 통해 소셜 미디어 플랫폼은 모든 기능에서 응답성 높은 성능을 유지하면서 매일 수십억 개의 사용자 상호 작용을 처리할 수 있습니다.

마이크로서비스 설계 패턴의 이점

마이크로서비스 설계 패턴은 오늘날의 복잡한 분산 시스템을 관리하기 위한 모범 사례를 제공하며 다음과 같은 광범위한 이점을 선사합니다.

  • 복잡성 감소: 공통적인 과제에 대한 표준화되고 검증된 접근 방식으로 더 예측 가능한 결과, 더 쉬운 문제 해결, 더 빠른 팀 온보딩이 가능합니다.
  • 민첩성 및 시장 출시 시간 단축: 팀은 독립적으로 서비스를 개발, 배포 및 확장하여 조정 병목 현상을 줄이고 기능 제공을 가속화할 수 있습니다.
  • 향상된 내결함성: 격리 기술은 전체 시스템에 걸쳐 오류가 연쇄적으로 발생하는 일을 방지하여 가동 중지 시간을 크게 단축하고 전체 시스템 신뢰성을 향상시킵니다.
  • 향상된 확장성과 유연성: 조직은 필요한 곳에 정확하게 리소스를 할당하고 주요 시스템 개편 없이도 변화하는 비즈니스 요구 사항에 신속하게 적응할 수 있습니다. 팀은 특정 요구 사항에 따라 Java™ 또는 Python과 같은 다양한 프로그래밍 언어로 서비스를 개발할 수 있습니다.
  • 비용 효율성: 목표 확장 및 리소스 최적화를 특정 서비스에 대한 최적의 기술 스택을 선택할 수 있는 기능과 함께 활용하면 시스템의 경제성이 높아집니다.
  • 기술 다양성: 팀은 각 서비스의 특정 요구 사항에 가장 적합한 도구와 프레임워크를 선택하여 보다 효율적이고 유지 관리 가능한 솔루션을 만들 수 있습니다. 예를 들어, 엔터프라이즈 마이크로서비스의 경우 Java Spring Boot를 선택하여 서비스형 데이터베이스(DBaaS)를 사용하거나 Python을 선택하여 데이터 분석을 수행할 수 있습니다.

올바른 마이크로서비스 설계 패턴 선택

적절한 패턴 선택은 시스템의 특정 요구 사항과 조직의 능력에 따라 다릅니다. 체계적인 접근 방식을 통해 이러한 아키텍처 결정을 내릴 수 있습니다.

기본 패턴으로 시작

이벤트 소싱 또는 CQRS와 같은 복잡한 패턴을 구현하기 전에 API Gateway 및 서비스 검색으로 시작하세요. 이러한 핵심 패턴은 보다 정교한 구현에 필요한 통신 인프라를 설정합니다.

팀의 역량에 맞게 조정

분산 시스템, 운영 성숙도 및 DevOps 사례에 대한 경험을 고려하세요. 마이크로서비스를 처음 접하는 팀은 처음에는 더 간단한 패턴의 이점을 누릴 수 있는 반면, 숙련된 팀은 보다 심층적인 운영 지식이 필요한 고급 조정 패턴을 처리할 수 있습니다.

운영 오버헤드 검토

각 패턴은 팀이 장기적으로 관리해야 하는 복잡성을 초래합니다. 서비스별 데이터베이스에는 데이터 동기화 전략이 필요합니다. 이벤트 기반 패턴에는 메시지 브로커 인프라가 필요합니다. 선택한 패턴을 지원할 수 있는 역량을 갖추고 있는지 확인하세요.

점진적인 도입

기본 패턴을 사용하는 몇 가지 서비스로 시작하여 경험을 쌓은 다음 전문성이 발전할수록 확장하세요. 이러한 점진적 접근 방식은 과도한 엔지니어링을 방지하고 초기 구현에서 학습할 수 있도록 합니다.

관련 솔루션
IBM Red Hat OpenShift

Red Hat OpenShift on IBM Cloud는 완전 관리형 OpenShift 컨테이너 플랫폼(OCP)입니다.

Red Hat OpenShift 살펴보기
DevOps 솔루션

DevOps 소프트웨어 및 도구를 사용하여 여러 장치 및 환경에서 클라우드 네이티브 앱을 구축, 배포 및 관리합니다.

DevOps 솔루션 살펴보기
클라우드 컨설팅 서비스 

IBM Cloud 컨설팅 서비스를 통해 새로운 역량을 개발하고 비즈니스 민첩성을 향상하세요. 하이브리드 클라우드 전략 및 전문가 파트너십을 통해 솔루션을 공동으로 개발하고, 디지털 혁신을 가속화하고, 성능을 최적화하는 방법을 알아보세요.

클라우드 서비스
다음 단계 안내

IBM Cloud 컨설팅 서비스를 통해 새로운 역량을 개발하고 비즈니스 민첩성을 향상하세요.

IBM Cloud 컨설팅 서비스 살펴보기 무료 IBM Cloud 계정 만들기