개발 공부/Spring
[Spring] MSA(MicroService Architecture)
훌룽이
2024. 8. 20. 09:49
MSA
- 작고 독립적으로 배포 가능한 각각의 기능을 하는 서비스들로 구성된 아키텍쳐
- 모놀리식 서비스에서 각각의 비즈니스 로직을 분리하여 개별 프로젝트로 생성한 뒤 가장 앞단에 API Gateway와 같은 분배기를 통해 각 서비스 서버에 요청을 분산하여 관리
- 애플리케이션을 느슨하게 결합된 서비스의 모임으로 구조화하는 서비스 자향 아키텍쳐
- 서비스는 기능별로 구분
- 서비스의 교체가 쉽다
- 각 서비스의 최적인 개발언어 DB, HW , 소프트웨어 환경을 사용하여 구현
- 각 서비스는 독립적인 배포가 가능
MSA 장단점
장점
- 서비스별 스케일링 가능
- 서비스별 다른 프레임워크 사용 가능 (서비스 별 독자적 운영)
- 하나의 서비스가 off 되더라도 나머지 동작 가능
- 부분적으로 로직 업데이트 가능
단점
- 초기 구성의 난이도
- 시스템이 돌아가지만 특정 서비스가 off되면 재기능을 못할 수 있음
- 서버간 호출 비용
- 분산 관리
REST API
REST(Representational State Transfer)란 어떤 자원에 대하여 HTTP URL 및 HTTP Method를 통해 CRUD 연산을 수행하는 것
- GET
- URL에 데이터를 포함시켜 전송
- 데이터를 헤더에 포함하여 전송
- URL에 데이터가 노출되어 보안에 취약
- 캐싱할 수 있음
- READ 할 때 주로 사용
- POST
- URL에 데이터를 노출하지 않고 요청
- 데이터를 바디에 포함
- URL에 데이터가 노출되지 않아 GET 방식보다 보안이 높음
- 캐싱할 수 없음
- 노출되면 않되는 데이터를 전송해야 할 때(ex. 로그인) 할 떄 주로 사용
API Gateway
API 서버 앞단에서 모든 API 서버들의 엔드포인트를 단일화 해주는 또다른 서버이다. 이 서버는 클라이언트 요청에 대해 어플리케이션 내부의 마이크로 서비스로 라우팅하는 역할을 수행 → 클라이언트 - 마이크로서비스 중개자
- API Gateway의 주요기능
- 인증 및 인가
- 로깅 및 모니터링
- 부하 분산
- API Gateway의 장점
- 단일 진입점
- 프로토콜 및 데이터 변환
- 보안 및 권한 관리
- 로깅과 모니터링
- 부하 분산과 캐싱
- 이중화 및 회복성
- 버전 관리
스프링 부트
비지니스 로직 처리를 담당하기 위한 어플리케이션 서버. 즉 특정 경로에 대한 컨트롤러를 통해 요청 처리를 진행한다.
- Spring Cloud Gateway : SCG
URL 주소에 대해서 아래 세부 경로에 따라 각각의 스프링 부트 어플리케이션에 분배하는 분배기 역할을 수행 - Spring Cloud Eureka Server
모니터링 서버로 Eureka Client 설정을 해둔 서버를 Eureka Server에 띄워 줌 모니터링 기능과 함께 추가적으로 Spring Cloud Gateway에 목록을 전달하여 Gateway가 로드밸런싱 대상을 설정하도록 작업 - Spring Cloud Eureka Client
Eureka Server에 등록되는 요소로 스프링 부트 어플리케이션과 같은 여러 스프링 프레임워크 서버에 설정이 가능하다. - Spring Config Server
변수 값들을 제공하는 서버로 특정 경로로 접근하면 미리 사전에 설정해둔 변수 값들을 제공 받을 수 있다. MSA를 구축하면 각각의 스프링 부트 어플리케이션에 application.properties에 값을 명시하는 것이 아닌 config server로 부터 데이터를 받아서 사용한다. - Config Repository
Config Server는 단순하게 데이터를 전달하는 매개체로 실제 데이터는 Config Server 뒷단에 깃허브 리포지토리와 같은 저장소를 물려서 사용한다. - Spring Config Client
Config Server로 부터 변수 데이터를 받기 위한 Client 서버 설정