분산 추적 (Distributed Tracing)
서비스 간 요청 흐름을 추적하고 모니터링하는 방법이다. MSA 환경에서는 여러 서비스가 협력하여 요청을 처리한다. 이 과정에서 호출 관계가 복잡해지고 문제 발생 시 원인 파악이 어려워진다.
주요 도구
- Micrometer
Spring 기반 애플리케이션에서 메트릭을 수집하고 모니터링하기 위한 라이브러리이다. - Zipkin
트레이스 데이터를 수집하고 시각화하는 분산 추적 시스템이다.
Spring Cloud Stream
이벤트 중심 설계를 지원하는 이벤트 드리븐 아키텍처를 구현하는 데 사용된다.
이벤트 드리븐 아키텍처 주요 개념
- 이벤트
시스템 내에서 발생하는 상태 변화나 행동을 나타내는 메시지이다. - 이벤트 소스
이벤트를 생성하여 이벤트 버스에 전달하는 역할을 한다. - 이벤트 버스
이벤트 소스와 핸들러 간의 메시지 전달을 중개한다. - 이벤트 핸들러
이벤트를 수신하여 처리하는 역할을 한다.
MSA를 무조건 도입해야 할까?
MSA는 서비스 확장성과 독립성을 제공하지만, 초기 도입 시 많은 자원과 인력이 필요하다. 빠른 프로토타입 개발을 원한다면 모놀리틱 아키텍처로 시작하고, 점진적으로 MSA로 전환하는 것도 방법이다. 일관성 있는 패턴을 유지하는 것이 중요하며, 기존에 합의된 구조를 따르는 것이 효율적이다. CRUD 관점에서 시스템을 이해하면 아키텍처 설계에 도움이 된다.
Kubernetes (쿠버네티스)
컨테이너화된 애플리케이션의 배포, 확장, 운영을 자동화하는 오픈소스 플랫폼이다.
Spring Cloud와 Kubernetes 비교
공통점 | 차이점 |
---|---|
MSA 확장성을 지원한다. | Spring Cloud는 애플리케이션 레벨에서 통신, 디스커버리, 구성 관리 문제를 해결하는 데 초점을 둔다. |
서비스의 배포, 관리, 확장을 용이하게 지원한다. | Kubernetes는 인프라 레벨에서 컨테이너 오케스트레이션과 관련된 문제를 해결하는 데 초점을 둔다. |
서비스 가용성을 높이고 자동 복구를 지원한다. | Spring Cloud는 마이크로서비스 패턴을 지원하며, Kubernetes는 인프라 운영 자동화에 초점을 둔다. |
Spring Cloud와 Kubernetes 통합
Kubernetes는 수평 확장과 자동화를 통해 대규모 트래픽을 처리하고 운영 부담을 줄일 수 있다. 하지만 초기 설정이 복잡하고 디버깅 난이도가 높아지는 점을 고려해야 한다.
추가 정리
- JWT 토큰
- 상위 권한 요구 시 실제 데이터 소스에서 조회해야 한다.
- 개인 정보 조회는 JWT 페이로드에서 처리해도 무방하다.
- Soft Delete 전략
- Deleted_At 필드를 활용하여 논리 삭제 처리 후 일정 시간 뒤 물리 삭제를 수행한다.
- 로드 밸런싱
- 호출 빈도가 높은 서비스(User)는 Ribbon을 설정해 로드 밸런싱을 적용할 수 있다.
- Message Queue 활용
- 누락을 방지해야 하는 서비스(Order)는 Message Queue로 비동기 처리하는 것이 좋다.
- 사용자 경험
- 에러가 아닌 대기로 처리하여 사용자에게 긍정적인 경험을 제공할 수 있다.