Link Search Menu Expand Document

MSA란

요약


  • 모놀리스 아키텍처와 마이크로서비스 아키텍처 비교
  • 마이크로서비스 아키텍처 장단점 및 구조 설명
  • 구현 요소
  • 패턴

키워드


  • 아키텍처 선택의 기준
    • 프로젝트 규모, 기간, 요구사항, 고도화 여부
  • 모놀리식 아키텍처
    • 장점
      • 간단한 개발: 단일 애플리케이션 구축
      • 애플리케이션 변경 용이: 코드나 DB 스키마 변경이 쉬움
      • 테스트 용이: 애플리케이션 종단 테스트가 쉬움
      • 배포 용이: 단순히 톰캣 설치 경로에 WAS 복사
      • 확장 용이: 애플리케이션 인스턴스 여러 개 실행
    • 단점
      • 장점이 많아보이지만 시간이 흐름에 따라 개발/테스트/배포/확장은 어려워짐
      • 프로젝트 규모가 커지면서 개발자도 이해하기 힘든 기능 증가
      • 애플리케이션도 커지며 실행 속도, 빌드 시간이 지연
      • 동일 코드 베이스를 수정하며 소스 병합 어려움
      • 하나의 애플리케이션에 수정이 발생했으므로 전 기능에 대해 테스트하지 않으면 신뢰 저하
      • 하나의 모듈에만 버그가 있어도 인스턴스 다운될 가능성 증가
      • 신 기술을 적용하고 싶어도 모든 애플리케이션이 묶여있어 과거 기술 스택을 벗어날 수 없음
    • 요약

      애플리케이션 규모가 커질수록 유지보수성, 확장성, 테스트성에 영향을 받음

  • 마이크로서비스 아키텍처
    • 장점
      • 크고 복잡한 애플리케이션 지속적 전달/배포
      • 작은 단위의 서비스 관리 용이
      • 서비스 독립 배포/확장
      • 결함 격리 용이
      • 신기술 도입 용이
    • 단점
      • 강결합된 서비스의 분리가 쉽지 않음
      • 분산 시스템이 복잡해지면 개발/테스트/배포가 어려움
      • 여러 서비스에 걸친 공통 기능 배포
      • 도입 시점 결정 어려움
    • 아키텍처
      • 클라이언트 - 요청 시작
      • API 게이트웨이 - 호출됨
        • 인증서버 - 권한 인증 및 토큰 획득
        • 유레카 - 서비스 위치 조회 후 서비스(API) 호출
      • 서비스(API) - 호출됨
        • 인증서버 - 권한 인가
        • DB 접속 및 조회(비즈니스 로직)
        • HTTP 응답
    • 마이크로서비스 작성 지침
      • 적정 규모
        • 하나의 서비스가 너무 많은 책임을 지지 않도록 구현
      • 위치 투명성
        • 서비스 호출에 대한 물리적 정보를 관리
      • 회복성
        • 빠른 실패를 통해 실패한 서비스를 우회하고 애플리케이션 전반의 무결성을 보호하도록 구현
      • 반복성
        • 서비스의 모든 인스턴스가 새로 시작될 때 운영 환경의 타 서비스와 동일한 구성 및 코드베이스 보장
      • 확장성
        • 서비스 간 직접적인 종속 관계 최소화
  • 확장 큐브
    • 확장성을 위한 3가지 측면
      • 기능에 따른 애플리케이션 분리
      • 요청자에 따른 애플리케이션으로의 요청 분산
      • 애플리케이션 인스턴스 복제 확장
  • 클라우드 컴퓨팅
    • 물리 머신에 구축하고 배포하는 것은 스케일 업이나 회복성이 떨어질 수 있음
    • 클라우드 기반의 마이크로서비스는 탄력성(회복성)과 요청량에 따른 축소로 비용절감도 가능
      • CaaS, IaaS
    • PaaS 기반의 마이크로서비스는 컨테이너 추상화는 가능하다 제공업체의 솔루션 고유 특성이 있음
  • 패턴
    • 패턴 및 패턴 언어
      • 패턴이란 특정 상황에서 발생한 문제에 대해 재사용 가능한 해법이나 이미 검증된 아이디어
      • 패턴 언어란 특정 영역 내에서 문제 해결과 연관된 패턴 집합
    • 패턴 구조
      • 강제 조항
      • 결과 맥락
      • 연관 패턴
    • 애플리케이션 아키텍처의 문제 해결을 위한 패턴들
      • 아키텍처 패턴
        • 분해: 시스템을 여러 서비스로 분해하는 패턴(비즈니스, DDD)
        • DB
        • 쿼리
        • 데이터 일관성
        • 테스트
      • 애플리케이션 인프라 패턴
        • 횡단 관심사
        • 보안
        • *통신(트랜잭셔널 메시징,통신 유형,신뢰성)
      • 인프라 패턴
        • 배포
        • *통신(디스커버리,외부 API)

          *통신 패턴
          통신 유형: IPC(pipe, message queue, memory, socket), TCP/UDP
          디스커버리
          신뢰성
          트랜잭셔널 메시징
          외부 API

    • 마이크로서비스 주요 패턴 종류

      구현까지는 쉬워도 실제 환경에서의 운영은 다음과 같은 패턴들을 모두 고려해야 함

      • 핵심 개발 패턴
      • 라우팅 패턴 API 게이트웨이 사용을 통해 모든 서비스에 대한 단일 진입점 제공을 하며 일관된 보안 정책과 라우팅 규칙 적용
        • 서비스 디스커버리
        • 서비스 레지스트리
      • 클라이언트 탄력성 패턴
      • 보안 패턴
        • 인증
        • 인가
        • 자격증명 관리
        • OAuth 2.0
      • 로깅 및 추적 패턴 마이크로서비스 아키텍처는 단점인 한 동작으로 인한 수많은 호출 발생에 대한 추적과 모니터링을 필요로 함
        • 분산 추적(슬루스, 집킨, ELK 스택)
      • 애플리케이션 지표 패턴
      • 빌드 및 배포 패턴 서버 변경 사항으로 발생되는 구성 불일치를 최소화해야 함
  • 참고하면 좋을 패턴