
MSA
MSA(Microservices Architecture)란 하나의 애플리케이션을 여러 개의 독립적인 서비스로 분리하여 개발, 배포, 유지보수를 용이하게 하는 소프트웨어 아키텍처 스타일로, 모든 기능이 하나의 애플리케이션 내에 포함되는 모놀리식 아키텍처(Monolithic Architecture)와 반대되는 개념이다. 각 서비스는 특정 비지니스 기능을 수행하며 서로 독립적으로 동작하고 API를 통해 통신한다.
주요 특징
- 서비스 분리 : 애플리케이션을 여러 개의 독립적인 마이크로 서비스로 분리하며 각 서비스는 특정 기능을 담당
- 독립성 : 각 서비스는 독립적으로 배포 및 운영이 가능하며 특정 서비스만 개별적으로 확장이 가능하다. 서비스 간의 의존성을 최소화하여 하나의 서비스에 문제가 생겨도 다른 서비스에 영향을 미치지 않는다.
- 분산 데이터 관리 : 서비스마다 각각의 데이터베이스를 가질 수 있다. 데이터의 일관성을 유지하기 위해 이벤트 기반 아키텍처를 사용할 수 있다.
- 서비스 간 통신 : 주로 RESTful API, gRPC, 메시지 큐 등을 통해 이루어진다.
구성 요소
- API Gateway : 클라이언트의 요청을 받아 내부 서비스로 라우팅한다. 인증, 로깅, 로드 밸런싱의 역할을 수행한다.
- Eureka (Service Discovery) : 각 서비스의 위치를 동적으로 찾도록 도와주는 서비스 레지스트리의 역할을 한다.
- Config Server : 각 마이크로서비스들의 설정 정보를 중앙 관리한다.
[외부 클라이언트]
│
▼
[ API Gateway ]
┌───┴───┐
▼ ▼
[User] [Order] [Payment] ← 마이크로서비스
▲ ▲ ▲
│ │ │
[ Eureka (Service Discovery) ] ← 서비스 등록 및 검색
▲
│
[ Config Server ] ← 중앙 구성 관리
장점
- 독립성 : 특정 서비스만 업데이트 가능하며 각각의 서비스를 독립적으로 개발 할 수 있다.
- 확장성 : 트래픽이 많은 서비스만 개별적으로 확장 할 수 있어 비용 절감이 가능하다.
- 장애 격리 : 특정 서비스에 장애가 발생해도 전체 시스템이 다운되지 않는다.
단점
- 복잡성 : 서비스가 많아질수록 구현, 배포, 모니터링, 로깅이 어렵다. 또한 여러 서비스를 관리하기 위한 추가적인 인프라가 필요하다.
- 네트워크 지연 : 각 서비스의 호출이 많아지면 성능 저하가 발생할 수 있다.
- 데이터 일관성 : 각 서비스가 독립된 DB를 가지면 트랜잭션 처리가 어렵다.
MA VS MSA
| MA(모놀리식 아키텍처) | MSA(마이크로서비스) |
---|
구성 방식 | 하나의 큰 애플리케이션 | 여러 개의 작은 서비스 |
배포 방식 | 전체 서비스 재배포 필요 | 개별 서비스 배포 가능 |
확장성 | 전체 서비스 확장 필요 | 필요한 서비스만 확장 가능 |
개발 속도 | 팀 간 의존성 높음 | 독립적인 개발 가능 |
복잡성 | 비교적 간단 | 서비스 간 통신, 운영 복잡 |