Skip to content

[TASK] gateway-server main 브랜치 업데이트 - #33

Merged
HyeonBin2379 merged 15 commits into
mainfrom
dev
May 20, 2026
Merged

[TASK] gateway-server main 브랜치 업데이트#33
HyeonBin2379 merged 15 commits into
mainfrom
dev

Conversation

@HyeonBin2379

Copy link
Copy Markdown
Contributor

작업 배경

  • gateway-server의 main 브랜치에 작업 내역 반영

작업 내용

  • gateway-server의 dev 브랜치에 있는 작업 내역을 main 브랜치에 병합

테스트 여부

  • 이미 테스트 통과되어 dev 브랜치에 병합된 작업이므로 별도 테스트 x

기타

  • main 브랜치로 병합할 시 gateway-server를 재배포하는 워크플로우가 실행될 수 있습니다.

이슈

* 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 추가
* 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 호출 방지
- 문서에 관련 내용 업데이트
* refactor : 게이트웨이 JwtGatewayFilter 세부 로직 수정 및 통합테스트 코드 추가

- 게이트웨이 JwtGatewayFilter의 헤더 추가 기능은 그대로 유지하고, user-service의 인증 필터 로직을 다시 원상복구하는 방향으로 진행 예정
- JwtGatewayIntegrationTest에 게이트웨이 통합테스트 코드 추가

* docs : 게이트웨이 통합테스트 관련 작업사항 문서화

- 게이트웨이 통합테스트 코드 관련 내용 문서화

* fix : JwtGatewayFilter의 토큰 검증 로직 수정

- 요청 헤더에 accessToken이 아예 없는 경우에는 차단하도록 수정
- 화이트리스트에 포함되지 않은 경로에 대해서는 유효한 토큰이 요청 헤더에 없으면 차단하는지를 검증하는 테스트코드 추가

* feat : 회이트리스트 경로 검증 시 패턴매칭 적용

- 화이트리스트에 경로에 관한 패턴도 포함 가능하게 하여 화이트리스트에 특정 패턴이 저장된 경우에는 해당 패턴을 포함된 경로 전체를 허용 가능하도록 개선
* 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 배포 워크플로우 세부 스크립트 수정

- 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로 한정해서 화이트리스트 축소
* 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 작업을 병행하도록 수정
* chore : nginx CI/CD 워크플로우 추가

- nginx 설정 변경용 워크플로우 추가

* fix : 코드래빗 수정사항 반영

- 수정된 nginx.conf 검증한 후 기존 파일을 업데이트하도록 수정
* 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 로그 관련 설정 삭제
* chore : 게이트웨이 application.yaml 파일 설정 수정

- config server 연동 방식 수정

* chore : 게이트웨이 application.yaml 파일 설정 수정

- config server 설정 관련 오탈자 수정
* chore : 게이트웨이 application.yaml 파일 설정 수정

- 유레카 서버에 게이트웨이의 주소를 등록하는 방식 수정

* chore : 게이트웨이 헬스체크 간격 및 횟수 조정

- 게이트웨이 빌드 시간을 단축하고 실패 시 빠른 피드백을 받기 위해 조정
* 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 삭제
* chore : k6 부하테스트 스크립트 추가

- 게이트웨이 부하테스트 진행용 스크립트 추가
- 2차 부하테스트 진행용 스크립트 추가
- 1차 부하테스트 결과 스크립트 추가

* chore : 코드래빗 피드백 반영

- 결과 스크립트에 사용했던 access token이 저장되지 않도록 수정

* chore : 코드래빗 피드백 반영

- 테스트항목 1 부하테스트 스크립트 관련 수정사항 반영

* chore : 코드래빗 피드백 반영

- 2차 부하테스트 진행용 k6 스크립트 관련 수정사항 반영
- test2-max-users.js 테스트 스크립트를 test2-max-users-revised.js로
  대체한다는 주석 추가
* chore : build.gradle 수정

- WebFlux 기반 게이트웨이로 전환하기 위한 webflux 관련 의존성 추가

* refactor : WebClient 도입

- 기존의 FeignClient 기반 코드를 WebClient로 대체

* refactor : Config 클래스 수정

- 기존의 서블릿 기반 설정을 WebFlux 기반 설정으로 수정

* refactor : WebFlux 기반 필터 사용

- 기존의 서블릿 기반 게이트웨이 필터를 WebFlux 기반 필터로 교체
- WebFlux 필터 로직 검증용 통합 테스트 수행

* chore : docker compose 수정

- 불필요한 환경변수 설정 삭제

* chore : 코드래빗 리뷰 반영

- 의존성 제외 설정 관련 오탈자 수정
* 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차 부하테스트 진행 기록 추가

- 부하테스트 진행 결과 스크립트 추가
* test : 게이트웨이 부하테스트 결과 추가

- user-service 스케일아웃 이후 게이트웨이 부하테스트 결과 저장

* docs : 게이트웨이 README 내용 업데이트

- WebFlux 기반 필터로 교체한 이후의 내용 반영
@coderabbitai

coderabbitai Bot commented May 20, 2026

Copy link
Copy Markdown

Warning

Rate limit exceeded

@HyeonBin2379 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 52 minutes and 55 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 69c22928-d213-438f-a1dc-196e94d01d37

📥 Commits

Reviewing files that changed from the base of the PR and between 9e9fa01 and 9dfd419.

📒 Files selected for processing (65)
  • .env.example
  • .github/actions/deploy-vm/action.yaml
  • .github/actions/scale-vm/action.yaml
  • .github/workflows/_build.yaml
  • .github/workflows/_deploy.yaml
  • .github/workflows/_promote.yaml
  • .github/workflows/_scale.yaml
  • .github/workflows/deploy-nginx.yaml
  • .github/workflows/deploy.yaml
  • .gitignore
  • Dockerfile
  • README.md
  • build.gradle
  • deploy/.env.template
  • deploy/ar-image-retention-policy.json
  • deploy/docker-compose.prod.yaml
  • deploy/nginx/nginx.conf
  • deploy/promtail-config.yml
  • docker-compose.yaml
  • docs/gateway-server-improvement-summary.md
  • docs/gateway-server-integration-test-report.md
  • docs/gateway-server-setup-summary.md
  • script/result/result-test1-baseline-1.json
  • script/result/result-test1-baseline-2.json
  • script/result/result-test1-baseline-3.json
  • script/result/result-test1-baseline-4.json
  • script/result/result-test1-baseline.json
  • script/result/result-test2-max-users-1.json
  • script/result/result-test2-max-users-2.json
  • script/result/result-test2-max-users.json
  • script/result/result-test2-stage-100vu-2.json
  • script/result/result-test2-stage-100vu.json
  • script/result/result-test2-stage-200vu-2.json
  • script/result/result-test2-stage-200vu.json
  • script/result/result-test2-stage-300vu-2.json
  • script/result/result-test2-stage-300vu.json
  • script/result/result-test2-stage-400vu.json
  • script/result/result-test2-stage-500vu.json
  • script/result/result-test3-max-users-revised-1.json
  • script/result/result-test3-max-users-revised.json
  • script/result/result-test3-stage-100vu-1.json
  • script/result/result-test3-stage-100vu.json
  • script/result/result-test3-stage-200vu-1.json
  • script/result/result-test3-stage-200vu.json
  • script/result/result-test3-stage-300vu-1.json
  • script/result/result-test3-stage-300vu.json
  • script/result/result-test3-stage-400vu-1.json
  • script/result/result-test3-stage-400vu.json
  • script/result/result-test3-stage-500vu.json
  • script/test1-baseline.js
  • script/test2-max-users.js
  • script/test3-max-users-revised.js
  • src/main/java/org/pgsg/gateway/GatewayApplication.java
  • src/main/java/org/pgsg/gateway/auth/AuthDto.java
  • src/main/java/org/pgsg/gateway/auth/AuthProvider.java
  • src/main/java/org/pgsg/gateway/auth/AuthProviderImpl.java
  • src/main/java/org/pgsg/gateway/cache/CacheUtil.java
  • src/main/java/org/pgsg/gateway/client/AuthClient.java
  • src/main/java/org/pgsg/gateway/config/GatewayAppCtx.java
  • src/main/java/org/pgsg/gateway/config/GatewaySecurityConfig.java
  • src/main/java/org/pgsg/gateway/config/JwtConfig.java
  • src/main/java/org/pgsg/gateway/filter/JwtGatewayFilter.java
  • src/main/resources/application.yaml
  • src/test/java/org/pgsg/gateway/JwtGatewayIntegrationTest.java
  • src/test/resources/application.yaml
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@HyeonBin2379
HyeonBin2379 merged commit 5837355 into main May 20, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant