1. API 게이트웨이 서비스
사용자의 라우팅 설정에 따라서 클라이언트를 대신해 요청하고 응답을 받으면 클라이언트에게 전달해주는 proxy 역할
시스템 내부구조 숨기고 외부의 요청에 대해 적절한 형태로 가공해 응답 가능
모바일/웹 앱에서 요청한 것(프론트 형태에 상관없이)을 API게이트웨이가 각각의 마이크로 서비스로 요청되는 모든 정보에 대해 일괄처리
클라이언트는 마이크로서비스를 직접 호출하지 않고, API 게이트웨이만 상대.
스프링 클라우드에서 MSA간의 통신 방법
1. RestTemplate
2. Feign Client
로드밸런서 위치?
1) Netflix Ribbon : 현재는 비동기처리가 잘 되지 않아 사용하지 않음 -> 현재는 Spring cloud loadbalancer
- 외부 마이크로 서비스를 호출하기위해 ip와 port로 명시하는 것이 아니라, 서비스 이름으로 호출
- 클라이언트 사이드 로드밸런서 : 클라이언트 프로그램안에서 이동하고자하는 마이크로서비스의 주소값을 직접 관리
- Health Check 가능 (정상작동하는지)
2) Netflix Zuul : Springboot 2.4에서도 사용할수 없는 상태 -> 현재는 Spring cloud gateway
- 라우팅, API 게이트웨이
- 동기 방식 지원 -> functional / 비동기 방식 지원하지 않음 => Spring Cloud Gateway 사용
--- 실습 ---
zuul 사용 (2.3 버전대까지만 사용 가능)
cloudRouting에 zuul 의존성 추가
yml파일
server:
port: 8000
spring:
application:
name: zuul-service
zuul:
routes:
first-service:
path: /first-service/**
url: http://localhost:8081
second-service:
path: /second-service/**
url: http://localhost:8082
이렇게 설정한 경우, 8081서비스와 8082 서비스가 모두 정상 작동할 경우에
zuul서비스의 포트 한번에 두 가지 서비스를 모두 호출할 수 있다.
예를들어 http://localhost:8000/first-service/welcome = http://localhost:8081/welcome
Zuul 사전 필터 생성
@Component
@Slf4j
public class ZuulLoggingFilter extends ZuulFilter {
@Override
public String filterType() {
return "pre"; // 사전
}
@Override
public int filterOrder() {
return 1;
}
@Override
public boolean shouldFilter() {
return true; // 필터 사용
}
@Override
public Object run() throws ZuulException {
log.info("******************** printing logs : ");
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
log.info("******************** " + request.getRequestURI());
return null;
}
}
2025-01-06 13:25:56.344 INFO 15108 --- [nio-8000-exec-1] c.example.zuulservice.ZuulLoggingFilter : ******************** printing logs :
2025-01-06 13:25:56.344 INFO 15108 --- [nio-8000-exec-1] c.example.zuulservice.ZuulLoggingFilter : ******************** /first-service/welcome
2025-01-06 13:26:11.856 INFO 15108 --- [nio-8000-exec-3] c.example.zuulservice.ZuulLoggingFilter : ******************** printing logs :
2025-01-06 13:26:11.856 INFO 15108 --- [nio-8000-exec-3] c.example.zuulservice.ZuulLoggingFilter : ******************** /second-service/welcome
주소에 접속하면 사전 필터에서 설정한 로그를 확인할 수 있다.
'백엔드 Backend > 서버 Server' 카테고리의 다른 글
Spring Cloud Config - 분산 시스템 설정 관리 (0) | 2025.01.14 |
---|---|
Eureka + Spring Cloud Gateway 구현하기 (0) | 2025.01.07 |
API 게이트웨이 서비스 - (2) Spring Cloud Gateway (0) | 2025.01.06 |
Spring Boot 프로젝트를 Docker 이미지로 빌드하기 (1) | 2024.08.02 |
Git + Jenkins + Docker로 서버와 CI/CD구축하기 (0) | 2024.08.02 |