확장성과 독립성을 극대화하는 API Gateway와 마이크로서비스

궁금하면 500원·2025년 2월 12일

MSA&아키텍처

목록 보기
41/45

API Gateway와 마이크로서비스 아키텍처

1. 마이크로서비스 아키텍처 개요

소프트웨어 개발에서 마이크로서비스 아키텍처는 하나의 거대한 애플리케이션을 여러 개의 독립적인 서비스로 나누어 개발하는 방식 입니다.

각 서비스는 특정 기능을 담당하며, 독립적으로 배포 및 확장이 가능 합니다.

이를 통해 개발팀은 변화에 더 빠르게 대응할 수 있고, 서비스별 기술 스택을 유연하게 선택할 수 있습니다.

모놀리식 아키텍처와의 차이점

과거에는 대부분의 애플리케이션이 모놀리식구조로 개발되었습니다.
이 방식에서는 모든 기능이 하나의 코드베이스에 통합되어 있어 유지보수와 확장이 어렵습니다.
예를 들어, 한 기능을 수정하려면 전체 애플리케이션을 다시 배포해야 하는 경우가 많아 운영 부담이 큽니다.

반면, 마이크로서비스 아키텍처는 서비스별로 독립적인 배포가 가능하며, 장애가 발생해도 다른 서비스에 영향을 최소화할 수 있습니다.
이를 통해 대규모 트래픽을 효과적으로 처리할 수 있으며, 필요에 따라 특정 서비스만 개별적으로 확장할 수도 있습니다.

2. API Gateway와 마이크로서비스의 상호작용

마이크로서비스 아키텍처에서는 여러 개의 독립적인 서비스가 존재하기 때문에, 클라이언트가 이들 서비스와 원활하게 통신할 수 있도록 API Gateway가 중요한 역할을 합니다.

API Gateway는 모든 요청을 중앙에서 관리하고, 적절한 서비스로 요청을 라우팅하는 역할을 수행합니다.

API Gateway의 주요 기능

  1. 요청 라우팅: 클라이언트의 요청을 적절한 마이크로서비스로 전달합니다.
  2. 보안 및 인증: JWT, OAuth 등의 인증 방식을 적용하여 보안을 강화합니다.
  3. 로드 밸런싱: 트래픽을 여러 서비스 인스턴스로 분산하여 부하를 줄입니다.
  4. 캐싱: 자주 요청되는 데이터를 캐싱하여 성능을 최적화합니다.
  5. 로깅 및 모니터링: 서비스 호출 정보를 기록하고, 성능을 모니터링합니다.

예를 들어, 사용자가 쇼핑몰 애플리케이션에서 상품 목록을 조회할 때, API Gateway는 요청을 상품 서비스로 전달하고, 해당 서비스에서 데이터를 조회한 후 클라이언트에게 응답을 반환하는 방식으로 동작합니다.

3. 마이크로서비스의 핵심 원칙

3.1 분산된 데이터 관리

마이크로서비스 아키텍처에서는 각 서비스가 독립적인 데이터 저장소를 관리합니다.
이를 통해 개별 서비스가 다른 서비스와의 의존성을 줄이고, 독립적인 배포와 확장이 가능합니다.
그러나 데이터 일관성을 유지하는 것이 중요하며, 이를 해결하기 위해 다음과 같은 방법이 사용됩니다.

  • 이벤트 기반 데이터 동기화: 서비스 간 이벤트를 발행하고 구독하는 방식으로 데이터 상태를 동기화 합니다.

  • API를 통한 데이터 접근: 하나의 서비스가 다른 서비스의 데이터를 직접 조회하는 대신 API를 통해 데이터를 가져옵니다.

  • 트랜잭션 관리: 분산 환경에서 트랜잭션 일관성을 유지하기 위한 패턴으로, 각 서비스가 개별적으로 트랜잭션을 처리하고, 오류 발생 시 롤백을 수행합니다.

3.2 서비스별 독립적 배포

각 서비스는 독립적으로 배포될 수 있어야 하며, 이를 통해 다음과 같은 이점을 얻을 수 있습니다.

빠른 배포 및 업데이트: 개별 서비스만 수정하여 배포할 수 있어 전체 시스템을 재배포할 필요가 없습니다.

  • 리스크 최소화: 하나의 서비스에 문제가 발생해도 전체 시스템에는 영향을 미치지 않습니다.

  • 기술적 유연성: 각 서비스가 독립적으로 존재하기 때문에, Java, Python, Go 등 다양한 기술 스택을 적용할 수 있습니다.

3.3 서비스 간 통신

마이크로서비스 간의 통신 방식은 크게 동기식과 비동기식으로 나눕니다.

3.3.1 동기식 API 통신

  • 한 서비스가 다른 서비스를 호출하고 응답을 받을 때까지 대기하는 방식입니다.

  • REST API 또는 gRPC가 대표적인 예입니다.

  • 장점: 요청 결과를 즉시 확인할 수 있고, 구현이 상대적으로 간단합니다.

  • 단점: 요청을 처리하는 동안 클라이언트가 대기해야 하며, 특정 서비스 장애 시 다른 서비스에도 영향을 미칠 수 있습니다.

3.3.2 비동기식 이벤트 기반 통신

  • 한 서비스가 이벤트를 발행하면, 이를 구독한 다른 서비스가 이벤트를 처리하는 방식입니다.

  • Kafka, RabbitMQ와 같은 메시지 브로커를 활용합니다.

  • 장점: 서비스 간 결합도가 낮아지고, 시스템의 탄력성이 향상됩니다.

  • 단점: 이벤트 순서 관리가 복잡하며, 추가적인 메시지 브로커 인프라가 필요합니다.

4. 마이크로서비스 모니터링: Prometheus & Grafana

마이크로서비스 아키텍처에서는 여러 개의 서비스가 독립적으로 운영되기 때문에, 전체 시스템의 상태를 효과적으로 모니터링하는 것이 필수적입니다.
이를 위해 Prometheus와 Grafana를 조합하여 사용합니다.

4.1 Prometheus: 메트릭 수집 및 저장

  • 각 서비스에서 발생하는 메트릭 데이터를 수집하고 저장합니다.

  • Micrometer와 같은 라이브러리를 활용하여 Spring Boot 애플리케이션에서 메트릭을 쉽게 노출할 수 있습니다.

  • Prometheus Exporter를 통해 특정 서비스의 메트릭을 수집하고, 이를 Prometheus 서버에 저장합니다.

4.2 Grafana: 데이터 시각화

  • Prometheus에서 수집한 데이터를 시각화하여 대시보드 형태로 제공합니다.

  • 실시간 모니터링을 통해 시스템의 성능을 분석하고 장애 발생 여부를 신속히 파악할 수 있습니다.

  • 다양한 차트를 활용하여 CPU 사용률, 메모리 사용량, API 응답 시간 등을 한눈에 확인할 수 있습니다.

5. 마무리

마이크로서비스 아키텍처는 현대 소프트웨어 개발에서 필수적인 개념으로 자리 잡고 있습니다.
특히 API Gateway를 활용하면 서비스 간 통신을 효율적으로 관리할 수 있으며, Prometheus 및 Grafana를 이용한 모니터링을 통해 운영의 안정성을 확보할 수 있습니다.

이제 모놀리식 아키텍처에서 벗어나 유연하고 확장 가능한 시스템을 구축해본다면 마이크로서비스 도입은 어렵지만, 한 걸음씩 천천히 접근하면 어느새 유연한 서비스 아키텍처를 완성할 수 있을 것이라 생각합니다..

profile
에러가 나도 괜찮아 — 그건 내가 배우고 있다는 증거야.

0개의 댓글