[Refactor] WebFlux 기반 필터 전환 - #28
Conversation
- WebFlux 기반 게이트웨이로 전환하기 위한 webflux 관련 의존성 추가
- 기존의 FeignClient 기반 코드를 WebClient로 대체
- 기존의 서블릿 기반 설정을 WebFlux 기반 설정으로 수정
- 기존의 서블릿 기반 게이트웨이 필터를 WebFlux 기반 필터로 교체 - WebFlux 필터 로직 검증용 통합 테스트 수행
- 불필요한 환경변수 설정 삭제
📝 Walkthrough개요게이트웨이 인증 파이프라인을 FeignClient 기반 동기식 서블릿 필터에서 WebClient 기반 비동기식 WebFlux 필터로 마이그레이션합니다. Caffeine 캐싱을 도입하고, 보안 설정과 테스트를 모두 리액티브 아키텍처로 재구성합니다. 변경사항서블릿에서 WebFlux로의 게이트웨이 마이그레이션
추정 코드 리뷰 투입도🎯 4 (Complex) | ⏱️ ~45분 관련 PR
추천 리뷰어
축하 시
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (3)
src/main/java/org/pgsg/gateway/client/AuthClient.java (2)
10-10: 💤 Low value주석 처리된 코드 제거 권장.
FeignClient 관련 주석 처리된 코드가 남아 있습니다. 이 PR에서 WebClient로 완전히 전환되었으므로 해당 주석을 제거하는 것이 좋습니다.
🧹 주석 제거
-//@FeignClient(name = "user-service", fallbackFactory = AuthClientFallbackFactory.class) `@Component` public class AuthClient {🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/main/java/org/pgsg/gateway/client/AuthClient.java` at line 10, Remove the leftover commented FeignClient annotation line in AuthClient.java (the line containing //@FeignClient(name = "user-service", fallbackFactory = AuthClientFallbackFactory.class)) since the project has switched to WebClient; simply delete that commented line so the codebase no longer contains unused Feign-related comments.
20-27: ⚡ Quick win외부 서비스 호출에 타임아웃 설정 권장.
user-service 호출 시 타임아웃이 설정되어 있지 않습니다. 외부 서비스 장애 시 요청이 무한정 대기할 수 있어 게이트웨이 안정성에 영향을 줄 수 있습니다.
⏱️ 타임아웃 설정 예시
public Mono<CommonResponse<AuthDto.TokenVerifyData>> verifyToken(AuthDto.TokenVerifyRequest request) { return webClient.post() .uri("/internal/v1/auth/verify") .bodyValue(request) .retrieve() .bodyToMono(new ParameterizedTypeReference<CommonResponse<AuthDto.TokenVerifyData>>() {}) + .timeout(java.time.Duration.ofSeconds(3)) .onErrorReturn(new CommonResponse<>(false, "인증 서비스 장애", new AuthDto.TokenVerifyData(false), null)); }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/main/java/org/pgsg/gateway/client/AuthClient.java` around lines 20 - 27, The verifyToken method currently makes an external call via webClient.post() without a timeout; add a reactor timeout to the returned Mono (e.g., append .timeout(Duration.ofSeconds(<n>)) after bodyToMono(...)) and handle timeout errors explicitly (use onErrorResume to convert TimeoutException or other errors into the same CommonResponse fallback used now) so verifyToken returns a timely failure instead of hanging; update references in this method (verifyToken, webClient.post(), bodyToMono(...), onErrorReturn) accordingly.src/main/java/org/pgsg/gateway/filter/JwtGatewayFilter.java (1)
182-187: ⚡ Quick wintracer.currentSpan() 중복 호출 개선.
tracer.currentSpan()을 두 번 호출하고 있습니다. null 체크 이후 다시 호출하면 이론적으로 race condition이 발생할 수 있고, 불필요한 중복 호출입니다.♻️ 로컬 변수로 개선
private String resolveTraceId() { - if (tracer.currentSpan() != null) { - return Objects.requireNonNull(tracer.currentSpan()).context().traceId(); - } - return UUID.randomUUID().toString().substring(0, 8); + var span = tracer.currentSpan(); + if (span != null) { + return span.context().traceId(); + } + return UUID.randomUUID().toString().substring(0, 8); }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/main/java/org/pgsg/gateway/filter/JwtGatewayFilter.java` around lines 182 - 187, In resolveTraceId(), avoid calling tracer.currentSpan() twice by assigning it to a local variable (e.g., Span span = tracer.currentSpan()), check that variable for null, and if non-null return span.context().traceId(); otherwise return UUID.randomUUID().toString().substring(0,8); this removes the duplicate call and eliminates the potential race condition while preserving behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@build.gradle`:
- Around line 36-38: Fix the typos in the three Gradle exclude lines so
exclusions actually apply: remove the trailing colon from the group and strip
the version from the module in the org.springdoc exclude (use group
"org.springdoc" and module "springdoc-openapi-starter-webmvc-ui"), correct the
misspelled group "org.org.springframework.cloud" to "org.springframework.cloud"
for the spring-cloud exclude, and leave the spring-boot exclude group/module as
"org.springframework.boot" and "spring-boot-starter-web"; update the three
exclude(...) calls accordingly.
---
Nitpick comments:
In `@src/main/java/org/pgsg/gateway/client/AuthClient.java`:
- Line 10: Remove the leftover commented FeignClient annotation line in
AuthClient.java (the line containing //@FeignClient(name = "user-service",
fallbackFactory = AuthClientFallbackFactory.class)) since the project has
switched to WebClient; simply delete that commented line so the codebase no
longer contains unused Feign-related comments.
- Around line 20-27: The verifyToken method currently makes an external call via
webClient.post() without a timeout; add a reactor timeout to the returned Mono
(e.g., append .timeout(Duration.ofSeconds(<n>)) after bodyToMono(...)) and
handle timeout errors explicitly (use onErrorResume to convert TimeoutException
or other errors into the same CommonResponse fallback used now) so verifyToken
returns a timely failure instead of hanging; update references in this method
(verifyToken, webClient.post(), bodyToMono(...), onErrorReturn) accordingly.
In `@src/main/java/org/pgsg/gateway/filter/JwtGatewayFilter.java`:
- Around line 182-187: In resolveTraceId(), avoid calling tracer.currentSpan()
twice by assigning it to a local variable (e.g., Span span =
tracer.currentSpan()), check that variable for null, and if non-null return
span.context().traceId(); otherwise return
UUID.randomUUID().toString().substring(0,8); this removes the duplicate call and
eliminates the potential race condition while preserving behavior.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 0dd4166f-f008-4ef0-8d02-ed3acd48fe46
📒 Files selected for processing (13)
build.gradledocker-compose.yamlsrc/main/java/org/pgsg/gateway/GatewayApplication.javasrc/main/java/org/pgsg/gateway/auth/AuthProvider.javasrc/main/java/org/pgsg/gateway/auth/AuthProviderImpl.javasrc/main/java/org/pgsg/gateway/client/AuthClient.javasrc/main/java/org/pgsg/gateway/config/GatewayAppCtx.javasrc/main/java/org/pgsg/gateway/config/GatewaySecurityConfig.javasrc/main/java/org/pgsg/gateway/feign/AuthClient.javasrc/main/java/org/pgsg/gateway/feign/AuthClientFallbackFactory.javasrc/main/java/org/pgsg/gateway/filter/HttpRequestHeaderWrapper.javasrc/main/java/org/pgsg/gateway/filter/JwtGatewayFilter.javasrc/test/java/org/pgsg/gateway/JwtGatewayIntegrationTest.java
💤 Files with no reviewable changes (5)
- docker-compose.yaml
- src/main/java/org/pgsg/gateway/filter/HttpRequestHeaderWrapper.java
- src/main/java/org/pgsg/gateway/feign/AuthClientFallbackFactory.java
- src/main/java/org/pgsg/gateway/GatewayApplication.java
- src/main/java/org/pgsg/gateway/feign/AuthClient.java
- 의존성 제외 설정 관련 오탈자 수정
* [Feat] 게이트웨이 라우팅 설정 및 인증 필터 구현 (#3) * chore: 공통모듈 의존성 추가 및 빌드 관련 설정 변경 - build.gradle에 공통모듈 의존성 추가 및 github package 인증 관련 설정 추가 - Dockerfile 및 docker-compose.yml 파일에 공통모듈 사용에 필요한 github package 인증정보 및 jwt 환경변수 관련 설정 추가 - GatewayApplication.java의 @SpringBootApplication에서 데이터소스 관련 자동 설정 기능 비활성화 * chore: 환경변수 추가 - env.example 파일 추가 - .env 파일에 관한 .gitignore 설정 추가 * chore: application.yaml 파일 설정 수정 - application.yml 파일에서의 게이트웨이 라우팅 관련 설정은 config server에 새로 추가한 라우팅 설정으로 대체 - src/test/resources/application.yaml 파일의 설정을 수정하여 일반 실행 환경과 테스트 환경 분리 * feat: JwtTokenProvider 빈 설정 추가 - 공통모듈의 Jwt 토큰 발급 기능을 사용하기 위한 JwtTokenProvider, JwtProperties에 관한 수동 빈 등록 * feat: 게이트웨이 인증 필터 구현 - 기본 동작 메커니즘은 user-service의 JwtAuthenticationFilter와 거의 동일 - 요청 헤더의 추가/삭제 시 Wrapper를 활용할 필요가 없다는 측면에서 spring framework 제공 필터에 비해 편의성 및 가독성을 개선 - application.yaml 파일에서는 모든 api 경로가 항상 게이트웨이 기본 필터를 경유하도록 하여, 모든 api 요청에 대해 보안 정책을 일괄 적용 * feat: 게이트웨이 전용 SecurityConfig 설정 추가 - 게이트웨이를 통해 들어온 모든 요청에 대해 무조건 허용 * docs: 현재까지의 작업 내역 요약 정리 - 게이트웨이 세팅 및 인증 필터 구현, 향후 고도화 계획 관련 내용 요약 * fix: 코드래빗 수정사항 반영 - 빌드용 환경변수와 실행용 환경변수 분리를 통해 github 자격증명 정보의 노출 방지(.gitignore에 .env.runtime 추가) - 테스트용 환경변수 중 JWT_SECRET의 기본값 지정 - 토큰 검증 성공 시 사용자 식별자가 노출되어 누적되지 않도록 수정 * refactor: 서버 포트 명시 - application.yml 내 server.port 추가 * Feature/#4 gateway blacklist and trace (#5) * chore: 의존성 설정 수정 - 게이트웨이에서 사용하지 않는 queryDsl, jpa 관련 의존성 제외 - 기존의 AppCtx 대신 게이트웨이 맞춤형 AppCtx 사용 * chore: application.yml 설정 수정 - 로컬 application.yml 파일의 게이트웨이 관련 설정을 원격 config의 gateway 설정으로 대체 * refactor: 게이트웨이 필터 구현 방식 변경 - 구현의 복잡성을 낮추면서 .yaml 파일 시반 라우팅 설정 적용을 목적으로 수행 - 기존 HandlerFilterFunction 기반 인증 필터로 요청 발송 시 라우팅 설정이 제대로 적용되지 않는 문제 개선 - HandlerFilterFunction 대신 OncePerRequestFilter를 기반으로 하여 게이트웨이 인증 필터가 동작하도록 수정 * chore: build.gradle 의존성 추가 및 FeignClient 활성화 - user-service와의 동기식 통신을 통해 토큰 블랙리스트 검증을 수행하기 위한 FeignClient 추가 - traceId를 할당 작업용 라이브러리 추가 - GatewayApplication 내 @EnableFeignClients 추가 * feat : 블랙리스트 검증 로직 호출용 FeignClient 추가 - user-service의 /internal/v1/auth/verify api 호출용 FeignClient 엔드포인트 추가 - FeignClient 요청 처리 실패 시 Fallback 로직 추가 - accessToken 검증 결과를 임시 저장(3분)하기 위한 로컬 캐시 추가 - 추후 목 테스트를 수행하기 위해 AuthProvider 인터페이스와 구현체를 분리 * feat : 토큰 블랙리스트 검증 및 traceId 할당 기능 추가 - JwtGatewayFilter에 FeignClient 기반 accessToken 블랙리스트 검증 로직을 적용 - 인증 필터 실행 시 traceId를 요청 헤더에 저장하는 기능 추가 - 게이트웨이 내부에서 JwtGatewayFilter가 MdcLoggingFilter 바로 다음에 동작하도록 필터 실행 우선순위를 조정 - 초기에는 Zipkin의 traceId를 생성한 후 MDC의 traceID로 동기화 * refactor : 토큰 블랙리스트 검증 응답 형식 수정 - AuthDto.TokenVerifyResponse 대신 AuthDto.TokenVerifyData를 CommonResponse<T>로 래핑하는 형태로 수정 * refactor : 게이트웨이 인증 실패 시 응답 처리 코드 수정 - CustomAuthenticationEntryPoint를 활용하여 인증 실패 시 공통 모듈의 에러 메시지 형식에 맞춰 응답을 반환하도록 수정 * fix : 게이트웨이 설정 적용 방식 수정 - - 게이트웨이에서 JPA, QueryDsl 관련 설정을 확실하게 제외하기 위해 GatewayAppCtx로 커스터마이징한 빈 설정을 확실히 적용하도록 @import를 사용 * refactor : FeignClient의 변경된 반환타입 반영 - response의 타입을 CommonResponse<AuthDto.TokenVerifyData>로 변경 * docs : 작업 내용 요약본 정리 - 게이트웨이 토큰 블랙리스트 검증 및 traceId 할당 기능 추가 관련 작업 내역 문서화 * docs : 게이트웨이 관련 작업 내역 정리 문서 업데이트 - README 추가 - 기존 작업 내역 업데이트 * fix : 코드래빗 피드백 반영 - 캐시 저장용량 상한 초과 시 캐시 삭제 로직 추가 - fallback traceId의 길이를 초기 발급된 traceId의 길이와 통일 - 오기재된 문서 및 주석 내용 수정 * fix : 코드래빗 피드백 반영 - 유효하지 않은 accessToken을 사용한 요청은 게이트웨이에서 필터링하도록 수정 - 단, 토큰 재발급 요청에 한해서는 통과 (accessToken이 로그아웃한 사용자의 토큰이더라도 user-service의 재발급 로직에서 블랙리스트 포함 여부를 확인) * refactor : 게이트웨이 필터 검증 순서 최적화 - 기존에는 블랙리스트 검증 -> 토큰 유효성 검증 -> 토큰 파싱 순으로 진행 - 인증 필터 내부에서 토큰 유효성 검증 -> 블랙리스트 검증 -> 토큰 파싱 순으로 작업을 진행하여 이미 검증된 토큰에 대해서만 원격 검증을 수행하도록 하여, 불필요한 FeignClient 호출 방지 - 문서에 관련 내용 업데이트 * [TASK] 게이트웨이 인증 필터 관련 통합테스트 코드 작성 (#7) * refactor : 게이트웨이 JwtGatewayFilter 세부 로직 수정 및 통합테스트 코드 추가 - 게이트웨이 JwtGatewayFilter의 헤더 추가 기능은 그대로 유지하고, user-service의 인증 필터 로직을 다시 원상복구하는 방향으로 진행 예정 - JwtGatewayIntegrationTest에 게이트웨이 통합테스트 코드 추가 * docs : 게이트웨이 통합테스트 관련 작업사항 문서화 - 게이트웨이 통합테스트 코드 관련 내용 문서화 * fix : JwtGatewayFilter의 토큰 검증 로직 수정 - 요청 헤더에 accessToken이 아예 없는 경우에는 차단하도록 수정 - 화이트리스트에 포함되지 않은 경로에 대해서는 유효한 토큰이 요청 헤더에 없으면 차단하는지를 검증하는 테스트코드 추가 * feat : 회이트리스트 경로 검증 시 패턴매칭 적용 - 화이트리스트에 경로에 관한 패턴도 포함 가능하게 하여 화이트리스트에 특정 패턴이 저장된 경우에는 해당 패턴을 포함된 경로 전체를 허용 가능하도록 개선 * chore : 게이트웨이 ci/cd 설정 추가 (#9) * chore : 게이트웨이 ci/cd 설정 추가 - 게이트웨이 배포 관련 github action workflow 추가 - 게이트웨이 배포 전용 docker-compose.yml 파일 및 환경변수 템플릿 추가 - gar 이미지 관리 정책 추가(eureka-server와 동일) * chore : application.yaml 설정 추가 - management 블록 추가 * chore : 코드래빗 피드백 반영 - .env.example 파일명을 .env.template으로 변경 - deploy.yaml 파일의 워크플로우 세부사항 수정 * comment : 주석 수정 - .env.example 파일명을 .env.template으로 변경함에 따라 주석 내용 갱신 * chore : github action 배포 워크플로우 세부 스크립트 수정 (#11) * chore : github action 배포 워크플로우 세부 스크립트 수정 - gateway-server-1의 영역을 asia-northeast3-a로 수정 - main 또는 dev 브랜치에서 배포 성공 시 promote-remote job이 자동 실행되도록 실행 조건 수정 * fix : 게이트웨이 인증 필터 화이트리스트 수정 - actuator 관련 api 호출은 허용하도록 화이트리스트 추가 * chore : 게이트웨이 설정 수정 - config server가 제공하는 common/application.yml 파일의 management 블록 설정 적용 * fix : ar-image-retention-policy.json 파일 수정 - 오류 수정 * fix : actuator 관련 화이트리스트 지정 범위 축소 - /actuator/health, /actuator/info로 한정해서 화이트리스트 축소 * [TASK] : 게이트웨이 VM 3대 구동 시 배포 테스트 (#13) * chore : 게이트웨이 VM 3대 구동하도록 설정 수정 - 게이트웨이 3대 구동 시 배포 테스트용 설정 활성화 * chore : 수동 스케일아웃/스케일인 워크플로우 추가 - 부하테스트 진행 시에만 게이트웨이를 3대까지 구동하기 위해 추가 * refactor : 게이트웨이 CI/CD 워크플로우 리팩토링 - step, action 기반으로 분할하여 코드 가독성 개선 * fix : 게이트웨이 CI/CD 워크플로우 오류 수정 - permission 블록을 추가하여 하위 워크플로우에 권한 관련 정보를 명시적으로 전달 * fix : 스케일아웃 실행 중 오류 수정 - _scale.yaml 파일에 actions/checkout 추가 * fix : 코드래빗 수정사항 반영 - 이전 버전의 워크플로우 삭제 - 스케일아웃 타임아웃 시간 연장 - VM 미존재 시 명시적으로 오류 처리하도록 수정 * fix : 배포 오류 수정 - 배포 성공 직후 에러가 발생하면서 강제종료되는 문제 수정 * refactor : 배포 워크플로우 수정 - build-and-push와 scale-out 작업을 병행하도록 수정 * [TASK] nginx CI/CD 워크플로우 추가 (#15) * chore : nginx CI/CD 워크플로우 추가 - nginx 설정 변경용 워크플로우 추가 * fix : 코드래빗 수정사항 반영 - 수정된 nginx.conf 검증한 후 기존 파일을 업데이트하도록 수정 * [TASK] nginx 배포 워크플로우 테스트 (#17) * fix : nginx.conf 변경사항 검증 로직 수정 - /tmp/nginx.conf의 변경사항에 관한 검증 로직을 수행할 수 없는 문제 수정 * chore : 게이트웨이 application.yaml 파일 수정 - nginx 연동 테스트용 actuator 설정 추가 * chore : 게이트웨이 application.yaml 파일 수정 - info 설정 추가 * chore : eureka server 연동 관련 설정 추가 - config server 구동 여부에 관계없이 유레카 서버와 연동 가능하도록 추가 * chore : eureka server 연동 관련 설정 추가 - config server 구동 여부에 관계없이 유레카 서버와 연동 가능하도록 추가 * fix : 코드래빗 수정사항 반영 - nginx 설정 변경사항 검증 관련 문제 수정 * fix : nginx 빌드 오류 수정 - 큰따옴표 이스케이프 적용 * fix : nginx 빌드 오류 수정 - 이전 검증 방식으로 원상 복구 * fix : nginx 빌드 오류 수정 - .conf 파일 검증 방식 수정 * chore : application.yaml 파일 설정 수정 - info 블록의 HOSTNAME 기본값 지정 * chore : 로드밸런싱 테스트용 nginx.conf 설정 추가 - application.yaml 파일의 info 블록 삭제 * fix : 코드래빗 피드백 반영 - nginx.conf 변경사항 적용 성공 시에도 백업본을 저장하도록 수정 * fix : nginx 배포 오류 수정 - nginx 배포 워크플로우 수정 후 발생한 오류 수정 * fix : nginx 배포 오류 수정 - nginx 배포 워크플로우 수정 후 발생한 오류 수정 * fix : nginx 로드밸런싱 테스트 관련 누락된 설정 추가 - nginx.conf 파일에 add_header 추가 * chore : 게이트웨이 로드밸런싱 테스트용 nginx 로그 설정 삭제 - 로드밸런싱 테스트 완료로 인해 nginx.conf 내 nginx 로그 관련 설정 삭제 * [TASK] 게이트웨이 application.yaml 파일 설정 수정 (#20) * chore : 게이트웨이 application.yaml 파일 설정 수정 - config server 연동 방식 수정 * chore : 게이트웨이 application.yaml 파일 설정 수정 - config server 설정 관련 오탈자 수정 * [TASK] 게이트웨이 application.yaml 파일 설정 수정 (#22) * chore : 게이트웨이 application.yaml 파일 설정 수정 - 유레카 서버에 게이트웨이의 주소를 등록하는 방식 수정 * chore : 게이트웨이 헬스체크 간격 및 횟수 조정 - 게이트웨이 빌드 시간을 단축하고 실패 시 빠른 피드백을 받기 위해 조정 * [FIX] 게이트웨이 화이트리스트 수정 (#24) * fix : 게이트웨이 화이트리스트 수정 - 모니터링 관련 api를 게이트웨이 화이트리스트에 추가 * chore : 게이트웨이 공통모듈 버전 수정 - build.gradle의 공통모듈 버전을 0.3.2-SNAPSHOT으로 업그레이드 * chore : 분산 추적 & 로그 수집 관련 설정 추가 - zipkin, loki 연동 관련 환경변수 추가 - application.yaml 파일에 zipkin 관련 설정 추가 - deploy/docker-compose.prod.yaml 파일 내 promtail 관련 설정 추가 - deploy/promtail-config.yml 파일 추가 - deploy/promtail-config.yml 파일이 원격 서버에 배포되도록 배포 워크플로우 수정 * chore : 배포 중 발생한 도커 네트워크 관련 오류 수정 - 도커 이미지 기반으로 docker compose 명령어 실행 직전 도커 네트워크부터 먼저 탐색하도록 수정 * chore : docker-compose.prod.yaml 수정 - promtail 컨테이너명 수정 * chore : 코드래빗 피드백 반영 - 게이트웨이 내부 로그파일 생성 및 저장 경로 지정 - 게이트웨이 로그파일 생성 및 관리 관련 설정은 configs의 gateway-server/application.yml에 반영 * chore : 코드래빗 피드백 반영 - promtail-config.yml에 환경변수 값을 적용하기 위한 설정 추가 - 게이트웨이 화이트리스트에서 /actuator/refresh 삭제 * [TASK] 1차 게이트웨이 부하테스트 스크립트 추가 (#26) * chore : k6 부하테스트 스크립트 추가 - 게이트웨이 부하테스트 진행용 스크립트 추가 - 2차 부하테스트 진행용 스크립트 추가 - 1차 부하테스트 결과 스크립트 추가 * chore : 코드래빗 피드백 반영 - 결과 스크립트에 사용했던 access token이 저장되지 않도록 수정 * chore : 코드래빗 피드백 반영 - 테스트항목 1 부하테스트 스크립트 관련 수정사항 반영 * chore : 코드래빗 피드백 반영 - 2차 부하테스트 진행용 k6 스크립트 관련 수정사항 반영 - test2-max-users.js 테스트 스크립트를 test2-max-users-revised.js로 대체한다는 주석 추가 * [Refactor] WebFlux 기반 필터 전환 (#28) * chore : build.gradle 수정 - WebFlux 기반 게이트웨이로 전환하기 위한 webflux 관련 의존성 추가 * refactor : WebClient 도입 - 기존의 FeignClient 기반 코드를 WebClient로 대체 * refactor : Config 클래스 수정 - 기존의 서블릿 기반 설정을 WebFlux 기반 설정으로 수정 * refactor : WebFlux 기반 필터 사용 - 기존의 서블릿 기반 게이트웨이 필터를 WebFlux 기반 필터로 교체 - WebFlux 필터 로직 검증용 통합 테스트 수행 * chore : docker compose 수정 - 불필요한 환경변수 설정 삭제 * chore : 코드래빗 리뷰 반영 - 의존성 제외 설정 관련 오탈자 수정 * [TASK] 게이트웨이 2차 부하테스트 진행 (#30) * chore : 부하테스트 코드 수정 - 테스트 항목 2 관련 k6 스크립트에 테스트 시작, 종료시간 추가 * refactor : 1차 부하테스트 결과 파일명 수정 - 2차 부하테스트 준비 및 1차 부하테스트 진행 결과 보존용 * refactor : 게이트웨이 필터 코드 개선 - 게이트웨이 인증 로직 중 일부 구간에서 블로킹 방식 및 기존 서블릿 필터 방식이 적용된 코드를 수정 * refactor : JWT 토큰 검증용 캐시 추가 - 이미 Jwt 검증 및 파싱 완료된 토큰에 관한 캐시 추가(TTL 30초) * chore : 부하테스트 기록 저장 - test1-baseline-2.json 추가 * refactor : 캐시 적용 순서 조정 - 토큰 블랙리스트 검증 통과 후 JWT 검증 결과 캐싱 여부를 확인하도록 순서 조정 * chore : 이전 테스트 기록 저장 - 2차 부하테스트 기록 저장 * refactor : WebClient 커넥션 풀 타임아웃 설정 추가 - 부하테스트 지표 개선용 * fix : JWT 토큰 검증 & 캐싱 로직 보강 - 만료된 토큰이 게이트웨이 필터를 통과하는 문제에 관한 방어 로직 보강 * comment : Jwt 토큰 검증 & 캐싱 관련 주석 수정 - 캐싱된 JWT 토큰이라도 검증을 수행한다는 내용으로 수정 * test : 테스트 항목 3 k6 테스트 스크립트 추가 - 테스트 항목 2 관련 k6 테스트 스크립트를 테스트 항목 3 테스트 스크립트로 사용 * test : 2차 부하테스트 진행 기록 추가 - 부하테스트 진행 결과 스크립트 추가 * [TASK] : 게이트웨이 부하테스트 결과 추가 (#32) * test : 게이트웨이 부하테스트 결과 추가 - user-service 스케일아웃 이후 게이트웨이 부하테스트 결과 저장 * docs : 게이트웨이 README 내용 업데이트 - WebFlux 기반 필터로 교체한 이후의 내용 반영
작업 배경
작업 내용
-> TTL이 만료된 데이터는 자동 삭제
테스트 여부
gradle clean build명령어 실행 시 정상적으로 빌드됨을 확인JwtGatewayIntegrationTest의 통합테스트 통과 확인
현재 PR에서 재배포 후 게이트웨이의 기능 동작 확인 예정
(제대로 동작하지 않을 경우 configs 파일의 게이트웨이 관련 설정을 이전으로 원상복구 후 dev 브랜치의 코드를 재배포)
WebFlux 필터 전환 및 재배포 후 라우팅 기능 정상 동작 확인
기타
이슈