코딩공작소
MSA(1) - 스프링, 클라우드와 만나다 본문
마이크로서비스 아키텍쳐의 이해
기업에서 마이크로서비스를 사용하는 이유
마이크로서비스 구축을 위한 스프링, 스프링 부트, 스프링 클라우드
클라우드와 클라우드 기반 컴퓨팅 모델의 이해
마이크로서비스란 ?
- 작고 느슨하게 결합된 분산 서비스 : 분해 와 분리가 핵심
왜 마이크로서비스를 사용해야 할까?
- 복잡성의 증가
- 제품 기능 분리를 통한 새로운 기능의 릴리즈 일시 조정
- 안정성과 확장성
- 회복성
애플리케이션을 분리하게 되면?
- 유연성 : 새로운 기능을 신속하게 제공하며 복잡성이 낮아지고 테스트 및 배포 시간 단축
- 회복성 : 애플케이션의 전체 장애 예방
- 확장성 : 국지적 확장 가능 및 비용효율 증대
스프링 마이크로서비스
스프링 부트 + 스프링 클라우드
- 개발 시간 단축, 효율성과 생산성 향상
- 웹 애플리케이션 실행을 위한 내장형 HTTP 서버 제공
- 많은 사용구 코드 작성 회피
- 스프링 데이터, 스프링 시큐리티, 스프링 클라우드 같은 스프링 생테계와 통합 용이
- 다양한 개발 플러그인 제공
정리하는 교재에서 구축하고자 하는 서비스 개요
- 요청 시작 --> 액세스 토큰 획득을 위한 키클록 인증
- API 게이트 웨이 요청 : API 게이트 웨이는 전체 아키텍처에 대한 진입점
- 조직 서비스에서 액세스 토큰 유효성 검증 후 DB 정보 갱신/조회 --> HTTP 응답
- 그 뒤에는 수많은 후작업이 존재
스프링 부트를 사용한 마이크로서비스 구현 --> 클라우드 환경에서 마이크로서비스 기반 애플리케이션 적용
그렇다면, 들어가기에 앞서 클라우드 컴퓨팅이란 정확히 무엇인가?
가상화된 IT서비스를 제공하는 것
- IaaS(Infrastructure as a Service) : 컴퓨팅 자원에 접근할 수 있는 인프라스트럭처 제공 (AWS EC2, Azure Virtual Machines, Google Compute Engine...)
- Caas(Container as a Service) : IaaS와 PaaS의 중간 모델, 컨테이너 기반 가상화된 형태 (GKE, ECS ...)
- Paas(Platfrom as a Service) : 개발, 싱행, 유지 관리에 집중할 수 있는 플랫폼과 환경 제공 (AWS Elastic Beanstalk)
- FaaS(Function as a Service) : 서비리스 아키텍처 (AWS lambda ...)
- SaaS(Software as Service) : 주문 형 소프트웨어로 대부분 웹 브라우저를 통해 사용
그렇다면 왜 클라우드와 마이크로서비스 인가?
- 간소화된 인프라스트럭처 관리
- 대규모 수평 확장성
- 지리적 분산을 이용한 높은 중복성
즉, 탄력성 개념을 기반에 둔다.
마이크로서비스 작성 지침
- 적정 규모 : 적절한 서비스 크기를 유지해야 한다
- 위치 투명성 : 다수의 서비스 인스턴스가 빠르게 시작하고 종료될 수 있어야 한다.
- 회복성 : 전반적인 무결성을 보호해야 한다.
- 반복성 : 인스턴스 간 동일한 구성과 코드베이스를 보장
- 확장성 : 확장할 수 있도록 종속 관게 최소화하는 통신 방식을 구축
핵심 마이크로서비스 개발 패턴
- 서비스 세분성 : 너무 크면 관리가 힘들고, 너무 세분하면 복잡성이 증가
- 통신 프로토콜 : 동기 프로토콜(XML, JSON ..) HTTP기반 REST or 비동기(래빗MQ, 카프카 등 메세지 브로커)
- 인터페이스 설계
- 서비스 구성 관리
- 서비스간 이벤트 처리
서비스 라우팅 패턴
요청을 받고 애플리케이션을 실행하기 위해서는 많은 마이크로서비스가 실행 될 수 있다. 그렇다면 서비스를 호출하는 단일 진입점이 필요하다. 여기에 2가지 패턴이 있다.
- 디스커버리 : 서비스를 탐색 가능하여 호출한다. 이는 내부 서비스이며, 서비스 간 통신 인프라스트럭처를 사용한다.
- 서비스 라우팅 : API 게이트웨이를 사용하면 모든 서비스에 대한 단일 진입점을 제공하여 일관된 보안 정책과 라우팅 규칙을 적용할 수 있다.
서비스 디스커버리와 서비스 라우팅은 모든 대규모 마이크로서비스 애플리케이션에서 핵심 부분이다 !!!
클라이언트 회복성
마이크로서비스에서는 문제가 연쇄적으로 소비자에게 전파되는 것을 막는 것에 매우 신중해야 한다.
- 클라이언트 부하 분산 : 호출이 정상 인스턴스에 분산되도록 인스턴스 위치를 캐싱하는 방법
- 회로 차단기 패턴 : 실패 중이거나 성능 문제를 겪는 서비스를 반복 호출되지 않도록 차단
- 풀백 패턴 : 다른 수단으로 서비스 클라이언트가 작업을 수행하도록 플러그인 메커니즘을 제공
- 벌크헤드 패턴 : 한 서비스의 오작동 호출이 다른 곳에 영향을 미치지 않도록 호출을 격리하는 방법
마이크로 서비스 보안 패턴
적절한 자격 증명을 가진 요청만 서비스를 호출할 수 있도록 보안 패턴을 아키텍쳐에 적용해야 한다.
- 인증 : 클라이언트가 누구인지 확인하는 방법
- 인가 : 수행 자격 여부 확인하는 방법
- 자격 증명 관리와 전파 : 한 트랜잭션에서 여러 서비스를 호출할 때 전파하는 것. 사용자를 인증 및 인가하고자 서비스 호출 간 전달되는 토큰(OAuth2, JWT)
로깅과 추적 패턴
마이크로 서비스 아키텍쳐의 단점은 수 많은 서비스가 호출 되기때문에 문제를 디버깅하고 추적 및 모니터링하기가 어렵다.
즉, 분산 추적을 달성하는 세 가지 핵심 로깅 및 추적 패턴이 있다.
- 로그 상관관계 : ID를 부여해 한 트랜잭션 내 고유 식별자로 추적한다.
- 로그 수집 : 모든 로그를 질의 가능한 단일 DB로 수집하고 트랜잭션 내 서비스 성능 특성을 이해할 수 있다.
- 마이크로서비스 추적 : 모든 서비스 간 클라이언트 트랜잭션 흐름을 시각화하고 성능 특성을 확인
지표 패턴
- 지표 : 어플리케이션 상태에 대해 중요한 정보를 생성하고 지표로 노출
- 지표 서비스 : 지표를 저장하고 질의하는 곳
- 지표 시각화 제품군 : 애플리케이션과 인프라스트럭처에 대한 비즈니와 연관된 시계열 데이터시각화
지표 모니터링은 마이크로서비스 아키텍처에 필수적이며, 높은 분산성으로 인해 모니터링 요구 사항이 모놀리식 구조보다 더 높은 경향이 있다.
'어플리케이션개발 > MSA' 카테고리의 다른 글
MSA(6) - 서비스 디스커버리 (0) | 2024.07.08 |
---|---|
MSA(5) - 스프링 클라우드 컨피그 서버 구성관리 (0) | 2024.07.03 |
MSA(4) - 도커 (0) | 2024.06.25 |
MSA(3) - 스프링 부트로 마이크로서비스 구축하기 (0) | 2024.06.25 |
MSA(2) - 스프링 클라우드를 통한 MSA 구축 (0) | 2024.06.24 |