API 게이트웨이 서비스 - (1) Netfilx Zuul

2025. 1. 6. 13:28· 백엔드 Backend/서버 Server

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 - 분산 시스템 설정 관리  (3) 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
'백엔드 Backend/서버 Server' 카테고리의 다른 글
  • Eureka + Spring Cloud Gateway 구현하기
  • API 게이트웨이 서비스 - (2) Spring Cloud Gateway
  • Spring Boot 프로젝트를 Docker 이미지로 빌드하기
  • Git + Jenkins + Docker로 서버와 CI/CD구축하기
달래dallae
달래dallae
백엔드를 열심히 갈고 닦아서 광내봅시다 ~_~
달래dallae
머루랑달래랑
달래dallae
전체
오늘
어제
  • 분류 전체보기 (54)
    • 프로젝트 Project (14)
    • 백엔드 Backend (27)
      • 기본 개념 (13)
      • 서버 Server (9)
      • 스프링 Spring (1)
      • JPA (3)
    • 데이터베이스 Database (6)
      • MySQL (1)
      • Oracle (5)
    • 언어 Language (0)
      • 자바 Java (0)
      • 파이썬 Python (0)
    • 알고리즘 Algorithm (1)

블로그 메뉴

  • 홈
  • 글쓰기
hELLO · Designed By 정상우.v4.2.2
달래dallae
API 게이트웨이 서비스 - (1) Netfilx Zuul
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.