Skip to content

Conversation

@hyunn522
Copy link
Contributor

@hyunn522 hyunn522 commented Dec 8, 2025

📝 요약

🔖 변경 사항

✅ 리뷰 요구사항

📸 확인 방법 (선택)



📌 PR 진행 시 이러한 점들을 참고해 주세요

* P1 : 꼭 반영해 주세요 (Request Changes) - 이슈가 발생하거나 취약점이 발견되는 케이스 등
* P2 : 반영을 적극적으로 고려해 주시면 좋을 것 같아요 (Comment)
* P3 : 이런 방법도 있을 것 같아요~ 등의 사소한 의견입니다 (Chore)

Summary by CodeRabbit

릴리즈 노트

  • 새 기능
    • 영상 재생 중 자동 폴백 메커니즘 추가로 재생 안정성 강화
    • 재생 만료 시간 및 폴백 옵션 설정 지원

✏️ Tip: You can customize this high-level summary in your review settings.

@hyunn522 hyunn522 self-assigned this Dec 8, 2025
@hyunn522 hyunn522 linked an issue Dec 8, 2025 that may be closed by this pull request
@coderabbitai
Copy link

coderabbitai bot commented Dec 8, 2025

Walkthrough

CloudFront 쿠키 서명 실패 시 S3 직접 접근으로 자동 폴백하는 메커니즘이 추가되었습니다. 서명 결과를 boolean으로 반환하도록 변경되었으며, 실패 시 fallback S3 URL을 조회하고 응답에 플래그를 추가합니다.

Changes

Cohort / File(s) Summary
CloudFront 폴백 메커니즘
src/main/java/app/allstackproject/privideo/domain/video/service/CloudFrontCookieService.java
addSignedCookies 메서드를 void에서 boolean 반환 타입으로 변경. 설정 기반 폴백 제어 플래그 추가. 내부 헬퍼 메서드 addSignedCookiesInternal 추가. 성공 시 true, 폴백 필요 시 false 반환.
응답 DTO 확장
src/main/java/app/allstackproject/privideo/domain/video/dto/response/JoinVideoSessionResponse.java
playbackUrl 필드를 final에서 가변으로 변경, @Setter 추가. 새로운 fallbackToS3 필드 추가 (@Setter, @JsonIgnore 포함). 생성자 및 팩토리 메서드 업데이트.
컨트롤러 및 서비스 통합
src/main/java/app/allstackproject/privideo/domain/video/controller/VideoController.java, src/main/java/app/allstackproject/privideo/domain/video/service/VideoService.java
joinVideoSession에서 addSignedCookies boolean 반환값 처리. 서명 실패 시 getFallbackPlaybackUrl 호출하여 S3 URL 조회. 응답에 playbackUrl 및 fallback 플래그 조건부 추가. VideoService에 새로운 getFallbackPlaybackUrl 메서드 추가.
설정 추가
src/main/resources/application.yml
cloud.aws.s3.presign 아래 playback-expiration: PT1H 추가. cloud.cloudfront 아래 fallback-enabled: true 추가.

Sequence Diagram(s)

sequenceDiagram
    participant Client
    participant VideoController
    participant CloudFrontCookieService
    participant VideoService
    participant S3Util
    
    Client->>VideoController: joinVideoSession(request)
    activate VideoController
    
    Note over VideoController,CloudFrontCookieService: Normal Flow (Fallback Disabled)
    VideoController->>CloudFrontCookieService: addSignedCookies(response, hlsPrefix)
    activate CloudFrontCookieService
    CloudFrontCookieService->>CloudFrontCookieService: addSignedCookiesInternal()
    CloudFrontCookieService-->>VideoController: true (success)
    deactivate CloudFrontCookieService
    
    rect rgb(200, 255, 200)
        Note over VideoController: Build response<br/>with CloudFront URL
        VideoController->>VideoController: buildResponse (no fallback)
    end
    
    VideoController-->>Client: JoinVideoSessionResponse
    deactivate VideoController
    
    break
    end
    
    Client->>VideoController: joinVideoSession(request)
    activate VideoController
    
    Note over VideoController,S3Util: Fallback Flow (CloudFront Signing Fails)
    VideoController->>CloudFrontCookieService: addSignedCookies(response, hlsPrefix)
    activate CloudFrontCookieService
    CloudFrontCookieService->>CloudFrontCookieService: addSignedCookiesInternal()
    CloudFrontCookieService->>CloudFrontCookieService: catch exception, log
    CloudFrontCookieService-->>VideoController: false (fallback needed)
    deactivate CloudFrontCookieService
    
    rect rgb(255, 220, 200)
        Note over VideoController,S3Util: Fallback to S3
        VideoController->>VideoService: getFallbackPlaybackUrl(hlsPrefix)
        activate VideoService
        VideoService->>S3Util: generatePlaybackUrl(hlsPrefix)
        S3Util-->>VideoService: S3 presigned URL
        VideoService-->>VideoController: S3 URL
        deactivate VideoService
        
        VideoController->>VideoController: buildResponse with S3 URL<br/>+ fallbackToS3 = true
    end
    
    VideoController-->>Client: JoinVideoSessionResponse (S3 fallback)
    deactivate VideoController
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

주의 깊게 검토해야 할 항목:

  • CloudFrontCookieService.addSignedCookies 메서드의 boolean 반환 로직 및 예외 처리 흐름
  • VideoController.joinVideoSession에서 CloudFront 실패 시 S3 폴백 처리 로직의 정확성
  • JoinVideoSessionResponse의 가변 필드(playbackUrl) 변경으로 인한 의도하지 않은 부작용
  • fallback-enabled 설정 플래그의 동작 검증 (CloudFront 우선/비활성화 시나리오)
  • @JsonIgnore가 적용된 fallbackToS3 필드가 실제로 응답 직렬화 시 제외되는지 확인

Poem

🐰 CloudFront이 넘어지면,
S3가 손을 잡네!
boolean의 진실 하나로,
폴백의 길을 열었고니다.
설정의 깃발이 펄럭이며,
신뢰성 높은 재생을 부르네! 🎬


📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Free

📥 Commits

Reviewing files that changed from the base of the PR and between 1ed46ed and c2ec115.

📒 Files selected for processing (5)
  • src/main/java/app/allstackproject/privideo/domain/video/controller/VideoController.java (1 hunks)
  • src/main/java/app/allstackproject/privideo/domain/video/dto/response/JoinVideoSessionResponse.java (3 hunks)
  • src/main/java/app/allstackproject/privideo/domain/video/service/CloudFrontCookieService.java (1 hunks)
  • src/main/java/app/allstackproject/privideo/domain/video/service/VideoService.java (1 hunks)
  • src/main/resources/application.yml (1 hunks)

Note

🎁 Summarized by CodeRabbit Free

Your organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Pro by visiting https://app.coderabbit.ai/login.

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

@hyunn522 hyunn522 merged commit 6ff27aa into develop Dec 8, 2025
1 check passed
@hyunn522 hyunn522 deleted the feat/#105/cloudfront-fallback-처리 branch December 9, 2025 03:30
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.

Feat: CloudFront fallback 처리

2 participants