cloud4dev-docs

마이크로서비스 아키텍처 개요

마이크로서비스 앱은 기존의 모놀리식 앱과 다른 개발 방식으로 비지니스 관점으로 보면 독깁적인 서비스 변경과 확장이 유용하고 의존성이 감소된다. 단점은 아키텍처 설곙와 비지니스 분석이 선행되어야 하며 설계의 난이도가 증가한다. 레거시 시스템과 연계에 어려움이 있을 수 있다.

기술적 관점에서는 신속하고 독립적인 변경, 배포 및 확장에 효율적이며 Polyglot(다양한 언어) 개발이 가능하다. 단점으로는 분산시스템 인프라 구성, 확장 및 운영에 어려움이 따른다. 실제로 마이크로서비스 구성 및 개발 도구가 부재하고 수 많은 앱의 연결되기 때문에 복잡한 네트워크 및 환경 설정을 위해 자동화는 필수이다.

기존의 모놀리식 앱을 마이크로서비스 단위로 전환 개발하는 프로젝트도 수행하지만 신규 개발에 적용하는 것이 더 적합하다.

마이크로서비스 특징 이해하기

모놀리식 아키텍처

모놀리식 아키텍처 특징

모놀리식 아키텍처 장점

모놀리식 아키텍처 단점

마이크로서비스 아키텍처

마이크로서비스 아키텍처 특징

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

“마이크로서비스는 한가지 기능(비지니스 관련 기능/역할)을 수행하는 초점을 맞춘 서비스를 독립적이고 배포 가능한 가장 작은 단위의 서비스(=atom)로 분리하고 API를 통해 다른 서비스와 연계하며 각각 자율적으로 개발, 운영 즉, 독립적인 팀이 각 서비스의 개발과 운영을 담당하는 것이다”

- 업무상의 기능 또는 역할을 하나의 기능 묶음으로 개발된 컴포넌트 → 한 가지의 역할만 수행

- REST API 등을 통하여 서비스들의 기능을 제공하고 사용

- 데이터를 공유하지 않고 서비스 별로 독립적으로 가공하고 저장함

- 서비스간의 인터페이스 규약 사용 - REST, Thrift, Protocolbuffer, AMQ

마이크로서비스 아키텍처 구성 요소

마이크로서비스 아키텍처를 구성하는 핵심 요소는 크게 4가지로 구성된다. 서비스, DevOps, 데이터 분리, API Gateway 로 구성할 수 있다.

  1. 서비스

    • 각 컴포넌트는 서비스라는 형태로 구현되고 API를 이용하여 타 서비스와 통신

    • 서비스 경계는 구문 또는 도메인(업무)의 경계를 따름

      예) 사용자 관리, 상품 관리, 주문 관리와 같은 각 업무 별로 서비스를 나눠서 정의

    • REST API에서 /users, /products와 같이 주요 URI도 하나의 서비스

  2. DevOps

    • DevOps는 CI에서 좀더 진화된 형태
    • 개발, 테스트, 배포를 모두 자동화 시켜 개발 사이클이 끊임없이 순환되도록 함으로서 개발의 속도를 최대화 시키는 개발 유형
    • 배포가 서비스의 수 만큼 이루어지게 될 뿐만 아니라 테스트 또한 각각의 서비스가 연동되어 발생하는 집합체 Aggregate의 수 만큼 필요하게 되므로 필연적으로 DevOps 필요
  3. 데이터 분리

    • 서비스 별로 필요에 따라 별도의 데이터베이스를 사용
    • 서비스가 API에서부터 데이터베이스까지 분리되는 수직 분할 원칙 (Vertical Slicing)에 따름
    • 데이터베이스의 종류 자체를 다르게 하거나, 같은 데이터베이스를 사용하더라도 스키마를 나누는 방법 사용
  4. API Gateway

    • 모든 api에 대한 end point를 통합하고, 몇가지 추가적인 기능을 제공하는 미들웨어
    • EndPoint 통합과 토폴로지 정리
    • Orchestration : 여러 개의 서비스를 묶어서 하나의 서비스 생성
    • 공통 기능 처리(Cross cutting function handling) : API 인증 (Authentication), Logging 등
    • Mediation : 메시지 포맷 변환, 프로토콜 변환, 메시지 라우팅 등

마이크로서비스 아키텍처 장점

Technology Heterogeneity

요구사항을 구현하기 위해 최적화된 언어와 아키텍처의 선택 : 다른 프로그래밍언어, 다른 도구를 사용하여 개발 가능

Resilience

오류 발생 시 복구될 때까지 요청 가능 서비스에서 제외 (Circuit Breaker와 로드밸런서가 담당)

Scaling

Ease of Deployment

Organizational Alignment

Composability

Replaceability

서비스를 나누는 규칙, 즉 서비스를 모듈화하는 규칙으로 동일한 기능을 하는 서비스는 하나의 서비스로 대체 가능

마이크로서비스 참조 사이트

스프링클라우드의 마이크로서비스패턴

마이크로서비스 구성을 위해서는 다양한 패턴들을 적용해야 하는데 창업 플랫폼에서는 기본적으로 Spring cloud, Spring boot 기반의 마이크로서비스 패턴이 적용되어 있다.

Micorservices Concern Spring Cloud & Netflix OSS
Configuration Management Config Server
Service Discovery Netflix Eureka
Load Balancing Netflix Ribbon
API Gateway Netflix Zuul
Service Security Spring Cloud Security
Resilience & Fault Tolerance Netflix Hystrix, Turbine & Ribbon
  1. Configuration Management

    Spring Cloud Config Server

    1557301378513

  2. Service Discovery

    클라이언트나 API 게이트웨이가 호출할 서비스를 찾는 매커니즘이 필요하고 이를 서비스 디스커버리(Service Discovery)라고 한다.

    1558317067904

  3. Load Balancing

    Spring cloud의 ribbon은 Client에 탑재되어 있는 로드밸런서로 서버 사이드에서 필요했던 H/W 부담이 사라지고, 서버 목록 변경이 쉽고, 로드밸런싱 방식도 다양하게 설정하는 기능을 제공한다.

    1557302745120

  4. API Gateway

    • 마이크로서비스 앱 간의 중복적으로 발생하는 인증이나 로그와 같은 공통 기능을 API Gateway를 도입하면 하나의 단일 기능을 구성할 수 있다. Spring Cloud zuul은 외부 API 연동 시 기존 마이크로서비스의 수정을 하지 않고도 API만 공개할 수 있어 보안 안정성을 향상시킬 수 있다.

    1557302795564

  5. Circuit Breaker

    원격 접속의 성공/실패를 카운트하여 에러율(failure rate)이 임계치를 넘어섰을 때 자동적으로 접속을 차단하는 시스템이다.

    Circuit Breaker는 상태 머신(State Machine)으로 나타낼 수 있다. 접속 성공과 실패 이벤트가 발생할 때마다 내부 상태를 업데이트하여 자동적으로 장애를 검출하고 복구 여부를 판단한다.

1557449659836

API 정의

마이크로서비스 아키텍처에서 가장 많이 등장하는 API는 애플리케이션 간의 표준화된 통신 방식 중의 하나이다. REST API는 다음과 같이 정의할 수 있다.

마이크로서비스 API 설계 관점

마이크로서비스 아키텍처 기반 개발은 상세한 유저스토리를 바탕으로 프론트엔드와 백엔드를 각각 개발하여 검증한다. 프론트엔드 개발자는 프론트엔드 개발 –> Mock Test –> API 연동과 같은 순서로 진행하고 백엔드 개발자는 개발 이후에 단위테스트 단계에서 프론트엔드의 API 연동 테스트를 수행한다.

마이크로서비스 간의 API 호출

마이크로서비스 애플리케이션 간의 호출 처리는 API를 통해 호출한다.

클라우드플랫폼과 마이크로서비스

PaaS에서 마이크로서비스 실행 시 솔루션 취약성, 운영 부담을 줄이고 개발자의 생산성 향상을 기대할 수 있다. 마이크로서비스 아키텍처는 기존 모놀리식 아키텍처 개발 대비 수많은 애플리케이션이 조합되어 실행되기 때문에 빈번한 배포가 발생하고 주기가 굉장히 짧아진다. PaaS를 활용하면 개발환경 구성부터 운영 시 서비스 상태 관리 인스턴스 관리가 매우 쉬워진다.

PaaS 특징

클라우드 컴퓨팅은 자신이 소유해던 방식에서 공유 개념으로 전환한 형태로 자동차를 예를들면, 일반 자가용에서 리스 및 공유차와 같은 형태와 유사하다. 특히, PaaS는 IaaS(Infrastruture as a Service) 환경에서 실행되는 클라우드 플랫폼으로 택시처럼 비용지불만으로 운전도 대신해주는 서비스로 이해할 수 있다.

<출처 : https://rubygarage.org/blog/iaas-vs-paas-vs-saas >

PaaS 주요 기능

PaaS 에서 일반적으로 제공하는 주요 기능 및 서비스는 다음과 같다.

연관 문서