일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Java
- 메모이제이션
- dp
- 이분 탐색
- 구간 트리
- Zuul
- 도커
- 서비스 디스커버리
- Spring Cloud Config
- 주울
- BFS
- 완전 탐색
- spring cloud
- 다익스트라
- 비트마스킹
- 트리
- Logback
- Gradle
- 스택
- 이분 매칭
- 유레카
- 구현
- 게이트웨이
- 플로이드 와샬
- spring boot
- 스프링 시큐리티
- 백트래킹
- docker-compose
- 달팽이
- ZuulFilter
- Today
- Total
목록Spring Cloud/Gateway (7)
Hello, Freakin world!
포스트 타입 필터는 주울에서 클라이언트에게 반환하는 응답을 감시, 수정하는 용도로 사용합니다. 이전에 사전 필터에서 correlation-id 라는 헤더를 모든 요청에 추가해서 보냈습니다. 그 과정에서 RequestContext에 저장했던 correlation-id를 응답에 추가하는 필터를 만들어 보겠습니다. 아주 간단합니다. ResponseFilter package springboot.cloud.zuulexample.filter; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException; import static org.spr..
이번에는 route 타입 필터를 작성해서 간단하게 A/B 테스트를 구현해보겠습니다. 전체 코드는 맨 아래 링크에서 확인 가능합니다. 시나리오 기존 member-service에서 /hello 엔드포인트가 버전업 됐습니다. 새로운 버전의 /hello를 고객들에게 직접 제공해 테스트해 보려고 합니다. 하지만 기존의 서비스를 한번에 새 버전으로 교체하는 건 위험부담이 크므로 기존 요청의 반만 새 버전으로 라우팅합니다. 라우팅 필터 작성 ABRoutingFilter import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException; import ..
먼저 사전 필터를 구현해보도록 하겠습니다. 필터를 구현하는 방법은 간단합니다. 주울에서 제공하는 추상 클래스인 ZuulFilter를 상속하면 됩니다. 서비스에 대한 요청 흐름을 추적하기 위해 correlation-id를 모든 요청에 추가하기로 하고 TrackingFilter 클래스를 생성합니다. TrackingFilter package springboot.cloud.zuulexample.filter; ... import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException; /* 게이트웨이로 들어오는 모든 요청에 correlation i..
주울은 클라이언트에게 단일 진입점을 제공하는 게이트웨이입니다. 모든 요청은 게이트웨이를 거쳐가기 때문에 보안, 로깅과 같은 횡단관심사들을 구현하기 딱 좋습니다. 이런 기능들은 필터를 통해 구현합니다. 필터들은 4가지 타입이 존재하며 아래와 같이 동작합니다. - pre-filter(사전 필터) - route-filter(경로 필터) - post-filter(사후 필터) - error-filter(에러 필터) 사전 필터 주울에서 서비스에 대한 요청이 발생하기 전에 호출됩니다. 요청 메세지의 형식을 확인하거나(특정 헤더를 포함하는지) 사용자가 인증 및 인가되었는지 확인하는 기능 등을 여기에 구현합니다. 사후 필터 서비스를 호출하고 받은 응답 받은 후 호출됩니다. 응답을 로깅하거나 에러 처리, 민감한 정보에 대..
서비스 타임아웃은 리본과 히스트릭스 각각 지정할 수 있습니다. 기본적으로 주울은 1초 이상 걸리는 호출을 종료하고 HTTP 504 에러를 반환합니다. 이는 히스트릭스에서 걸리는 타임아웃입니다. (유레카에 등록된 서비스는 기본적으로 이와 같이 동작하지만 그렇지 않은 경우엔 히스트릭스 설정을 따로 추가해야 됩니다.) 리본에서도 타임아웃을 지정할 수 있습니다. 기본값은 5000ms 입니다. 만약 5초 이상의 타임아웃을 지정하려면 리본의 기본값이 5초이기 때문에 리본에도 타임아웃을 새로 지정해야 합니다. 히스트릭스에서 타임아웃 지정 다음의 코드를 applicatoin.yml에 추가합니다. hystrix: command: default: excution.isolation.thread.timeoutInMillise..
이번 글에서는 주울로 들어오는 url을 라우팅하는 방법에 대해 살펴보겠습니다. 1. 서비스 디스커버리를 이용한 자동 경로 매핑 유레카가 연결돼있다면 기본적으로 동작하는 방식입니다. 아무런 설정이 없다면 이 방식으로 동작합니다. 이 방식은 유레카에 등록된 서비스 ID(applciation.name)을 이용해 url을 자동 매핑합니다. 직접 확인해볼까요? application.yml server: port: 9000 # eureka eureka: instance: prefer-ip-address: true client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://localhost:8761/eureka # a..
Zuul 이란? 간단하게 말하자면 넷플릭스에서 제공하는 게이트웨이 오픈소스 라이브러리다. Gateway 란? 게이트웨이란 MSA에서 클라이언트에게 분산된 서비스의 단일 진입점이 되는 프록시(리버스 프록시)서버다. MSA에서 보안, 로깅과 같은 횡단 관심사를 각 서비스에 적용하려면 코드 중복해서 사용해야 된다. 이러면 유지보수하기가 힘들어지는데, 그래서 단일 진입점인 게이트웨이에 보통 구현하게 된다. 클라이언트가 여러 서비스의 물리적 주소를 알 필요 없이 게이트웨이 주소만 알면 되는것도 장점이다. 목적 이번 글에서는 간단하게 Zuul을 유레카와 연결하고, 자동 생성된 경로들을 스프링 액츄에이터에서 제공하는 엔드 포인트로 확인하면서 마무리할 것이다. 그리고 게이트웨이 아래에 연결되는 서비스들은 서비스 디스커..