본문 바로가기

Study

[내일배움캠프] MSA 강의 총 정리

728x90
반응형

1. 아키텍처의 패러다임 변화

기존의 모놀리틱(Monolithic) 구조가 모든 기능을 하나의 코드 베이스로 관리했다면, MSA는 서비스를 독립적인 최소 단위로 분할하여 관리합니다.

  • 변화의 이유: 시스템 규모가 커질수록 빌드/배포 시간이 늘어나고, 작은 오류가 전체 시스템 마비로 이어지는 문제를 해결하기 위함입니다.
  • 핵심 이점: 특정 서비스만 독립적으로 확장(Scaling)하거나 배포할 수 있어 유연성이 극대화됩니다.


 

2. 분산 서비스 관리 및 통신

서비스가 잘게 쪼개짐에 따라, 이들을 찾고 서로 연결해 주는 기술이 필수적입니다.

  • Eureka (Service Discovery): 수많은 서비스의 위치(IP, Port)를 등록하고 관리하는 '중앙 전화번호부' 역할을 합니다.
  • API Gateway: 모든 클라이언트 요청이 통과하는 단일 진입점입니다. 보안(인증/인가), 라우팅, 부하 분산을 통합 관리하여 클라이언트가 내부 구조를 몰라도 원활하게 요청할 수 있도록 돕습니다.
  • 통신 도구 (FeignClient & Ribbon): * FeignClient: 복잡한 HTTP 호출 코드를 인터페이스 선언만으로 간결하게 구현합니다.
    • Ribbon: 여러 서버 중 어디로 요청을 보낼지 결정하는 부하 분산(Load Balancing)을 담당합니다.

3. 시스템 안정성 및 보안 전략

분산된 환경에서는 장애가 전파되지 않도록 막고, 보안을 강화하는 것이 핵심입니다.

  • Resilience4j (Circuit Breaker): 특정 서비스 장애 시 차단기를 내려 시스템 전체로 장애가 번지는 것을 막고, 미리 준비된 Fallback(우회) 로직을 실행해 안정성을 유지합니다.
  • OAuth2 + JWT: 상태를 저장하지 않는(Stateless) 방식의 인증을 구현합니다. 각 서비스가 독립적으로 사용자 권한을 확인할 수 있어 MSA 환경에 최적화된 보안을 제공합니다.

4. 운영 효율화 및 모니터링

서비스가 많아질수록 관리의 복잡도가 높아지므로 이를 중앙화하고 시각화해야 합니다.

  • Spring Cloud Config: 여러 서비스의 설정값(yml)을 중앙에서 관리하며, 서버 재시작 없이도 변경 사항을 실시간으로 반영합니다.
  • 분산 추적 (Sleuth & Zipkin): * Sleuth: 요청마다 고유 ID를 부여해 서비스 간 호출 흐름을 로그에 남깁니다.
    • Zipkin: 이 로그 데이터를 시각화하여 어디서 병목이나 오류가 발생하는지 추적합니다.
  • Micrometer: CPU, 메모리, 요청 횟수 등 앱의 지표(Metric)를 수집하여 Prometheus 등의 모니터링 시스템과 연동합니다.

5. 진화된 데이터 처리와 인프라

  • 이벤트 드리븐 아키텍처 (EDA): 서비스 간에 직접 호출하는 대신 '이벤트'를 주고받아 결합도를 낮춥니다. 주로 Kafka, RabbitMQ와 같은 메시지 큐를 사용하여 대량의 스트림 데이터를 실시간으로 처리합니다.
  • 쿠버네티스 (Kubernetes): 컨테이너화된 MSA 서비스들의 배포, 확장, 관리를 자동화하는 오케스트레이션의 표준으로 활용됩니다.
반응형