본문 바로가기

ETC

MSA 설계 시 고려사항, 개발 도입

728x90
반응형

MSA(Microservices Architecture)는 대규모 시스템을 작은 단위의 독립적인 서비스들로 나누어 설계하는 방법론이다.

각각의 서비스는 독립적으로 개발, 배포, 운영될 수 있고, 다른 서비스들과는 네트워크를 통해 통신한다.

전통적인 모놀리식 아키텍처와는 달리, MSA는 더 큰 유연성, 확장성, 유지보수성을 제공해 준다.

2024.09.20 - [ETC] - MSA (Micro Services Architecture)란?


MSA 설계 시 고려사항

1. 서비스 분리 기준

서비스를 어떻게 분리할 것인지가 매우 중요하다. 일반적으로 비즈니스 도메인에 따라 서비스가 나뉘게 된다.

예를 들어, 전자상거래 시스템에서는 사용자 관리, 상품 관리, 주문 관리, 결제 서비스 등을 각각 독립된 마이크로서비스로 나눌 수 있다.
도메인 주도 설계(DDD, Domain-Driven Design)를 활용하면 서비스 분리를 더 체계적으로 할 수 있다.

각 도메인을 명확히 정의하고, 그에 따라 서비스 경계를 설정하면, 비즈니스 로직의 변경이 시스템에 미치는 영향을 최소화할 수 있다.

2. 데이터 관리 및 분산

MSA는 각 서비스가 자신의 데이터를 관리할 수 있도록 하므로 데이터베이스 분산이 발생한다.

하나의 데이터베이스를 모든 서비스가 공유하는 것이 아니라, 각 서비스가 필요한 데이터만 관리하게끔 분산시키는 게 핵심이다.

이를 통해 데이터 독립성과 확장성을 얻을 수 있지만, 데이터 일관성 문제를 해결해야 한다.

분산 트랜잭션을 사용하는 대신 이벤트 기반 아키텍처사후 일관성(CQRS) 패턴을 적용해 비동기 방식으로 데이터 일관성을 유지할 수 있다.

3. 서비스 간 통신

마이크로서비스 간의 통신 방식도 중요한 요소이다. 일반적으로 HTTP/REST, gRPC, 메시지 큐(Kafka, RabbitMQ 등)를 사용해 통신한다.

  • 동기 통신은 HTTP/REST나 gRPC를 사용한 서비스 간의 실시간 통신을 의미한다.
  • 비동기 통신은 메시지 브로커를 통해 서비스를 연결한다. 주문 시스템에서 주문이 완료되면 메시지를 보내고, 결제 시스템이 이를 받아 처리하는 식으로, 두 서비스는 독립적으로 동작할 수 있다.

4. API Gateway 도입

마이크로서비스는 다수의 작은 서비스로 구성되기 때문에, 이를 관리하고 클라이언트와 통합적으로 연결해 줄 API Gateway가 필요하다. API Gateway는 클라이언트 요청을 적절한 마이크로서비스로 라우팅하고, 인증, 로깅, 요청 조작 등의 기능도 담당한다.

  • 인증 및 보안: API Gateway를 통해 각 서비스의 보안을 일관되게 관리할 수 있다.
  • 로드 밸런싱: 요청을 분산시켜 서비스 부하를 관리한다.

5. 서비스 디스커버리

각 마이크로서비스가 독립적으로 실행되기 때문에, 서비스가 어디에서 실행되고 있는지 알아야 한다.

서비스 디스커버리는 이를 관리해 주는 역할을 한다.

Eureka, Consul, Zookeeper 같은 서비스 디스커버리 툴을 사용해 각 서비스의 위치를 동적으로 파악하고, 클라이언트가 올바른 서비스에 연결될 수 있도록 도와준다.


MSA의 개발 도입

1. DevOps와 CI/CD

MSA는 독립적으로 배포되는 다수의 서비스로 구성되기 때문에, 이를 효과적으로 관리하려면 CI/CD(Continuous Integration/Continuous Deployment) 파이프라인과 DevOps 문화가 필수적이다.

  • CI/CD는 코드 변경 사항을 자동으로 빌드, 테스트, 배포하는 파이프라인을 의미한다. 각 서비스가 독립적으로 배포되기 때문에, 변경된 부분만 빠르게 반영할 수 있는 자동화 도구가 필요하다.
  • 컨테이너화오케스트레이션: MSA에서 서비스 간의 환경을 표준화하고 배포를 효율적으로 관리하기 위해 DockerKubernetes 같은 도구를 사용한다. Docker를 통해 서비스를 컨테이너로 패키징하고, Kubernetes로 다수의 컨테이너를 오케스트레이션할 수 있다.

2. 로그 및 모니터링

여러 마이크로서비스가 독립적으로 동작하기 때문에, 로그와 모니터링 시스템을 잘 설계해야 한다. 마이크로서비스에서 발생하는 로그는 한 곳으로 모아 통합적으로 분석할 수 있어야 하고, 서비스 상태를 모니터링하는 도구도 필요하다.

예를 들어, ELK Stack(Elasticsearch, Logstash, Kibana)나 Prometheus, Grafana 같은 도구를 사용해 로그와 메트릭스를 관리할 수 있다.

3. 트랜잭션 관리

마이크로서비스 환경에서는 서비스 간의 트랜잭션을 어떻게 처리할지가 중요한 이슈이다. 전통적인 ACID 트랜잭션은 서비스가 분산되면서 복잡해지므로, 이를 해결하기 위해 SAGA 패턴 같은 분산 트랜잭션 관리 기법을 사용할 수 있다.

SAGA 패턴은 각 서비스의 로컬 트랜잭션을 사용하고, 실패 시 보상 트랜잭션을 실행해 전체적인 일관성을 맞추는 방식이다.

728x90
반응형