Skip to content

Fix: Refactor deployment workflow and fix authentication issues - #70

Merged
SungHuii merged 7 commits into
developfrom
fix/role-error
Aug 11, 2026
Merged

Fix: Refactor deployment workflow and fix authentication issues#70
SungHuii merged 7 commits into
developfrom
fix/role-error

Conversation

@SungHuii

@SungHuii SungHuii commented Aug 11, 2026

Copy link
Copy Markdown
Collaborator

작업 내용

  • 공간 생성 후 새로고침(F5) 시 권한이 USER로 강등되는 현상 수정
  • AI 문제 생성 요청 시 Idempotency-Key 헤더 누락으로 인해 발생하던 400 Bad Request 에러 방지 및 이중 방어 로직 구축

변경 사항

1. 토큰 재발급 시 DB 최신 권한 반영 (AuthServiceImpl.java)

  • 원인: /api/auth/refresh 호출 시 DB에서 최신 유저 정보를 읽어왔음에도 불구하고, 로그인 시점의 구(舊) Refresh Token 내 클레임(role: USER)을 파싱하여 새 토큰을 재발급하는 오류가 존재
  • 수정: DB에서 조회한 최신 User 엔티티 정보(UserResponse)를 기반으로 MoMoGoUserDetails를 구성하여, 최신 ADMIN 권한이 적용된 Access Token / Refresh Token을 발급하도록 개선

2. 공간 및 유저 역할 변경 시 Redis 캐시 무효화 (SpaceServiceImpl.java)

  • 원인: 공간 생성(createSpace), 가입(joinSpace), 역할 변경(changeUserRole) 시 DB는 업데이트되었으나 Redis user_dtos 캐시가 유지되어 일시적 권한 불일치가 발생가능.
  • 수정: 해당 메서드 실행 시 UserCacheEvictEvent 이벤트를 발행하여 Redis 유저 캐시를 즉시 제거(Evict)하도록 동기화.

3. AI 문제 생성 멱등성 헤더(Idempotency-Key) 이중 방어 구축

  • CORS 설정: SecurityConfig.javacorsConfigurationSource() 허용 헤더(allowedHeaders)에 Idempotency-Key를 추가하여 CORS Preflight 차단을 방지.
  • 백엔드 예외 방어: ProblemController.javaRoomProblemController.java에서 @RequestHeader(value = "Idempotency-Key", required = false)로 설정하고, 헤더 누락 시 백엔드에서 UUID.randomUUID()를 자동 할당하여 클라이언트 구버전 JS 실행 시에도 400 에러가 발생하지 않도록 조치.
  • 프론트엔드 호환성: SpacePage.tsx에서 HTTP/HTTPS 환경 및 구형 브라우저 호환성을 위한 generateUUID() 폴백 유틸 함수를 구현하여 헤더가 유실되지 않도록 보장.

체크리스트

  • 테스트 코드 작성 완료
  • 리뷰어 지정 완료

참고 사항

관련 이슈

Summary by CodeRabbit

  • 개선 사항
    • AI 문제 생성 시 Idempotency-Key 없이도 요청할 수 있으며, 필요한 경우 자동으로 키가 생성됩니다.
    • 다양한 브라우저 환경에서 AI 문제 생성 요청의 중복 방지 기능을 안정적으로 지원합니다.
    • 인증 토큰 갱신 시 사용자 정보가 더욱 정확하게 반영됩니다.
    • 공간 생성·가입 및 역할 변경 후 사용자 정보가 최신 상태로 갱신됩니다.
    • 프록시 환경에서 애플리케이션 요청 처리가 개선되었습니다.
    • 배포 환경의 AWS 리전 설정 오류를 수정했습니다.

SungHuii and others added 7 commits July 29, 2026 17:09
chore: EC2 SSM 기반 배포 워크플로우로 교체 (deploy-production.yml)
…potency header

- Update AuthServiceImpl to use fresh DB user data during token refresh instead of stale refresh token claims
    - Evict Redis user cache (UserCacheEvictEvent) on space creation, joining, and role changes in SpaceServiceImpl
    - Allow 'Idempotency-Key' in SecurityConfig CORS configuration
    - Make 'Idempotency-Key' request header optional with backend UUID fallback in ProblemController and RoomProblemController
    - Add generateUUID fallback helper for non-secure contexts in SpacePage.tsx
@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 96c212f7-bd1d-4ff9-a23e-7120f352bb42

📥 Commits

Reviewing files that changed from the base of the PR and between 3730755 and 9aba17d.

📒 Files selected for processing (9)
  • .github/workflows/deploy-production.yml
  • momogo-api/src/main/java/com/momogo/api/MomogoApiApplication.java
  • momogo-api/src/main/java/com/momogo/api/auth/config/SecurityConfig.java
  • momogo-api/src/main/java/com/momogo/api/auth/service/AuthServiceImpl.java
  • momogo-api/src/main/java/com/momogo/api/problem/ProblemController.java
  • momogo-api/src/main/java/com/momogo/api/room/RoomProblemController.java
  • momogo-api/src/main/resources/application.yaml
  • momogo-core/src/main/java/com/momogo/core/domain/space/service/SpaceServiceImpl.java
  • momogo-frontend/src/pages/SpacePage.tsx

📝 Walkthrough

Walkthrough

배포 환경 변수와 프록시 헤더 처리를 수정했습니다. 리프레시 토큰 갱신과 사용자 캐시 무효화를 보강했습니다. AI 문제 생성 API의 Idempotency-Key를 선택 사항으로 변경하고 프론트엔드 UUID 생성을 보완했습니다.

Changes

플랫폼 동작 개선

Layer / File(s) Summary
배포 및 프록시 설정
.github/workflows/deploy-production.yml, momogo-api/src/main/resources/application.yaml, momogo-api/src/main/java/com/momogo/api/MomogoApiApplication.java
AWS 리전 참조를 env.AWS_REGION으로 변경했습니다. 프록시 헤더 처리를 활성화했습니다. 애플리케이션 Javadoc을 추가했습니다.
인증 갱신 및 사용자 캐시 상태
momogo-api/src/main/java/com/momogo/api/auth/service/AuthServiceImpl.java, momogo-core/src/main/java/com/momogo/core/domain/space/service/SpaceServiceImpl.java
리프레시 토큰 갱신 시 조회된 UserUserResponse로 변환해 JWT 정보를 생성합니다. 공간 생성, 가입, 역할 변경 후 UserCacheEvictEvent를 발행합니다.
AI 문제 생성 요청 처리
momogo-api/src/main/java/com/momogo/api/auth/config/SecurityConfig.java, momogo-api/src/main/java/com/momogo/api/problem/ProblemController.java, momogo-api/src/main/java/com/momogo/api/room/RoomProblemController.java, momogo-frontend/src/pages/SpacePage.tsx
CORS 허용 헤더에 Idempotency-Key를 추가했습니다. 두 AI 문제 생성 API에서 헤더를 선택 사항으로 처리합니다. 프론트엔드는 호환 가능한 UUID 생성 함수를 사용합니다.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant SpacePage
  participant ProblemController
  participant RoomProblemController
  participant ProblemGenerationService

  SpacePage->>ProblemController: Idempotency-Key 또는 생성 UUID 전송
  SpacePage->>RoomProblemController: Idempotency-Key 또는 생성 UUID 전송
  ProblemController->>ProblemGenerationService: 문제 생성 요청과 UUID 전달
  RoomProblemController->>ProblemGenerationService: 문제 생성 요청과 UUID 전달
Loading

Possibly related PRs

Suggested reviewers: junkov0

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/role-error

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.

@SungHuii
SungHuii merged commit de9b5bd into develop Aug 11, 2026
1 of 2 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.

2 participants