💡 MSA란?
마이크로서비스 아키텍처(Microservice Architecture, MSA)는 대규모 애플리케이션을 독립적인 작은 서비스들로 나누어 개발하는 아키텍처 스타일입니다. 각 서비스는 개별적으로 배포되고, 필요에 따라 독립적으로 확장할 수 있어 높은 유연성을 제공합니다. 마이크로서비스는 비즈니스 기능 단위로 구분되며, 서로 다른 기술 스택을 사용하고, HTTP나 RESTful API를 통해 통신합니다.
✨ MSA의 주요 특징
- 작은 서비스 집합: 각 서비스는 독립적으로 실행되며, 필요 시 개별적으로 배포할 수 있습니다.
- 서비스 간 독립성: 서로 다른 언어, 저장소, 기술을 사용하여 구성될 수 있습니다.
- 자동화된 배포: 마이크로서비스는 자동화된 배포 시스템을 통해 독립적으로 배포됩니다.
- 분산 시스템: 비즈니스 로직을 작은 서비스로 나누어 분산 처리합니다.
📌 모노리스(monolith) vs 마이크로서비스(microservice)
✅ 모노리스
- 하나의 단위로 개발되는 일체형 애플리케이션
- 스케일 아웃 시 모노리스 전체가 확장
- 단일 프로세스에서 실행되며, 복잡한 확장이 어려움
- 여러 인스턴스를 복제하여 수평 확장
- 여러 개의 모노리스 시스템 모두를 재빌드/재배포 해야함
- 데이터베이스가 통합되어 있어 탄력적 대응이 어려움
✅ 마이크로서비스
- 여러 개의 독립적인 서비스 인스턴스로 구성
- 각 서비스는 개별적으로 배포되고, 서로 다른 저장소를 가짐
- 서비스 간 통신은 API를 통해 이루어지며, 비즈니스 단위로 모듈화되어 있음
- 기술 스택을 자율적으로 선택 가능 (Polyglot 아키텍처)
- 클라우드 환경에서 효율적이고 유연한 확장 가능
➡️ 비교
마이크로서비스는 모놀리식 아키텍처보다 더 유연한 확장과 배포가 가능하며, 클라우드 환경에 적합한 아키텍처입니다.
📌 MSA와 클라우드 인프라 환경
MSA는 클라우드 인프라의 등장과 함께 주목받기 시작했습니다. 이전에는 각 기업의 독립적인 시스템과 벤더 제품에 강하게 의존했으나, 클라우드 기술이 발전하면서 오픈소스와 상용 솔루션들의 호환성 덕분에 유연한 아키텍처 설계가 가능해졌습니다. 특히, 클라우드 네이티브 애플리케이션 구조로 마이크로서비스가 주목받고 있습니다.
📌 MSA의 단점
- 복잡성 및 러닝 커브: MSA는 모놀리식 아키텍처보다 구조가 복잡하며, 이를 관리하려면 다양한 기술에 대한 학습이 필요합니다.
- 테스트 및 배포의 복잡성: 여러 개의 서비스를 테스트하고 배포하는 과정이 복잡하고 비용이 많이 듭니다.
- 데이터 관리: 분산 환경에서 데이터 무결성 및 정합성 유지가 어려워지며, 이를 위한 추가적인 기술과 노력이 필요합니다.
- 서비스 간 의존성: API를 통한 서비스 간 연결에서 의존성이 발생할 수 있으며, 서비스 장애가 다른 서비스에 영향을 미칠 수 있습니다.
- 리소스 사용량 증가: 모놀리식 아키텍처보다 리소스 사용량이 많아져 운영 비용이 증가할 수 있습니다.
➡️ 따라서, MSA 도입을 고려할 때는 모놀리식 아키텍처로 해결할 수 있는 문제는 그대로 유지하고, 필요한 경우에만 MSA를 점진적으로 도입하는 것이 바람직합니다.
💡MSA 구성 요소와 패턴
📌 외부 아키텍처와 내부 아키텍처
MSA 아키텍처는 크게 외부 아키텍처와 내부 아키텍처로 나눠집니다.
✅ 외부 아키텍처
마이크로서비스가 운영되는 환경을 의미하며, 어플리케이션 영역, 플랫폼 영역, 인프라 영역으로 나뉩니다.
- 어플리케이션 영역
- 사용자 인터페이스와 핵심 서비스가 위치하는 영역입니다. 여기서는 사용자가 직접 상호작용하는 부분과 애플리케이션의 주요 기능이 포함됩니다.
- 예시: 프론트엔드/백엔드, DATABASE, 모바일/브라우저 등
- 플랫폼 영역
- 애플리케이션을 구동하고 관리하는 인프라 환경입니다. 플랫폼 서비스는 애플리케이션의 배포, 관리, 모니터링 등을 지원합니다.
- 플랫폼 서비스: DevOps 파이프라인, 로깅, 라이브러리 관리, 보안 서비스 등
- MSA 기반 서비스 : API 게이트웨이, 모니터링 시스템, 구성 관리 도구, 서비스 탐색 시스템 등
- 인프라 영역
- 하드웨어와 네트워크와 같은 물리적 인프라를 포함하는 영역으로, 애플리케이션을 실행할 수 있는 기반을 제공합니다.
- 예시: 서버, 네트워크, 클라우드 인프라 등
✅ 내부 아키텍처
내부 아키텍처는 비즈니스 로직, API 통신, 데이터 저장 및 처리 등의 핵심 구조를 다룹니다. 이 영역은 애플리케이션의 동작을 결정짓는 중요한 요소들이 포함되며, 마이크로서비스 간의 상호작용을 효율적으로 관리합니다.
- 비즈니스 로직: 서비스의 핵심 기능과 처리 흐름을 정의합니다.
- API 통신: 마이크로서비스 간의 데이터를 교환하는 방법을 정의합니다.
- 데이터 저장 및 처리: 데이터를 어떻게 저장하고 처리할지에 대한 설계를 포함합니다.
📌 인프라 구성 요소
마이크로서비스가 실행되는 하부 구조 인프라는 애플리케이션의 동작 환경을 제공하며, 이 구성 요소는 크게 두 가지 주요 환경으로 나눠집니다:
- 퍼블릭 클라우드 환경
- IaaS(서비스형 인프라), PaaS(서비스형 플랫폼) 기반 환경으로, 서비스 제공자가 하드웨어와 소프트웨어 인프라를 관리하고 사용자는 필요에 따라 리소스를 사용합니다.
- 프라이빗 클라우드 + 베어메탈 환경
- 프라이빗 클라우드는 전용 데이터센터에서 제공되는 인프라를 의미하며, 베어메탈은 가상화 없이 직접 하드웨어에서 실행되는 서버 환경을 의미합니다.
📌 플랫폼 패턴
마이크로서비스의 운영 및 관리를 지원하는 플랫폼 차원의 패턴은 두 가지 주요 분야로 나눠집니다:
- 개발 지원 환경 : DevOps와 CI/CD 파이프라인을 활용하여 자동화된 빌드, 테스트, 배포 환경을 제공합니다.
- CI(지속적 통합): 개발자들이 작성한 소스 코드와 테스트 코드를 자동으로 통합하여 빌드 및 테스트 과정을 자동화하는 패턴입니다.
- CD(지속적 제공 / 배포): CI 이후에 빌드된 소스 코드를 실행 환경에 자동으로 배포하는 과정으로, 운영 환경에서의 배포를 지속적으로 관리합니다.
- 마이크로서비스 관리 : 효율적인 운영과 관리를 위한 다양한 패턴이 사용됩니다:
- 서비스 레지스트리 패턴: 마이크로서비스의 주소와 IP를 매핑하여 관리하며, 서비스의 동적 변화를 추적합니다.
- 서비스 디스커버리 패턴: 클라이언트가 여러 개의 마이크로서비스를 호출할 때 최적 경로를 찾고 부하 분산을 위해 로드 밸런싱을 수행합니다.
- API 게이트웨이 패턴: 서비스의 단일 진입점을 제공하며, 동적 라우팅, 로드 밸런싱 등 다양한 기능을 제공합니다.
- BFF 패턴 (Backend for Frontend): 프론트엔드 유형에 맞춰 개별적으로 진입점을 두고, API 게이트웨이 앞에서 클라이언트별 최적화된 처리를 수행합니다.
- 외부 구성 저장소 패턴: 각 마이크로서비스의 환경 설정 정보를 분리하여 외부 저장소에 저장하고 일관되게 관리합니다.
- 인증 / 인가 패턴: 중앙 집중식 세션 관리와 클라이언트 토큰을 활용한 인증 관리 방법으로, 보안을 강화합니다.
- 서킷 브레이커 패턴: 장애가 발생한 서비스를 격리하여 시스템 전체의 안정성을 유지합니다.
- 모니터링과 추적 패턴: 서비스 상태를 모니터링하고, 서비스 간 트랜잭션 호출을 추적하는 패턴으로 시스템 운영을 최적화합니다.
- 중앙화된 로그 집계 패턴: 로그를 스트림 형태로 처리하여 서비스는 로그 전달 및 저장에 관여하지 않도록 하며, ELK(Elasticsearch-Logstash-Kibana), EFK(Elasticsearch-Fluentd-Kibana), PLG(Promtail-Loki-Grafana) 등 다양한 도구가 사용됩니다.
📌 어플리케이션 패턴
마이크로서비스 어플리케이션을 구성하는 다양한 패턴들이 있습니다. 이들은 서비스 간의 호출, 트랜잭션 처리, 데이터 관리 등을 효율적으로 다루기 위해 사용됩니다
- 동기 및 비동기 통신 패턴: 서비스 간에 동기적으로 데이터를 교환하는 방식과 비동기적으로 메시지를 전달하는 방식을 설정합니다.
- 저장소 분리 패턴: 각 마이크로서비스는 독립적인 데이터베이스나 저장소를 가지고, 데이터 중복을 최소화하고, 서비스 간의 의존성을 줄입니다.
- 분산 트랜잭션 처리 패턴 (Saga 패턴): 여러 서비스가 참여하는 트랜잭션을 처리하기 위한 패턴으로, 트랜잭션이 실패할 경우 이를 복구하는 방법을 제공합니다.
'Cloud' 카테고리의 다른 글
[Spring Cloud Netflix Eureka] 개념 및 사용 방법 (1) | 2025.03.17 |
---|---|
[Cloud] MSA를 위한 Spring Cloud 개념 및 기능 (0) | 2025.03.14 |