Jump to section

마이크로서비스란?

URL 복사

마이크로서비스란 독립적인 서비스들의 모음이 경량화 API를 통해 통신하는 애플리케이션 아키텍처의 한 유형을 말합니다.

가장 최근 온라인 구매 사이트에 방문했던 때를 떠올려 보세요. 제품을 검색하기 위해 사이트에 있는 검색창을 사용했을 것입니다. 이러한 검색이 하나의 서비스가 됩니다. 또는 관련 제품 추천을 봤거나 장바구니에 상품을 추가하기도 했을 것입니다. 이러한 것들 역시 서비스입니다. 이러한 마이크로서비스들이 합쳐질 때 완벽하게 작동하는 하나의 애플리케이션이 성립됩니다.

마이크로서비스 아키텍처는 하나의 애플리케이션 내에 있는 각 핵심 기능이 독립적으로 존재할 수 있도록 소프트웨어를 구축하는 클라우드 네이티브 접근 방식입니다. 

애플리케이션의 요소들이 이러한 방식으로 분리되면 개발 팀과 운영 팀이 서로 방해가 되지 않으면서 협력할 수 있습니다. 따라서 동일한 애플리케이션 개발에 더 많은 개발자들이 동시 참여할 수 있으므로 개발에 소요되는 시간을 단축할 수 있습니다.

 

이미지

모놀리식 아키텍처와 마이크로서비스 아키텍처 비교
애플리케이션 빌드의 전통적인 방식은 모놀리식 위주였습니다. 모놀리식 아키텍처에서는 애플리케이션 내의 모든 기능과 서비스가 함께 맞물려 단일 유닛으로 운영됩니다. 애플리케이션이 어떤 방식으로든 추가되거나 개선되면 아키텍처는 더 복잡해집니다. 그 결과 전체 애플리케이션을 분리하지 않고는 애플리케이션 내의 단일 기능을 최적화하기가 더 어려워지고, 만약 애플리케이션 내의 하나의 프로세스가 확장되어야 할 때는 전체 애플리케이션도 확장되어야 합니다.

마이크로서비스 아키텍처에서 애플리케이션은 애플리케이션 내의 각 핵심 기능이 독립적으로 작동하도록 빌드됩니다. 따라서 개발 팀은 애플리케이션 전체를 중단하지 않고 변화하는 비즈니스 요구 사항을 충족하기 위한 새로운 구성 요소를 구축하고 업데이트할 수 있습니다.

마이크로서비스 아키텍처는 서비스 지향 아키텍처(SOA)가 진화한 형태입니다. 이 두 가지 방식은 크고 복잡한 애플리케이션을 작업하기 쉬운 작은 구성 요소들로 세분화한다는 점에서 유사합니다. 이러한 유사성 때문에 SOA와 마이크로서비스 아키텍처는 혼동하기 쉽습니다. 이 둘의 가장 큰 차이점은 범위에 있습니다. SOA가 전사적인 아키텍처 접근 방식이라면 마이크로서비스는 애플리케이션 개발 팀의 구현 전략입니다.

마이크로서비스는 분산형 개발을 통해 팀의 역량과 일상적인 업무 능력을 향상시킵니다. 또한, 여러 마이크로서비스를 동시에 개발하는 것도 가능합니다. 따라서 동일한 애플리케이션 개발에 더 많은 개발자들이 동시 참여할 수 있으므로 개발에 소요되는 시간을 단축할 수 있습니다.

더 빠른 출시

개발 주기가 단축되기 때문에 마이크로서비스 아키텍처는 더욱 민첩한 배포와 업데이트를 지원합니다.

높은 확장성

특정 서비스에 대한 수요가 증가하면 필요에 따라 여러 서버와 인프라에 배포할 수 있습니다.

뛰어난 복구 능력

이러한 독립적인 서비스들은 제대로 구축되기만 한다면 서로에게 영향을 주지 않습니다. 즉, 모놀리식 애플리케이션 모델과는 달리 한 부분에 장애가 발생하더라도 전체 애플리케이션이 중단되지 않습니다.

손쉬운 배포

마이크로서비스 기반 애플리케이션은 전통적인 모놀리식 애플리케이션에 비해 더욱 모듈화되고 규모가 작아졌기 때문에 배포에 따르는 우려 사항들이 사라졌습니다. 이를 위해서는 더 많은 협업이 필요하며 서비스 메쉬 레이어가 협업에 도움이 될 수 있습니다. 그리고 이를 통해 몇 배로 성과를 거둘 수 있습니다.

편리한 액세스

하나의 큰 애플리케이션을 작은 부분들로 세분화했기 때문에 개발자들이 각 부분을 파악하고 업데이트하며 개선하기가 용이해졌습니다. 이로 인해 특히 DevOps와 같은 애자일 개발 방식과 결합할 경우 개발 주기를 더욱 가속화할 수 있습니다.

향상된 개방성

다중 언어 지원(Polyglot) API를 사용하기 때문에 개발자들은 필요한 기능에 맞는 최적의 언어와 기술을 자유롭게 선택할 수 있습니다.

마이크로서비스의 유연성 때문에 서둘러 새로운 변경 사항들을 배포하려고 하다 보면 새로운 패턴들이 생성됩니다. 소프트웨어 엔지니어링에서 "패턴"은 작동한다고 알려진 모든 알고리즘 솔루션을 가리킵니다. 반대로 "안티패턴"이란 문제를 해결하려는 의도에서 발생하지만 장기적으로는 더 많은 문제를 발생시킬 수 있는 일반적인 실수를 말합니다.

문화와 프로세스 이외에도 복잡성과 효율성은 마이크로서비스 기반 아키텍처의 두 가지 주요 과제입니다. 마이크로서비스 아키텍처로 작업할 때는 이러한 일반적인 안티패턴에 주의해야 합니다.

  1. 확장: 소프트웨어 라이프사이클 개발 프로세스 내의 기능을 확장하는 것은 특히 초기에 문제가 될 수 있습니다. 초기 설정 과정에서는 시간을 들여 서비스들 간의 종속성을 파악하고 역호환성을 손상시킬 수 있는 잠재적 트리거를 인지하는 것이 중요합니다. 그리고 배포 시기가 되면 마이크로서비스가 수동으로 배포하기에는 지나치게 복잡해졌기 때문에 자동화에 투자하는 것이 매우 중요합니다. 
  2. 로깅: 분산 시스템에서는 모든 내용을 한 곳에 모을 수 있는 중앙집중식 로그가 필요합니다. 그렇지 않으면 확장 시에 이를 관리하기가 불가능해집니다.
  3. 모니터링: 문제의 근원을 정확히 집어내려면 시스템을 중앙에서 파악하는 것이 중요합니다. 
  4. 디버깅: 로컬 통합 개발 환경(IDE)을 통한 원격 디버깅은 선택 사항이 아닙니다. 이 방식으로는 수십, 수백 개의 서비스를 관리할 수 없기 때문입니다. 안타깝게도 현재로서는 디버그 방법에 대한 정답이 없습니다.
  5. 연결성: 중앙집중식 또는 통합형 여부에 관계없이 서비스 검색을 고려해야 합니다.

컨테이너와 쿠버네티스
컨테이너는 애플리케이션 코드와 이를 실행되는 데 필요한 모든 파일이 함께 패키징된 소프트웨어의 단위입니다. 이러한 구조를 통해 전체 기능을 유지하면서 컨테이너화된 애플리케이션을 환경 간에 쉽게 이동할 수 있습니다.

쿠버네티스는 컨테이너 오케스트레이션 플랫폼으로, 애플리케이션 내 단일 구성 요소들이 기술 스택의 나머지 부분에 영향을 미치지 않고 업데이트되므로 마이크로서비스 애플리케이션의 관리, 확장, 배포를 자동화하기에 가장 적합합니다.

API
API(애플리케이션 프로그래밍 인터페이스)는 다른 애플리케이션과의 통신을 담당하는 애플리케이션의 일부입니다. 마이크로서비스 아키텍처의 인프라에서 API는 마이크로서비스 내의 여러 서비스가 정보를 공유하고 하나로 작동할 수 있게 하는 중요한 역할을 합니다.

이벤트 스트리밍
이벤트는 마이크로서비스 서비스 내에서 발생하는 모든 것으로 정의될 수 있습니다. 예를 들어, 누군가 온라인 장바구니에 무언가를 추가하거나 삭제하는 것이 이벤트입니다.

이벤트는 이벤트 스트림으로 형성되고, 이벤트 스트림은 시스템의 행동 변화를 반영합니다. 이벤트를 모니터링하면 조직은 데이터와 사용자 행동에 관한 유용한 결론에 도달할 수 있습니다. 이벤트 스트림 프로세싱을 적용하면 즉각적인 조치를 취할 수 있습니다. 이벤트 스트림 프로세싱은 실시간으로 운영 워크로드에 직접 사용될 수 있습니다. 오늘날 기업들은 이벤트 스트리밍을 사기 분석에서 머신 유지 관리까지 모든 것에 적용하고 있습니다.

서버리스 컴퓨팅
서버리스 컴퓨팅은 개발자는 애플리케이션을 빌드, 실행할 수 있고 클라우드 공급업체는 서버 인프라프로비저닝, 유지 관리, 확장을 담당하는 클라우드 네이티브 개발 모델입니다. 개발자는 배포를 위해 코드를 컨테이너에 패키징하기만 하면 됩니다. 서버리스의 경우 애플리케이션이 기본 인프라에서 추상화되므로 조직이 더 빠르게 혁신할 수 있습니다.

Red Hat의 오픈소스 솔루션은 고객의 모놀리식 애플리케이션을 마이크로서비스로 세분화하고, 이를 관리 및 오케스트레이션하고, 마이크로서비스에서 생성하는 데이터를 처리할 수 있도록 지원합니다. 

Red Hat OpenShift
Red Hat® OpenShift®는 마이크로서비스 기반 애플리케이션을 일관되게 연결, 관리, 관찰하는 방식을 제공하여 마이크로서비스를 지원하는 쿠버네티스 기반 플랫폼입니다. Red Hat OpenShift는 컨테이너화된 애플리케이션, 레거시 애플리케이션, 클라우드 네이티브 애플리케이션은 물론 마이크로서비스로 리팩토링된 애플리케이션을 지원합니다. OpenShift는 Red Hat Application Services와 통합되며 Git, Jenkins와 같은 기존 자동화 툴과 함께 사용할 수 있습니다. 또한 엔터프라이즈급 Linux 운영 체제를 통합하여 전체 클러스터의 보안을 강화합니다. 

레거시 애플리케이션을 최적화하든, 클라우드로 마이그레이션하든, 완전히 새로운 마이크로서비스 기반 솔루션을 구축하든 Red Hat OpenShift는 인프라 전체에 걸쳐 이러한 애플리케이션에 더욱 안전하고 안정적인 플랫폼을 제공합니다.

 

Red Hat Runtimes

Red Hat Runtimes는 마이크로서비스를 위해 사전 구축되고 컨테이너화된 런타임 기반 세트로, Quarkus, Spring Boot, MicroProfile, Node.js 등과 같이 마이크로서비스 아키텍처를 설계할 때 사용하는 다양한 언어와 프레임워크를 지원합니다. 또한 Red Hat Runtimes에는 Red Hat Data Grid를 통한 신속한 데이터 액세스 지원 서비스와 Red Hat Single Sign-On을 통한 마이크로서비스 API 보안 서비스가 포함되어 있습니다.

 

Red Hat Integration

Red Hat Integration은 포괄적인 통합 및 메시징 기술을 제공하여 하이브리드 인프라 전반의 애플리케이션과 데이터를 연결합니다. 민첩하고, 분산되어 있으며, 컨테이너화된 API 중심 솔루션으로서 서비스 구성과 오케스트레이션, 애플리케이션 연결과 데이터 변환, 실시간 메시지 스트리밍, API 관리 기능을 제공하며 클라우드 네이티브 플랫폼 및 툴체인과 결합되어 현대적인 애플리케이션 개발 전체 과정을 지원합니다.

개발자들은 드래그 앤 드롭 서비스와 빌트인 통합 패턴 같은 툴링을 사용하여 마이크로서비스를 구축할 수 있고, 비즈니스 사용자들은 웹 기반 툴링을 사용하여 다양한 마이크로서비스를 통합하는 API를 개발할 수 있습니다.

추가 자료

문서

마이크로서비스가 의료 부문에서 IT 통합을 지원하는 방식

마이크로서비스는 의료 및 기타 업종의 개발자가 탄력적으로 결합된 서비스로 구성된 애플리케이션을 만들 수 있도록 지원하므로 개발자는 더 쉽게 개발, 테스트, 배포, 업그레이드를 수행할 수 있습니다.

문서

마이크로서비스란?

마이크로서비스란 애플리케이션을 구축하기 위한 아키텍처 기반의 접근 방식으로 애플리케이션의 각 요소가 독립적으로 작동합니다.

문서

서비스 메쉬란 무엇일까요?

서비스 메쉬는 애플리케이션에 구축된 인프라 레이어로, 서비스 상호작용을 통해 보다 손쉽게 통신을 최적화하고 다운 타임을 줄이는 방법을 기록합니다.

마이크로서비스에 대한 자세한 내용

제품

선택한 인프라에서 애플리케이션 출시 테스트를 완료한 통합 서비스 세트를 포함하는 엔터프라이즈 애플리케이션 플랫폼입니다.

리소스

웨비나

100% 비대면으로 진행하는 Red Hat OpenShift PoC 활용 가이드 온라인 세미나 1일차 : 클라우드 네이티브

웨비나

100% 비대면으로 진행하는 Red Hat OpenShift PoC 활용 가이드 온라인 세미나 2일차: 디지털 트랜스포메이션

교육

무료 교육 과정

Developing Cloud-Native Applications with Microservices Architectures