Skip to content

[Fix] CORS preflight 캐시 누락으로 불필요한 트래픽이 발생하는 문제 - #217

Open
yeonthusiast wants to merge 1 commit into
devfrom
fix/#216
Open

[Fix] CORS preflight 캐시 누락으로 불필요한 트래픽이 발생하는 문제#217
yeonthusiast wants to merge 1 commit into
devfrom
fix/#216

Conversation

@yeonthusiast

@yeonthusiast yeonthusiast commented Aug 17, 2026

Copy link
Copy Markdown
Member

📋 작업 내용

  • 운영 메트릭을 점검하다 사용자 트래픽의 약 27.2%가 CORS preflight(OPTIONS)라는 것을 발견해 수정했습니다.

🎯 관련 이슈

📝 변경 사항

  • SecurityConfig: CorsConfiguration.setMaxAge(1시간) 추가

  • CorsPreflightCacheTest 신규 (3건)

  • maxAge를 지정하지 않으면 Spring이 Access-Control-Max-Age 헤더를 보내지 않고, 브라우저는 자체 기본값인 5초만 캐시합니다. 프론트가 30초 주기로 폴링 중이라 매 폴링마다 preflight가 새로 발생했습니다.

  • 캐시되는 것은 "이 origin이 이 URL에 이 헤더로 요청해도 되는가"라는 정책 답변이며 응답 데이터가 아닙니다. 본 요청은 매번 그대로 나가므로 거래일·마감 시각 등 시간에 민감한 도메인 데이터의 신선도에는 영향이 없습니다.

  • 배포 후 promql로 검증 예정입니다.

📸 스크린샷 (선택사항)

📌 체크리스트

  • 커밋 메시지가 컨벤션을 따릅니다.
  • 로컬에서 기능이 정상적으로 작동하는지 확인했습니다.
  • 주요 변경 사항에 대한 테스트를 추가하거나 수정했고, 테스트가 통과했습니다.
  • 보안상 민감 정보(API 키, 비밀번호 등)가 포함되지 않았는지 확인했습니다.
  • 불필요한 로그, 주석, 사용하지 않는 코드를 제거했습니다.

Summary by CodeRabbit

  • 개선 사항
    • CORS 사전 요청 결과를 최대 1시간 동안 캐시하도록 개선했습니다.
    • 허용된 출처의 사전 요청에 필요한 인증 정보와 자격 증명 헤더가 정상적으로 반환됩니다.
    • 허용되지 않은 출처의 요청은 계속 거부되며 캐시 헤더가 제공되지 않습니다.

- CorsConfiguration에 maxAge 1시간 지정
- CorsPreflightCacheTest 3건 추가 (캐시 헤더, 인증 없는 통과, 비허용 출처 차단)
@yeonthusiast yeonthusiast self-assigned this Aug 17, 2026
@yeonthusiast yeonthusiast added the 🐛 fix 버그 수정 label Aug 17, 2026
@coderabbitai

coderabbitai Bot commented Aug 17, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3206a29e-c40a-4b0b-8a9d-1f1c3529d7f7

📥 Commits

Reviewing files that changed from the base of the PR and between 4b4058e and 9942ead.

📒 Files selected for processing (2)
  • backend/src/main/java/com/muffin/global/config/SecurityConfig.java
  • backend/src/test/java/com/muffin/global/config/CorsPreflightCacheTest.java

Included review availability: Your plan includes up to 1 review per rolling hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

SecurityConfig가 CORS preflight 캐시 기간을 1시간으로 설정합니다. 통합 테스트는 허용 출처의 응답 헤더와 인증 우회 동작, 허용되지 않은 출처의 거부 동작을 검증합니다.

Changes

CORS preflight 캐시

Layer / File(s) Summary
preflight 캐시 기간 설정
backend/src/main/java/com/muffin/global/config/SecurityConfig.java
PREFLIGHT_CACHE_DURATION을 1시간으로 정의하고 CORS 설정의 Access-Control-Max-Age에 적용합니다.
CORS 응답 통합 검증
backend/src/test/java/com/muffin/global/config/CorsPreflightCacheTest.java
허용 출처의 200 응답, 1시간 캐시 기간, 인증 우회 및 credentials 헤더를 검증합니다. 허용되지 않은 출처의 403 응답과 캐시 기간 헤더 부재도 검증합니다.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: ⚪ Minimal · up to 9942e

This change caches CORS preflight policy responses for one hour to reduce unnecessary OPTIONS traffic without caching or altering application data responses. No actionable merge-blocking risk remains beyond normal checks and review.

Suggested reviewers: eugene-shin

Poem

토끼가 헤더에 당근을 심고
preflight는 한 시간 쉬어가요.
허용된 출처엔 길을 열고
낯선 출처엔 문을 닫아요.
깡충, 캐시가 트래픽을 줄여요!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 25.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목은 CORS preflight 캐시 누락을 수정하는 주요 변경 사항을 정확하고 간결하게 설명합니다.
Linked Issues check ✅ Passed [216]에 명시된 Access-Control-Max-Age 설정과 CORS preflight 캐시 문제 해결을 구현하고 관련 테스트를 추가했습니다.
Out of Scope Changes check ✅ Passed 변경 사항은 CORS preflight 캐시 설정과 검증 테스트로 한정되어 있어 범위를 벗어난 변경이 없습니다.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/#216

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🐛 fix 버그 수정

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Fix] CORS preflight 캐시 누락으로 불필요한 트래픽이 발생하는 문제

1 participant