[TASK] gateway-server main 브랜치 업데이트 - #33
Conversation
* 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 기반 필터로 교체한 이후의 내용 반영
|
Warning Rate limit exceeded
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 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 configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (65)
✨ 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 |
작업 배경
작업 내용
테스트 여부
기타
이슈