Skip to content

πŸš€ release(ver 0.75): dev β†’ main 톡합#287

Merged
kwonjin2 merged 16 commits intomainfrom
dev
Apr 16, 2026
Merged

πŸš€ release(ver 0.75): dev β†’ main 톡합#287
kwonjin2 merged 16 commits intomainfrom
dev

Conversation

@kwonjin2
Copy link
Copy Markdown
Collaborator

❓ 이슈

  • close #이슈번호

✍️ Description

πŸ“Έ μŠ€ν¬λ¦°μƒ· (UI λ³€κ²½ μ‹œ)

βœ… Checklist

PR

  • Branch Convention 확인

    feat/* κΈ°λŠ₯ κ΅¬ν˜„, fix/* 버그 μˆ˜μ •, refactor/* κ°œμ„ , chore/* μ„€μ •/ν™˜κ²½

  • Base Branch 확인
  • μ μ ˆν•œ Label μ§€μ •
  • Assignee 및 Reviewer μ§€μ •

Test

  • 둜컬 μž‘λ™ 확인
  • λΉŒλ“œ 톡과 (npm run build)
  • 린트 톡과 (npm run lint)

Additional Notes

  • (μ—†μŒ)

kwonjin2 and others added 16 commits April 15, 2026 17:03
… λ¬΄νš¨ν™” λˆ„λ½λœ 것 μˆ˜μ • (#272)

* refactor: λ‚΄ 할일 λͺ©λ‘ κ°œμ„ (νˆ¬λ‘ μΆ”κ°€ μ‹€νŒ¨ μ‹œ μ—λŸ¬λ©”μ‹œμ§€ ν† μŠ€νŠΈ, μ ‘κ·Όμ„± λ“±)

* refactor: μΊμ‹œ λ¬΄νš¨ν™” 둜직 μΆ”κ°€
- μΊμ‹œ λ¬΄νš¨ν™” 둜직이 λˆ„λ½λ˜μ–΄ μžˆμ–΄, νˆ¬λ‘ crud μ‹œ μƒˆλ‘œκ³ μΉ¨ ν•˜μ§€ μ•ŠμœΌλ©΄ 데이터 κ°±μ‹ x
- μΊμ‹œ λ¬΄νš¨ν™” λ‘œμ§μ„ κ΅¬ν˜„ν•˜μ—¬ μ •μƒμ μœΌλ‘œ κ°±μ‹ o
- 맴버 할일 μ„Ήμ…˜μ˜ 달성λ₯ μ€ λ°±μ—”λ“œμ—μ„œ 동기화 λˆ„λ½μ΄ 원인. λ°±μ—”λ“œ ν•΄κ²° ν›„ 정상 λ™μž‘

* fix: ν΄λ‘œλ“œ 리뷰 반영

* fix: ν΄λ‘œλ“œ 리뷰 반영
* chore: μ‹€μ‹œκ°„ 회의 κ΄€λ ¨ 라이브러리 μΆ”κ°€

* feat: μ‹€μ‹œκ°„ νŠΈλž˜ν‚Ήμ„ μœ„ν•œ ν΄λΌμ΄μ–ΈνŠΈ μ΄ˆκΈ°ν™”

* feat: μ„œλ²„μ‚¬μ΄λ“œ API μš”μ²­ 처리λ₯Ό μœ„ν•œ serverFetch μœ ν‹Έ κ°œμ„ 

* feat: λΉ„λ””μ˜€ ꡬ도 고정을 μœ„ν•œ μ „μ—­ μŠ€νƒ€μΌ μΆ”κ°€

* refactor: supabase ν΄λΌμ΄μ–ΈνŠΈ μ΄ˆκΈ°ν™” 보μž₯ 둜직 μΆ”κ°€ 및 μ•ˆμ •μ„± κ°•ν™”

- supabase ν΄λΌμ΄μ–ΈνŠΈκ°€ null일 경우λ₯Ό λŒ€λΉ„ν•œ ensureSupabase 헬퍼 ν•¨μˆ˜ κ΅¬ν˜„
- ν™˜κ²½ λ³€μˆ˜ λ―Έμ„€μ • μ‹œ λͺ…μ‹œμ μΈ μ—λŸ¬ λ©”μ‹œμ§€λ₯Ό λ°œμƒμ‹œμΌœ 디버깅 및 νƒ€μž… μ•ˆμ „μ„± ν–₯상
- μ½”λ“œ 리뷰 반영 - μ‚¬μš©ν•˜λŠ” μΈ‘μ—μ„œ null 체크 없이 νƒ€μž… μ•ˆμ „ν•˜κ²Œ μ‚¬μš© κ°€λŠ₯ν•˜λ„λ‘ κ°œμ„ 
* feat: μ‹€μ‹œκ°„ 회의 μž…μž₯을 μœ„ν•œ 토큰 λ°œκΈ‰ API κ΅¬ν˜„

- μ°Έμ—¬μž Identity 및 Grantκ°€ ν¬ν•¨λœ AccessToken 생성
- μ„œλ²„ λ‹¨μ—μ„œ requestBackendλ₯Ό μ΄μš©ν•΄ μ‹€μ œ λͺ¨μž„ 멀버인지 λ³΄μ•ˆ 검증 둜직 μΆ”κ°€

* feat: μ‹€μ‹œκ°„ 회의 μƒνƒœ 및 UI μ œμ–΄λ₯Ό μœ„ν•œ λŒ€μ‹œλ³΄λ“œ μƒμˆ˜ μΆ”κ°€

* refactor: 병렬 Promise둜 κ°œμ„  (ν΄λ‘œλ“œ 리뷰 반영)

* fix: λ³΄μ•ˆ 토큰 μœ νš¨μ‹œκ°„ λ³€κ²½
* feat: μ‹€μ‹œκ°„ μ°Έμ—¬μž νŠΈλž˜ν‚Ή 둜직 κ΅¬ν˜„

- μ‹€μ‹œκ°„ 채널에 μ°Έμ—¬μž 동기화 둜직 κ΅¬ν˜„
- isJoined μƒνƒœμ— λ”°λ₯Έ μžλ™ 온라인/μ˜€ν”„λΌμΈ μ „ν™˜ 처리
- νƒ­ λ‹«κΈ° λ“± 예기치 λͺ»ν•œ μ’…λ£Œ 상황 처리

* fix: ν΄λ‘œλ“œ 리뷰 반영

* fix: ν΄λ‘œλ“œ 리뷰 반영

* fix: beforeunload 이벀트 ν•œκ³„ 보완, λͺ¨λ°”일 ν™˜κ²½ κ°œμ„ 

* fix: ν΄λ‘œλ“œ 리뷰 반영
* feat: 회의 μ„Ήμ…˜ μƒμœ„ ꡬ쑰 및 데이터 연동 둜직 κ΅¬ν˜„

- MeetingSectionμ—μ„œ 토큰 λ°œκΈ‰ 및 Suspense μ„€μ •
- MeetingContentμ—μ„œ μœ μ € 정보 및 Presence 데이터 연동 둜직 뢄리

* feat: μ‹€μ‹œκ°„ 회의 μž…μž₯ μ „ λŒ€κΈ°μ‹€ UI 개발

* feat: 화상 νšŒμ˜μ‹€ 및 μ°Έμ—¬μž κ·Έλ¦¬λ“œ κ΅¬ν˜„

* feat: λŒ€μ‹œλ³΄λ“œ 탭에 μΆ”κ°€ (μ„œμŠ€νŽœμŠ€λ°”μš΄λ”λ¦¬ 적용)

* fix: ν΄λ‘œλ“œ 리뷰 반영

* fix: νšŒμ˜μ‹€ 전체적인 μŠ€νƒ€μΌλ§ μˆ˜μ •
Updated README to include project details and user journey.
… ν›… 잘λͺ»λœ ν™•μž₯자 μˆ˜μ •) (#286)

* fix: λͺ¨μž„ CRUD ν›„ 데이터 μ¦‰μ‹œ 반영 둜직 보완 및 λŸ°νƒ€μž„ μ—λŸ¬ μˆ˜μ •

- MemberListSection: 리뷰어 정보 λΆ€μž¬ μ‹œ λ°œμƒν•˜λ˜ TypeError μˆ˜μ • (Optional Chaining μΆ”κ°€)
- API: getMainGatherings, getMyGatherings에 Cache-Control: no-cache 헀더 μΆ”κ°€ν•˜μ—¬ μ΅œμ‹  데이터 보μž₯
- Queries: λͺ¨μž„ 생성/μˆ˜μ •/μ‚­μ œ μ‹œ memberships 쿼리 λ¬΄νš¨ν™” μΆ”κ°€ 및 invalidateQueries await 처리
- Components: 생성/μˆ˜μ •/μ‚­μ œ 성곡 ν›„ 이동 μ‹œ router.refresh() ν˜ΈμΆœν•˜μ—¬ App Router μΊμ‹œ κ°±μ‹ 

* fix: λͺ¨μž„ λŒ€μ‹œλ³΄λ“œ 맴버 νƒ­ 이미지 500μ—λŸ¬ μ‹œ μ „νŒŒ λ°©μ§€λ₯Ό μœ„ν•œ λ°©μ–΄λ‘œμ§

* fix: hooks 잘λͺ»λœ ν™•μž₯자 μˆ˜μ •

* fix: ν΄λ‘œλ“œ 리뷰 반영
@vercel
Copy link
Copy Markdown

vercel bot commented Apr 16, 2026

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

Project Deployment Actions Updated (UTC)
completionisland Ready Ready Preview, Comment Apr 16, 2026 10:42pm

@claude
Copy link
Copy Markdown
Contributor

claude bot commented Apr 16, 2026

Claude finished @kwonjin2's task in 3m 36s β€”β€” View job


PR Review: dev β†’ main (ver 0.75)

리뷰 μ§„ν–‰ 상황

  • λ³€κ²½ 파일 뢄석
  • CRITICAL 이슈 κ²€ν† 
  • HIGH 이슈 κ²€ν† 
  • MEDIUM 이슈 κ²€ν† 
  • 인라인 μ½”λ©˜νŠΈ μž‘μ„±
  • 리뷰 μš”μ•½ μž‘μ„±

리뷰 κ²°κ³Ό μš”μ•½

βœ… CRITICAL 이슈: μ—†μŒ

μ£Όμš” μ•„ν‚€ν…μ²˜ κ·œμΉ™μ„ 잘 μ€€μˆ˜ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€:

  • βœ… page.tsx/layout.tsx에 'use client' μ‚¬μš© μ—†μŒ
  • βœ… μ„œλ²„ μ½”λ“œμ—μ„œ axios λ―Έμ‚¬μš© (fetch μ‚¬μš©)
  • βœ… μ„œλ²„ μΊμ‹œ λ°μ΄ν„°μ˜ 이쀑 λ¬΄νš¨ν™” (invalidateQueries + updateTag) μ˜¬λ°”λ₯΄κ²Œ 적용
  • βœ… ν΄λΌμ΄μ–ΈνŠΈ μ „μš© λ°μ΄ν„°λŠ” invalidateQueries만 μ‚¬μš© (todos)

⚠️ HIGH 이슈: 1건

  1. MeetingGrid.tsx - import μˆœμ„œ μœ„λ°˜ (μŠ€νƒ€μΌ import μœ„μΉ˜)

πŸ“ MEDIUM 이슈: 2건

  1. useMeetingPresence.ts - μ—λŸ¬ 처리 κ°œμ„  ν•„μš” (console.error μΆ”κ°€ ꢌμž₯)
  2. serverFetch.ts - ν”„λ‘œλ•μ…˜ 디버그 둜그 정리 ν•„μš”

πŸ‘ 잘 μž‘μ„±λœ 점

  1. 이쀑 μΊμ‹œ λ¬΄νš¨ν™” νŒ¨ν„΄ - gathering mutationsμ—μ„œ μ„œλ²„/ν΄λΌμ΄μ–ΈνŠΈ μΊμ‹œλ₯Ό λͺ¨λ‘ μ˜¬λ°”λ₯΄κ²Œ λ¬΄νš¨ν™”
  2. 병렬 fetch - LiveKit 토큰 λ°œκΈ‰ APIμ—μ„œ Promise.all μ‚¬μš©
  3. 방어적 ν”„λ‘œκ·Έλž˜λ° - applications APIμ—μ„œ λ°±μ—”λ“œ 응닡 μ˜ˆμ™Έ 처리
  4. SuspenseBoundary ν™œμš© - 회의 κΈ°λŠ₯ κ΄€λ ¨ μ»΄ν¬λ„ŒνŠΈμ— μ μ ˆν•œ λ‘œλ”©/μ—λŸ¬ 경계 μ„€μ •

μ΅œμ’… 의견

μ „λ°˜μ μœΌλ‘œ ν”„λ‘œμ νŠΈ κ·œμΉ™μ„ 잘 μ€€μˆ˜ν•œ PRμž…λ‹ˆλ‹€. LiveKit μ‹€μ‹œκ°„ 회의 κΈ°λŠ₯이 μ˜¬λ°”λ₯Έ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μœΌλ‘œ κ΅¬ν˜„λ˜μ—ˆμœΌλ©°, 특히 μΊμ‹œ λ¬΄νš¨ν™” μ „λž΅μ΄ κ°œμ„ λœ 점이 λ‹λ³΄μž…λ‹ˆλ‹€.

HIGH 이슈 1건(import μˆœμ„œ)은 μˆ˜μ •μ„ ꢌμž₯ν•˜λ©°, MEDIUM μ΄μŠˆλ“€μ€ μ„ νƒμ μœΌλ‘œ κ°œμ„ ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.


@kwonjin2 kwonjin2 merged commit fa3ba6a into main Apr 16, 2026
7 checks passed

import { GridLayout, ParticipantTile, useTracks } from '@livekit/components-react';
import '@livekit/components-styles';
import { Track } from 'livekit-client';
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

HIGH: import μˆœμ„œ μœ„λ°˜

μŠ€νƒ€μΌ import(@livekit/components-styles)λŠ” λͺ¨λ“  μ½”λ“œ import 후에 와야 ν•©λ‹ˆλ‹€.

ν˜„μž¬:

import { GridLayout, ParticipantTile, useTracks } from '@livekit/components-react';
import '@livekit/components-styles';
import { Track } from 'livekit-client';

μˆ˜μ •:

Suggested change
import { Track } from 'livekit-client';
'use client';
import { GridLayout, ParticipantTile, useTracks } from '@livekit/components-react';
import { Track } from 'livekit-client';
import '@livekit/components-styles';

.claude/rules/code-style.md μ°Έκ³ : importλŠ” React/Next.js β†’ μ™ΈλΆ€ 라이브러리 β†’ λ‚΄λΆ€ λͺ¨λ“ˆ β†’ μƒλŒ€ 경둜 β†’ νƒ€μž… import μˆœμ„œλ‘œ μ •λ ¬ν•˜κ³ , μŠ€νƒ€μΌμ€ λ§ˆμ§€λ§‰μ— μœ„μΉ˜ν•©λ‹ˆλ‹€.

Comment on lines +100 to +104
await channel.untrack();
}
} catch (error) {
// 연결이 미처 μ•ˆ 된 μƒνƒœμ—μ„œ μ‹œλ„ν•˜λ©΄ μ—λŸ¬κ°€ λ‚  수 μžˆμœΌλ‚˜ λ¬΄μ‹œ (μœ„ SUBSCRIBED μ—μ„œ ν›„μ²˜λ¦¬λ¨)
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MEDIUM: μ—λŸ¬ 처리 κ°œμ„  ν•„μš”

try-catch λΈ”λ‘μ—μ„œ μ—λŸ¬λ₯Ό μ™„μ „νžˆ λ¬΄μ‹œν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 디버깅을 μœ„ν•΄ μ΅œμ†Œν•œ μ½˜μ†” μ—λŸ¬λŠ” 좜λ ₯ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

Suggested change
await channel.untrack();
}
} catch (error) {
// 연결이 미처 μ•ˆ 된 μƒνƒœμ—μ„œ μ‹œλ„ν•˜λ©΄ μ—λŸ¬κ°€ λ‚  수 μžˆμœΌλ‚˜ λ¬΄μ‹œ (μœ„ SUBSCRIBED μ—μ„œ ν›„μ²˜λ¦¬λ¨)
}
} catch (error) {
// 연결이 미처 μ•ˆ 된 μƒνƒœμ—μ„œ μ‹œλ„ν•˜λ©΄ μ—λŸ¬κ°€ λ‚  수 μžˆμœΌλ‚˜ λ¬΄μ‹œ (μœ„ SUBSCRIBED μ—μ„œ ν›„μ²˜λ¦¬λ¨)
console.error('[useMeetingPresence] Track status update failed:', error);
}

μ—λŸ¬κ°€ μ˜ˆμƒλ˜λŠ” κ²½μš°λΌλ„ 둜그λ₯Ό 남기면 μ‹€μ œ 문제 λ°œμƒ μ‹œ 원인 νŒŒμ•…μ— 도움이 λ©λ‹ˆλ‹€.

Comment thread src/lib/serverFetch.ts
}

// DEBUG LOG
// TODO: ν”„λ‘œλ•μ…˜ ν…ŒμŠ€νŠΈ μ™„λ£Œ ν›„ 제거
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

INFO: ν”„λ‘œλ•μ…˜ λ‘œκΉ… 정리 ν•„μš”

TODO μ£Όμ„λŒ€λ‘œ ν”„λ‘œλ•μ…˜ 배포 전에 디버그 λ‘œκ·Έλ“€μ„ μ œκ±°ν•˜κ±°λ‚˜, ν™˜κ²½ λ³€μˆ˜λ‘œ μ œμ–΄ν•˜λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€.

μ œμ•ˆ:

const DEBUG = process.env.NODE_ENV !== 'production';

if (DEBUG) {
  console.log(`[BFF -> Backend] ${init.method} ${url}`);
  // ... 기타 λ‘œκ·Έλ“€
}

ν”„λ‘œλ•μ…˜μ—μ„œλŠ” λ―Όκ°ν•œ 정보(Authorization 헀더 λ“±)κ°€ λ‘œκ·Έμ— λ…ΈμΆœλ˜μ§€ μ•Šλ„λ‘ μ£Όμ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€.

Comment on lines +17 to +29
const gatheringId = parseInt(room.split('-')[1], 10);
const [memberResponse, userResponse] = await Promise.all([
requestBackend({
request: req,
endpoint: `v1/gatherings/${gatheringId}/members`,
overrideSearchParams: new URLSearchParams(),
}),
requestBackend({
request: req,
endpoint: 'v1/users/me',
overrideSearchParams: new URLSearchParams(),
}),
]);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

πŸ‘ 잘 μž‘μ„±λœ 점: 병렬 fetch νŒ¨ν„΄

Promise.all을 μ‚¬μš©ν•˜μ—¬ 멀버 확인과 μœ μ € 정보 쑰회λ₯Ό λ³‘λ ¬λ‘œ μ²˜λ¦¬ν•œ 것이 μ’‹μŠ΅λ‹ˆλ‹€. μ΄λŠ” .claude/CLAUDE.md의 "병렬 fetchλŠ” Promise.all ν•„μˆ˜" κ·œμΉ™μ„ 잘 λ”°λ₯΄κ³  μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ μ„œλ²„ μ»΄ν¬λ„ŒνŠΈ/API Routeμ—μ„œ requestBackend (fetch 기반)을 μ‚¬μš©ν•œ 것도 μ˜¬λ°”λ₯Έ νŒ¨ν„΄μž…λ‹ˆλ‹€.

Comment on lines +84 to +89
onSuccess: async (data, variables, onMutateResult, context) => {
await invalidateServerCache(GATHERING_TAGS.all);
await Promise.all([
queryClient.invalidateQueries({ queryKey: gatheringKeys.all }),
queryClient.invalidateQueries({ queryKey: ['memberships'] }),
]);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

πŸ‘ 잘 μž‘μ„±λœ 점: 이쀑 μΊμ‹œ λ¬΄νš¨ν™” νŒ¨ν„΄

λͺ¨μž„ λ°μ΄ν„°λŠ” μ„œλ²„μ—μ„œ prefetchQuery + next.tags둜 μΊμ‹œλ˜λ―€λ‘œ, mutation 성곡 μ‹œ λ‹€μŒκ³Ό 같이 이쀑 μΊμ‹œ λ¬΄νš¨ν™”κ°€ ν•„μš”ν•©λ‹ˆλ‹€:

  1. invalidateServerCache(GATHERING_TAGS.all) β†’ μ„œλ²„ Data Cache λ¬΄νš¨ν™” (λ‹€λ₯Έ μœ μ €λ„ μ΅œμ‹  데이터 확인)
  2. invalidateQueries β†’ ν˜„μž¬ μœ μ € ν™”λ©΄ μ¦‰μ‹œ κ°±μ‹ 

이 νŒ¨ν„΄μ€ .claude/rules/tanstack-query.md의 "곡개 데이터 (prefetchQuery + next.tags둜 μ„œλ²„ μΊμ‹œλ¨)" κ·œμΉ™μ„ μ •ν™•νžˆ λ”°λ₯΄κ³  μžˆμŠ΅λ‹ˆλ‹€. πŸ‘

λ˜ν•œ Promise.all둜 병렬 λ¬΄νš¨ν™”ν•˜κ³ , await둜 μˆœμ„œλ₯Ό 보μž₯ν•œ 것도 쒋은 νŒ¨ν„΄μž…λ‹ˆλ‹€.

@kwonjin2 kwonjin2 self-assigned this Apr 16, 2026
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.

3 participants