Skip to content

chore: development → main 동기화 및 Vercel 배포 파이프라인 구축#266

Merged
Yeonny0723 merged 720 commits intomainfrom
development
Mar 22, 2026
Merged

chore: development → main 동기화 및 Vercel 배포 파이프라인 구축#266
Yeonny0723 merged 720 commits intomainfrom
development

Conversation

@Yeonny0723
Copy link
Contributor

@Yeonny0723 Yeonny0723 commented Mar 22, 2026

Summary

main 브랜치가 2023/02 이후 관리되지 않아 development 브랜치와 차이가 발생하였고,
이번 PR을 통해 main을 운영 브랜치로 재정비하고, Vercel 기반 배포 파이프라인을 구축하고자 합니다.

주요 변경사항

CI/CD

  • Vercel preview/production 배포 워크플로우 신규 구축

테스트

  • Jest → Vitest 전면 마이그레이션

기능

  • 볼륨 컨트롤, 비디오 컨트롤 컴포넌트 추가
  • partyroom display board 대형 컴포넌트 분리
  • WebSocket 이벤트 타입 AsyncAPI 스펙 기반으로 재구성

버그 수정

  • 1차 QA 목록 수정

Test plan

  • main 머지 후 Vercel production 배포 성공 확인
  • 주요 페이지(partyroom, settings) 정상 동작 확인
    *필요한 사전 작업: 소셜 로그인 이후 동작 테스트를 위해 Vercel custom domain (pfplay.xyz) 연결

- + TextButton이 icon만 받을 수 있도록 children 옵셔널 처리
- + 곡 검색 시 버벅이며 리스팅되는 문제 수정
- 나 강조
- 나 옆에 플레이리스트 변경 버튼 표시
- 대기 등록 버튼 대신 대기 등록 취소 버튼 표시
* refactor: zustand store를 provider로 제공하도록 변경

- RSC의 오용을 방지하기 위해 (pmndrs/zustand#2200)

* refactor: 레이어간 의존성 방향 규칙을 지키기 위해 store context를 shared로 내림
… 나열 (#145)

fix: DJ를 단순 index가 아닌 orderNumber 순으로 나열
* fix: 다이얼로그 내에서 Store 컨텍스트 사용 못하는 문제

* chore: 스토리북을 위한 MockStoreProvider 작성

* feat: 파티룸 전광판 스토어 연동

- 공지사항 제외

* feat: 파티룸 Playback, Deactivation, Aggregation 이벤트 핸들러 구현
* chore: useDidMountEffect >> useDidUpdateEffect 이름 적절하게 변경

* feat: 파티룸 멤버 랜덤 배치 컴포넌트 작성
LivingLikeKrillin and others added 25 commits March 9, 2026 21:06
- PlaylistTrack.linkId: number → string (유튜브 비디오 ID)
- DjingQueue.isRegistered → registered (Swagger 필드명 일치)
- getCrews 미사용 엔드포인트 및 관련 타입 삭제
- AvatarCompositionType enum 추가, PartyroomCrew·GetMyProfileSummaryResponse에 적용
- Avatar 컴포넌트 분기를 faceUri 존재 여부 → compositionType 기반으로 개선
- playlist-action.context removeTrack 파라미터 타입 수정 (linkId → trackId)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
DJ-004 추가, CACHE_MISS_SESSION(PTR-005) 제거, PTR 코드 재번호 부여

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- partyroom enter/exit: /enter → /crews, /exit → DELETE /crews/me
- DJ queue: /djs → /dj-queue, skip: POST → DELETE /playbacks/current
- playlist mutation 응답: void(204)로 변경, 불필요한 응답 타입 제거
- MSW 핸들러 및 통합 테스트 14개 파일 갱신

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
discriminated union(success/failure) 제거 → 플랫 응답 타입으로 변경
response.success 분기 로직 제거, try/catch 기반으로 전환

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- PartyroomEventType enum: 과거형 네이밍으로 통일 (PARTYROOM_CLOSED 등)
- WebSocketEventBase 도입 (flat partyroomId, id, timestamp)
- CrewAvatar 중첩 타입 도입, flattenCrewFromEvent 헬퍼 추가
- PARTYROOM_ACCESS → CREW_ENTERED/CREW_EXITED 분리
- PLAYBACK_SKIP 제거 (DELETE /playbacks/current로 대체)
- Playback 타입에서 likeCount/dislikeCount/grabCount 제거
- 콜백 훅 13개 갱신, 테스트 12개 suite 갱신

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
PLAYBACK_STARTED, PLAYBACK_DEACTIVATED 핸들러에서 invalidateDjingQueue 호출을
제거하고, 사용처가 없어진 useInvalidateDjingQueue 유틸을 삭제한다.
DJ 큐 상태 변경은 DJ_QUEUE_CHANGED 이벤트 핸들러가 유일한 진입점이 된다.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
MeHydration(SSR prefetch)이 쿠키 없이 요청하여 항상 401 실패하던 문제 해소.
개인 데이터는 클라이언트에서 직접 fetch하는 것이 적절하므로 제거한다.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
RootLayout에 있던 PartyroomConnectionProvider(useFetchMe 호출)를
parties/layout.tsx로 내려 인증 흐름(callback 등)에서 불필요한
Me fetch가 발생하지 않도록 한다.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
parseHtmlToReact가 HTML attrs를 React createElement에 그대로 전달하므로
React DOM 호환을 위해 className을 사용해야 한다.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
dynamic import 컴포넌트에 ref를 전달하면 forwardRef 경고가 발생한다.
onReady 콜백에서 이미 playerRef를 설정하고 있으므로 ref prop은 불필요.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
useState 초기화 함수는 SSR에서도 실행되어 서버에서 STOMP 클라이언트가
생성되고 WebSocket 연결 시도 후 3000 (Unauthorized) 에러가 발생했다.
브라우저 환경에서만 인스턴스를 생성하도록 변경한다.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
WalletConnect가 SSR에서 WebSocket relay 연결을 시도하여
3000 (Unauthorized) 에러가 발생하던 문제 해소.
지갑 기능은 parties, settings 경로에서만 사용된다.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
DialogProvider가 RootLayout에 있어 다이얼로그 내용이 WalletProvider
바깥에서 렌더링되는 문제가 있었다. WalletProvider를 RootLayout으로
복원하고 wagmi의 ssr: true 옵션으로 SSR WebSocket 문제를 해결한다.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- parties/layout: profileUpdated 미완료 시 하위 컴포넌트 마운트 차단
- SelectedAvatarStateProvider: useEffect dependency에서 selectedFacePos 제거하여 무한루프 해소
- PartyroomConnectionProvider: SSR에서 PartyroomClient 초기화 방지 (useRef + useEffect)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ReactElement → ReactNode로 수정하여 Next.js layout children과 호환되도록 함

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- vitest.config.ts, vitest.setup.ts 생성
- jest.config.js, jest.resolver.js, jest.setup.js, tsconfig.test.json 제거
- jest-msw-env.ts 커스텀 환경 제거 (Vitest jsdom이 fetch 네이티브 지원)
- 199개 테스트 파일에서 jest.* → vi.* 일괄 치환
- eslint-plugin-jest → 제거 (eslint.config.js 정리)
- Mock 타입을 글로벌 선언으로 제공 (types/vitest.d.ts)
- 미사용 의존성 제거: jest, @swc/jest, jest-environment-jsdom, @types/jest,
  @types/jest-plugin-context, jest-plugin-context, given2
- 의존성 추가: vitest, @vitest/coverage-v8, jsdom
- 201 파일, 999 테스트 전체 통과

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
tsc --noEmit 시 테스트 파일의 vitest 글로벌(describe, test, vi 등) 타입 인식을 위해
types에 vitest/globals를 추가하고, 기존 타입 에러가 있는 테스트 파일은 exclude로 복원

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* chore: standalone 출력 모드 및 관련 스크립트 제거

Vercel 배포 전환으로 output: standalone 불필요

* chore: .vercel/project.json 커밋 및 gitignore 규칙 업데이트

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* ci: build-check를 vercel build 기반으로 교체

* ci: Vercel preview/production 배포 워크플로우 추가

* ci: VERCEL_TOKEN을 env 변수로 전달하여 보안 강화

* fix: build 스크립트에서 setup-standalone.sh 참조 제거

* fix: lint-check Node 버전을 20.19.0으로 업데이트 (jsdom@28 호환)

* ci: 워크플로우 재트리거

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
@vercel
Copy link

vercel bot commented Mar 22, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
pfplay-web Ready Ready Preview, Comment Mar 22, 2026 2:40am

@Yeonny0723 Yeonny0723 self-assigned this Mar 22, 2026
@Yeonny0723 Yeonny0723 merged commit f4edf5a into main Mar 22, 2026
4 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.

4 participants