Close

마이크로서비스 아키텍처

마이크로서비스 아키텍처는 확장성이 뛰어나고 분산된 최신 시스템을 제공합니다.


오늘날 애플리케이션을 최신화한다는 것은 종종 마이크로서비스로 구축된 클라우드 네이티브 애플리케이션으로 마이그레이션하는 것을 의미합니다. 그런 다음 Docker 및 Kubernetes와 같은 컨테이너 기술을 사용하여 배포합니다. Netflix와 Atlassian을 비롯한 많은 조직들이 이 기술을 사용합니다. 그 이유는 마이크로서비스 아키텍처가 확장성, 개발 속도 및 서비스 반복을 개선하기 때문입니다.

마이크로서비스 아키텍처는 애플리케이션을 API를 통해 통신하는 일련의 독립적으로 배포 가능한 서비스로 분할합니다. 따라서 각 개별 서비스를 독립적으로 배포하고 확장할 수 있습니다. 이 접근 방식을 사용하면 대규모의 복잡한 애플리케이션을 빠르고 자주 제공할 수 있습니다. 모놀리식 애플리케이션과 달리 마이크로서비스 아키텍처를 사용하면 팀이 기존 코드의 상당 부분을 다시 작성할 필요 없이 새로운 기능을 구현하고 더 빠르게 변경할 수 있습니다.

Compass 로고.

무료로 Compass 사용해 보기

개발자 경험을 개선하고 모든 서비스를 카탈로그화하고 소프트웨어 상태를 향상하세요.

마이크로서비스 아키텍처의 몇 가지 주요 특징은 다음과 같습니다.

다중 구성 요소 서비스

마이크로서비스는 다른 서비스의 기능이나 애플리케이션의 무결성을 손상시키지 않으면서 개발, 배포, 운영, 변경 및 재배포할 수 있는 느슨하게 결합된 개별 구성 요소 서비스로 구성됩니다. 따라서 애플리케이션의 개별 기능을 빠르고 손쉽게 배포할 수 있습니다.

높은 유지 관리성 및 테스트 편의성

마이크로서비스를 통해 팀은 새로운 기능을 실험해 보고 문제가 발생하면 롤백할 수 있습니다. 따라서 코드를 보다 쉽게 업데이트하고 새로운 기능의 시장 출시 시간을 단축할 수 있습니다. 또한 개별 서비스의 결함 및 버그를 분리하고 수정하는 프로세스를 간소화합니다.

소규모 팀이 소유

소규모의 독립적인 팀은 일반적으로 마이크로서비스 내에 서비스를 구축하므로 애자일 관행DevOps의 채택을 장려합니다. 팀이 독립적으로 작업하고 빠르게 마이그레이션할 수 있어 개발 사이클 타임이 단축됩니다.

비즈니스 기능을 중심으로 구성

마이크로서비스 접근 방식은 비즈니스 기능을 중심으로 서비스를 구성합니다. 팀은 다양한 기능을 수행하고 개발에 필요한 모든 기술을 보유하고 있으며 개별 기능을 수행하기 위해 노력합니다.

인프라 자동화

마이크로서비스를 구축하고 유지 관리하는 팀은 일반적으로 지속적 통합(CI), 지속적 제공(CD) 및 지속적 배포(CD)와 같은 인프라 자동화 관행을 사용합니다. 따라서 팀은 다른 팀에 영향을 주지 않고 각 서비스를 독립적으로 구축하고 배포할 수 있습니다. 또한 팀이 이전 버전과 나란히 새 버전의 서비스를 배포할 수 있습니다.

마이크로서비스 아키텍처의 예


가상의 전자 상거래 소프트웨어 프로젝트를 예로 들어 보겠습니다. 다음 다이어그램은 여러 마이크로서비스와 상호 작용하는 웹 애플리케이션 및 모바일 애플리케이션이 있는 전자 상거래 사이트로, 각 마이크로서비스는 도메인에 대한 특정 기능을 제공합니다.

최신 웹 애플리케이션은 브라우저에서 실행되며 콘텐츠 전송 네트워크(CDN)에서 제공되는 경우가 많습니다. CDN은 웹 애플리케이션을 전 세계 서버에 배포할 수 있는 이점을 제공하므로 웹 브라우저에서 빠르게 다운로드할 수 있습니다. CDN은 이미지, 오디오 및 비디오와 같은 미디어 자산을 제공할 때도 사용됩니다. 예를 들어, 이 시스템에서는 판매 상품의 이미지와 비디오가 CDN에서 제공됩니다.

웹프론트 마이크로서비스 다이어그램

이 그래픽의 마이크로서비스는 다음과 같습니다.

계정 서비스

계정 서비스는 주소 및 결제 정보와 같은 고객 계정에 대한 정보를 제공합니다.

재고 서비스

이 서비스는 고객이 구입할 수 있는 상품에 대한 최신 재고 정보를 제공합니다.

쇼핑 카트 서비스

고객은 이 서비스를 사용하여 구입하려는 재고에서 상품을 선택합니다.

결제 서비스

고객이 쇼핑 카트에서 상품을 결제합니다.

배송 서비스

이 서비스는 구입한 상품의 포장 및 배송을 예약합니다.

애플리케이션은 각 마이크로서비스가 게시하는 REST API를 통해 마이크로서비스와 상호 작용합니다. API 게이트웨이를 통해 애플리케이션은 마이크로서비스에서 제공하는 API를 사용할 수 있으며 마이크로서비스를 동일한 API를 사용하는 다른 마이크로서비스로 변경할 수 있습니다.

각 마이크로서비스는 서비스와 데이터베이스로 구성됩니다. 서비스는 REST API를 처리하고 비즈니스 로직을 구현하며 데이터베이스에 데이터를 저장합니다. 마이크로서비스의 경우 12 Factor App 계약에 따라 데이터베이스 및 큐와 같은 리소스를 서로 분리합니다.

마이크로서비스를 구축하는 방법


많은 조직의 경우 모놀리식 아키텍처로 시작하는 것이 첫 번째 단계입니다. 그런 다음, 코드베이스를 여러 서비스로 나누고, 적절한 패턴을 구현하여 네트워크 문제에서 안정적으로 종료 및 복구하고, 데이터 일관성을 다루며, 서비스 부하를 모니터링하는 등의 작업이 필요합니다. 하지만 이것은 기술적인 측면일 뿐입니다. 또한 팀을 재구성하고 DevOps 문화를 수용해야 합니다.

다음으로 어려운 부분은 모놀리스를 마이크로서비스로 나눠야 한다는 것입니다. 모놀리식 데이터베이스 스키마를 리팩터링하는 것은 정교한 작업이 될 수 있습니다. 각 서비스에 어떤 데이터 세트가 필요한지, 그리고 중복되는 데이터 세트가 있는지 명확하게 식별하는 것이 중요합니다. 지속적 배포는 릴리스 장애의 위험을 줄이는 데 도움이 될 뿐만 아니라 팀이 애플리케이션 배포에 얽매이지 않고 애플리케이션을 구축하고 실행하는 데 집중할 수 있게 합니다.

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


모놀리식 아키텍처는 소프트웨어 프로그램의 전통적인 모델로, 자체 포함 방식이며 다른 애플리케이션과 독립적인 통합된 유닛으로 만들어집니다. 마이크로서비스 아키텍처는 독립적으로 배포 가능한 일련의 서비스를 이용하는 아키텍처 방법으로, 모놀리스와 정반대라고 할 수 있습니다. 프로젝트 초기에는 코드 관리, 인지 오버헤드 및 배포의 용이성 면에서 모놀리스가 유리할 수 있습니다. 모놀리스 애플리케이션이 커지고 복잡해지면 확장과 지속적인 배포가 어려워지고 업데이트가 번거로워질 수 있습니다.

모놀리식 애플리케이션은 나눌 수 없는 단일 유닛으로 구축되는 반면, 마이크로서비스는 단일 유닛을 더 큰 전체에 기여하는 독립적인 유닛 모음으로 나눕니다. 애플리케이션은 분산되고 자율적으로 개발되는 일련의 독립적으로 배포 가능한 서비스로 구축됩니다.

분산된 아키텍처


마이크로서비스는 분산 시스템 범주에 속합니다. 정의에 따라 분산 시스템은 공유하는 공동의 목표를 달성하기 위해 여러 개의 개별 컴퓨팅 노드에서 컴퓨팅 리소스를 활용하는 컴퓨터 프로그램의 모음입니다. 분산 시스템은 시스템 안정성과 성능을 개선하고 쉽게 확장하는데 도움이 됩니다.

노드 장애가 발생하면 다른 노드가 장애를 대체할 수 있기 때문에 분산 시스템의 노드는 중복성을 제공합니다. 각 노드를 수평적으로 및 수직적으로 확장할 수 있으므로 성능이 향상됩니다. 시스템에 과도한 부하가 걸리면 노드를 추가하여 부하를 처리할 수 있습니다.

Kubernetes와 Docker 비교


Docker는 개발자가 컨테이너를 구축, 배포 및 실행하도록 지원하는 상용 컨테이너화 플랫폼 및 런타임입니다. Docker는 컨테이너화된 애플리케이션을 패키징하고 배포하는 효율적인 방법을 제공하지만, Docker만으로는 대규모로 컨테이너를 실행하고 관리하기 어렵습니다.

Kubernetes는 네트워크로 연결된 리소스의 클러스터 전체에서 컨테이너 런타임 시스템을 오케스트레이션하는 데 널리 사용되는 오픈 소스 플랫폼입니다. Kubernetes는 Docker와 함께 또는 따로 사용할 수 있습니다. Docker는 컨테이너화 런타임인 반면, Kubernetes는 여러 컨테이너 런타임에서 컨테이너를 실행하고 관리하기 위한 플랫폼입니다.

구성 관리


소프트웨어 구성 관리는 소프트웨어 시스템 구성 메타데이터의 변경 사항을 관리, 구성, 추적 및 모니터링하는 프로세스입니다. 일반적으로 버전 제어 및 CI/CD 인프라와 함께 사용합니다.

구성 관리를 통해 엔지니어링 팀은 구성 데이터에 대한 업데이트를 자동으로 관리 및 모니터링하는 도구를 사용하여 강력하고 안정적인 시스템을 구축할 수 있습니다. 구성을 위한 중앙 집중식 위치에서 “단일 정보 소스”를 만들어 마이크로서비스 아키텍처에서 무분별한 소프트웨어 확장을 보다 효과적으로 관리하는 데 도움이 됩니다.

Chandler Harris
Chandler Harris

Chandler Harris는 Atlassian의 마케팅 전략 전문가 겸 작가입니다. 기술, 과학, 비즈니스, 금융 및 교육에 이르는 다양한 주제에 대해 40개 이상의 다양한 출판물을 저술했습니다.


여러분께 도움을 드릴 자료를 추천합니다.

리소스에 책갈피를 지정하여 Compass의 소프트웨어 개발 및 지속적인 업데이트에 대해 알아보세요.

DevOps 일러스트레이션

Compass 커뮤니티

장애물 극복 일러스트레이션

자습서: 컴포넌트 만들기

맵 일러스트레이션

Compass 무료로 시작하기

DevOps 뉴스레터 신청

Thank you for signing up