Skip to content

feat : 프리뷰 열람 권한 발급(access) 연동 - #30

Merged
Danto7632 merged 1 commit into
mainfrom
feature/preview-access-grant
Aug 14, 2026
Merged

feat : 프리뷰 열람 권한 발급(access) 연동#30
Danto7632 merged 1 commit into
mainfrom
feature/preview-access-grant

Conversation

@Danto7632

Copy link
Copy Markdown
Member

배경

백엔드가 프리뷰 게이트웨이 접근을 세션 소유자에게 묶었습니다(Dvely/Dvely_springboot#104, Issue Dvely/Dvely_springboot#77). 이제 게이트웨이는 URL만으로 열리지 않고, iframe 표시 직전에 열람 권한을 발급받아 소유권 쿠키를 받아야 합니다. 쿠키 없이 프리뷰 URL을 열면 401입니다.

변경 내용

  • POST /api/v1/preview-sessions/{sessionId}/access 호출 추가 (postPreviewSessionAccess + usePreviewAccessQuery)
    • 세션이 ACTIVE가 되면 자동으로 1회 발급받고, 응답의 previewUrl을 iframe src로 사용합니다.
    • 쿠키는 HttpOnly + Set-Cookie로 내려오며 axios가 이미 withCredentials: true라 브라우저가 자동 보관합니다. FE가 값을 다룰 일은 없습니다.
  • 토큰 회전 주의: 발급할 때마다 accessToken이 회전되어 이전에 받은 주소(세션 조회/작업 응답의 previewUrl 포함)는 즉시 404가 됩니다. 그래서
    • iframe에는 반드시 access 응답의 previewUrl만 사용하고,
    • 자동 refetch(윈도우 포커스·재연결)는 모두 껐습니다 — 떠 있는 iframe의 주소가 뒤에서 무효화되는 것을 막기 위함입니다.
    • 새로고침 버튼·미리보기 불러오기 버튼은 frameKey를 올려 재발급 + iframe 리마운트로 동작합니다.
  • 401/발급 실패 처리: 발급이 실패하면(만료·종료된 세션 등) 프로젝트 프리뷰 세션을 다시 동기화하고, 실패 메시지를 패널에 표시합니다. 사용자는 "미리보기 불러오기"로 재시도할 수 있습니다.
  • 회전 모델과 상충하는 미사용 헬퍼 getPreviewProxyPath 제거 (FE가 프록시 URL을 직접 조립하면 안 됩니다).

배포 순서

백엔드 Dvely/Dvely_springboot#104가 먼저(또는 함께) 배포되어야 합니다 — access 엔드포인트가 없으면 프리뷰가 열리지 않습니다. 현재 운영 프리뷰는 Docker 권한 문제로 이미 내려가 있는 상태라 순서에 따른 회귀는 없습니다.

검증

  • npm run typecheck 통과
  • npm run build 통과 (기존 청크 사이즈 경고만 존재)
  • eslint: 변경 파일 기준 신규 경고/에러 없음 (기존 _conversationId 미사용 에러는 본 PR 범위 밖)

@Danto7632
Danto7632 merged commit 1717c69 into main Aug 14, 2026
1 check 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