[Cloud] MSA에 대해 알아보기

2025. 3. 14. 17:04·Cloud
728x90
반응형

💡 MSA란?

마이크로서비스 아키텍처(Microservice Architecture, MSA)는 대규모 애플리케이션을 독립적인 작은 서비스들로 나누어 개발하는 아키텍처 스타일입니다. 각 서비스는 개별적으로 배포되고, 필요에 따라 독립적으로 확장할 수 있어 높은 유연성을 제공합니다. 마이크로서비스는 비즈니스 기능 단위로 구분되며, 서로 다른 기술 스택을 사용하고, HTTP나 RESTful API를 통해 통신합니다.

 

✨ MSA의 주요 특징

  • 작은 서비스 집합: 각 서비스는 독립적으로 실행되며, 필요 시 개별적으로 배포할 수 있습니다.
  • 서비스 간 독립성: 서로 다른 언어, 저장소, 기술을 사용하여 구성될 수 있습니다.
  • 자동화된 배포: 마이크로서비스는 자동화된 배포 시스템을 통해 독립적으로 배포됩니다.
  • 분산 시스템: 비즈니스 로직을 작은 서비스로 나누어 분산 처리합니다.

📌 모노리스(monolith) vs 마이크로서비스(microservice)

✅ 모노리스

  • 하나의 단위로 개발되는 일체형 애플리케이션
  • 스케일 아웃 시 모노리스 전체가 확장
  • 단일 프로세스에서 실행되며, 복잡한 확장이 어려움
  • 여러 인스턴스를 복제하여 수평 확장
  • 여러 개의 모노리스 시스템 모두를 재빌드/재배포 해야함
  • 데이터베이스가 통합되어 있어 탄력적 대응이 어려움

✅  마이크로서비스

  • 여러 개의 독립적인 서비스 인스턴스로 구성
  • 각 서비스는 개별적으로 배포되고, 서로 다른 저장소를 가짐
  • 서비스 간 통신은 API를 통해 이루어지며, 비즈니스 단위로 모듈화되어 있음
  • 기술 스택을 자율적으로 선택 가능 (Polyglot 아키텍처)
  • 클라우드 환경에서 효율적이고 유연한 확장 가능

➡️ 비교
마이크로서비스는 모놀리식 아키텍처보다 더 유연한 확장과 배포가 가능하며, 클라우드 환경에 적합한 아키텍처입니다.


📌 MSA와 클라우드 인프라 환경

MSA는 클라우드 인프라의 등장과 함께 주목받기 시작했습니다. 이전에는 각 기업의 독립적인 시스템과 벤더 제품에 강하게 의존했으나, 클라우드 기술이 발전하면서 오픈소스와 상용 솔루션들의 호환성 덕분에 유연한 아키텍처 설계가 가능해졌습니다. 특히, 클라우드 네이티브 애플리케이션 구조로 마이크로서비스가 주목받고 있습니다.


📌 MSA의 단점

  1. 복잡성 및 러닝 커브: MSA는 모놀리식 아키텍처보다 구조가 복잡하며, 이를 관리하려면 다양한 기술에 대한 학습이 필요합니다.
  2. 테스트 및 배포의 복잡성: 여러 개의 서비스를 테스트하고 배포하는 과정이 복잡하고 비용이 많이 듭니다.
  3. 데이터 관리: 분산 환경에서 데이터 무결성 및 정합성 유지가 어려워지며, 이를 위한 추가적인 기술과 노력이 필요합니다.
  4. 서비스 간 의존성: API를 통한 서비스 간 연결에서 의존성이 발생할 수 있으며, 서비스 장애가 다른 서비스에 영향을 미칠 수 있습니다.
  5. 리소스 사용량 증가: 모놀리식 아키텍처보다 리소스 사용량이 많아져 운영 비용이 증가할 수 있습니다.

➡️ 따라서, MSA 도입을 고려할 때는 모놀리식 아키텍처로 해결할 수 있는 문제는 그대로 유지하고, 필요한 경우에만 MSA를 점진적으로 도입하는 것이 바람직합니다.


💡MSA 구성 요소와 패턴

📌  외부 아키텍처와 내부 아키텍처

MSA 아키텍처는 크게 외부 아키텍처와 내부 아키텍처로 나눠집니다.

✅ 외부 아키텍처 

마이크로서비스가 운영되는 환경을 의미하며, 어플리케이션 영역, 플랫폼 영역, 인프라 영역으로 나뉩니다.

  • 어플리케이션 영역
    • 사용자 인터페이스와 핵심 서비스가 위치하는 영역입니다. 여기서는 사용자가 직접 상호작용하는 부분과 애플리케이션의 주요 기능이 포함됩니다.
    • 예시: 프론트엔드/백엔드, DATABASE, 모바일/브라우저 등
  • 플랫폼 영역
    • 애플리케이션을 구동하고 관리하는 인프라 환경입니다. 플랫폼 서비스는 애플리케이션의 배포, 관리, 모니터링 등을 지원합니다.
    • 플랫폼 서비스: DevOps 파이프라인, 로깅, 라이브러리 관리, 보안 서비스 등
    • MSA 기반 서비스 : API 게이트웨이, 모니터링 시스템, 구성 관리 도구, 서비스 탐색 시스템 등
  • 인프라 영역
    • 하드웨어와 네트워크와 같은 물리적 인프라를 포함하는 영역으로, 애플리케이션을 실행할 수 있는 기반을 제공합니다.
    • 예시: 서버, 네트워크, 클라우드 인프라 등

✅ 내부 아키텍처

내부 아키텍처는 비즈니스 로직, API 통신, 데이터 저장 및 처리 등의 핵심 구조를 다룹니다. 이 영역은 애플리케이션의 동작을 결정짓는 중요한 요소들이 포함되며, 마이크로서비스 간의 상호작용을 효율적으로 관리합니다.

  • 비즈니스 로직: 서비스의 핵심 기능과 처리 흐름을 정의합니다.
  • API 통신: 마이크로서비스 간의 데이터를 교환하는 방법을 정의합니다.
  • 데이터 저장 및 처리: 데이터를 어떻게 저장하고 처리할지에 대한 설계를 포함합니다.

📌 인프라 구성 요소

마이크로서비스가 실행되는 하부 구조 인프라는 애플리케이션의 동작 환경을 제공하며, 이 구성 요소는 크게 두 가지 주요 환경으로 나눠집니다:

  1. 퍼블릭 클라우드 환경
    • IaaS(서비스형 인프라), PaaS(서비스형 플랫폼) 기반 환경으로, 서비스 제공자가 하드웨어와 소프트웨어 인프라를 관리하고 사용자는 필요에 따라 리소스를 사용합니다.
  2. 프라이빗 클라우드 + 베어메탈 환경
    • 프라이빗 클라우드는 전용 데이터센터에서 제공되는 인프라를 의미하며, 베어메탈은 가상화 없이 직접 하드웨어에서 실행되는 서버 환경을 의미합니다.

📌 플랫폼 패턴

마이크로서비스의 운영 및 관리를 지원하는 플랫폼 차원의 패턴은 두 가지 주요 분야로 나눠집니다:

  1. 개발 지원 환경 : DevOps와 CI/CD 파이프라인을 활용하여 자동화된 빌드, 테스트, 배포 환경을 제공합니다.
    • CI(지속적 통합): 개발자들이 작성한 소스 코드와 테스트 코드를 자동으로 통합하여 빌드 및 테스트 과정을 자동화하는 패턴입니다.
    • CD(지속적 제공 / 배포): CI 이후에 빌드된 소스 코드를 실행 환경에 자동으로 배포하는 과정으로, 운영 환경에서의 배포를 지속적으로 관리합니다.
  2. 마이크로서비스 관리 : 효율적인 운영과 관리를 위한 다양한 패턴이 사용됩니다:
    • 서비스 레지스트리 패턴: 마이크로서비스의 주소와 IP를 매핑하여 관리하며, 서비스의 동적 변화를 추적합니다.
    • 서비스 디스커버리 패턴: 클라이언트가 여러 개의 마이크로서비스를 호출할 때 최적 경로를 찾고 부하 분산을 위해 로드 밸런싱을 수행합니다.
    • API 게이트웨이 패턴: 서비스의 단일 진입점을 제공하며, 동적 라우팅, 로드 밸런싱 등 다양한 기능을 제공합니다.
    • BFF 패턴 (Backend for Frontend): 프론트엔드 유형에 맞춰 개별적으로 진입점을 두고, API 게이트웨이 앞에서 클라이언트별 최적화된 처리를 수행합니다.
    • 외부 구성 저장소 패턴: 각 마이크로서비스의 환경 설정 정보를 분리하여 외부 저장소에 저장하고 일관되게 관리합니다.
    • 인증 / 인가 패턴: 중앙 집중식 세션 관리와 클라이언트 토큰을 활용한 인증 관리 방법으로, 보안을 강화합니다.
    • 서킷 브레이커 패턴: 장애가 발생한 서비스를 격리하여 시스템 전체의 안정성을 유지합니다.
    • 모니터링과 추적 패턴: 서비스 상태를 모니터링하고, 서비스 간 트랜잭션 호출을 추적하는 패턴으로 시스템 운영을 최적화합니다.
    • 중앙화된 로그 집계 패턴: 로그를 스트림 형태로 처리하여 서비스는 로그 전달 및 저장에 관여하지 않도록 하며, ELK(Elasticsearch-Logstash-Kibana), EFK(Elasticsearch-Fluentd-Kibana), PLG(Promtail-Loki-Grafana) 등 다양한 도구가 사용됩니다.

📌  어플리케이션 패턴

마이크로서비스 어플리케이션을 구성하는 다양한 패턴들이 있습니다. 이들은 서비스 간의 호출, 트랜잭션 처리, 데이터 관리 등을 효율적으로 다루기 위해 사용됩니다

  • 동기 및 비동기 통신 패턴: 서비스 간에 동기적으로 데이터를 교환하는 방식과 비동기적으로 메시지를 전달하는 방식을 설정합니다.
  • 저장소 분리 패턴: 각 마이크로서비스는 독립적인 데이터베이스나 저장소를 가지고, 데이터 중복을 최소화하고, 서비스 간의 의존성을 줄입니다.
  • 분산 트랜잭션 처리 패턴 (Saga 패턴): 여러 서비스가 참여하는 트랜잭션을 처리하기 위한 패턴으로, 트랜잭션이 실패할 경우 이를 복구하는 방법을 제공합니다.
 
 

 

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Cloud' 카테고리의 다른 글

[Spring Cloud Netflix Eureka] 개념 및 사용 방법  (1) 2025.03.17
[Cloud] MSA를 위한 Spring Cloud 개념 및 기능  (0) 2025.03.14
'Cloud' 카테고리의 다른 글
  • [Spring Cloud Netflix Eureka] 개념 및 사용 방법
  • [Cloud] MSA를 위한 Spring Cloud 개념 및 기능
예롱메롱
예롱메롱
  • 예롱메롱
    예롱이의 개발 블로그
    예롱메롱
  • 전체
    오늘
    어제
    • 전체보기 (274)
      • 프로젝트 (35)
        • Wedle (12)
        • 인스타그램 클론 코딩 (13)
        • 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 (10)
      • 인프런 Spring 강의 정리 (79)
        • 스프링 입문 - 코드로 배우는 스프링 부트, 웹 .. (7)
        • Spring 핵심 원리 - 기본편 (9)
        • 모든 개발자를 위한 HTTP 웹 기본 지식 (8)
        • 자바 ORM 표준 JPA 프로그래밍 - 기본편 (11)
        • 실전! 스프링 부트와 JPA 활용1 - 웹 애플리.. (6)
        • 실전! 스프링 부트와 JPA 활용2 - API 개.. (5)
        • 실전! 스프링 데이터 JPA (7)
        • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (7)
        • 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 (11)
        • 실전! Querydsl (8)
      • Cloud (3)
      • Spring (6)
        • spring boot (5)
        • 소셜로그인 (1)
      • Docker (2)
      • DevOps (0)
      • Coding Test (114)
        • Programmers (37)
        • Baekjoon (76)
      • KB It's Your Life 6기 (1)
      • CS (18)
        • 알고리즘 (13)
        • 컴퓨터 구조 (1)
        • Operating System (0)
        • Network (0)
        • Database (4)
      • git (1)
      • Language (15)
        • Java (5)
        • C++ (6)
        • Python (4)
    • GITHUB GITHUB
    • INSTAGRAM INSTAGRAM
  • hELLO· Designed By정상우.v4.10.3
예롱메롱
[Cloud] MSA에 대해 알아보기
상단으로

티스토리툴바