Skip to content

refactor: 로그인 진입 시 세션 조회 왕복 제거 및 스플래시 전환 개선#348

Merged
iOdiO89 merged 13 commits into
devfrom
refactor/346-login
Jul 17, 2026
Merged

refactor: 로그인 진입 시 세션 조회 왕복 제거 및 스플래시 전환 개선#348
iOdiO89 merged 13 commits into
devfrom
refactor/346-login

Conversation

@iOdiO89

@iOdiO89 iOdiO89 commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

작업 요약

  • 로그인 페이지 진입 성능과 스플래시→로그인 전환의 시각적 품질을 개선했습니다.

작업 내용

1. 렌더 경로에서 세션 조회(getMe) 백엔드 왕복 제거

기존에는 로그인 페이지 SSR 시 layoutpage 두 곳에서 getMe()(GET /api/v1/users/me)를 await 해서, 세션 조회 백엔드 왕복이 끝나야 로그인 UI가 렌더됐습니다.

  • access token JWT에 이미 role(GUEST/MEMBER)이 담겨 있어, 네트워크 없이 동기 decode로 세션을 판정하도록 전환
  • getRoleFromToken() 유틸 추가 (기존 decodeJwt 재사용)
  • login/layout.tsx 삭제 (getMe·HydrationBoundary·리다이렉트가 모두 불필요해짐)

→ 렌더 경로의 세션 조회 백엔드 왕복 1회 → 0회, getMe 호출 지점 2곳 → 0곳

2. 멤버 리다이렉트 & 스테일 토큰 루프 가드

  • 멤버가 /login에 직접 진입하면 홈으로 리다이렉트 (JWT role 기반, 서버 왕복 없음)
  • 무효화된 스테일 토큰(밴/강제 로그아웃 등)으로 /login ↔ /home 리다이렉트 루프가 도는 것을 방지 (action=session-expired일 때 멤버 리다이렉트 스킵)

3. 게스트 세션 재활용 판정을 클릭 시점으로 일원화

  • 서버에서 canReuseGuestSession(JWT role 스냅샷)을 넘기지 않음
  • handleGuestLogin이 클릭 시 항상 refreshClientToken() 시도 → 실패 시 새 게스트 발급
  • 재활용 가능 여부를 실제 서버(refresh)가 판정 — 발급 시점 스냅샷을 신뢰하지 않음
  • proxy가 진입 시 게스트 세션을 보장하므로 안전

4. 스플래시 배경 FOUC 제거

  • 첫 페인트에서 회색 배경이 깜빡인 뒤 파랑으로 바뀌던 문제 수정
  • 배경/크기를 인라인 스타일로 옮겨, 외부 CSS 로드 전에도 첫 페인트부터 파란 배경 보장

5. 로그인 진입 시 fade-in 애니메이션

  • 문구·버튼이 뚝 나타나던 것을 부드러운 fade-in으로 변경 (animate-in fade-in-0, RSC 유지 · 클라이언트 전환 없음)
  • 로고는 스플래시 착지 전환을 유지하기 위해 제외

스크린샷

변경 전

2026-07-16.10.47.53.mov

변경 후

2026-07-16.10.46.43.mov

연관 이슈

closes #346

Summary by CodeRabbit

  • 새 기능
    • 로그인 시 액세스 토큰 역할을 기준으로 회원/게스트 흐름을 자동 분기합니다.
    • 공유 의도 처리를 URL 단위로 중복 방지해 안정적으로 처리합니다.
  • 버그 수정
    • 공유 링크 전송 실패 후 동일 URL 재시도를 허용하도록 동작을 보정했습니다.
    • 불필요한 사용자 조회를 줄이고 리다이렉트 흐름을 정돈했습니다.
  • 스타일
    • 스플래시 배경 전환이 더 자연스럽게 바뀌고, 모션 감소 환경에서는 로고 애니메이션만 비활성화됩니다.
    • 로그인 화면 애니메이션과 Pretendard 기반 글꼴이 적용됩니다.

@iOdiO89 iOdiO89 self-assigned this Jul 16, 2026
@github-actions
github-actions Bot requested review from kanghaeun and ychany July 16, 2026 01:56
@github-actions github-actions Bot added the refactor Extra attention is needed label Jul 16, 2026
@github-actions

Copy link
Copy Markdown

Discord 스레드 연동용 메타데이터입니다. discord-pr-bot 워크플로가 자동 생성하며, 수정·삭제하면 PR 과 Discord 알림 연동이 끊깁니다.

@vercel

vercel Bot commented Jul 16, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
depromeet Ready Ready Preview, Comment Jul 17, 2026 8:55am
piki Ready Ready Preview, Comment Jul 17, 2026 8:55am

* refactor: /archive 탭 쿼리 파라미터를 /archive/wish, /archive/tournament 경로로 분리

* refactor: 구버전 /archive(?tab=) 경로를 신규 경로로 리다이렉트

* refactor: 옛 /wish 페이지 잔재 정리 및 archive 콜로케이션 재배치

* fix: 위시 페이지 체류 중 후속 공유 인텐트가 무시되던 문제 수정

* fix: 보관 탭 활성 판정 경로 경계 추가 및 위시 추가 후 중복 라우팅 제거

* fix: 공유 인텐트 실패 URL 잠금 해제 및 링크 담기 실패 시 다이얼로그 유지
@coderabbitai

coderabbitai Bot commented Jul 16, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

로그인 페이지의 회원 판정이 getMe 조회에서 액세스 토큰의 JWT 역할 확인으로 변경되었습니다. 게스트 로그인, 공유 URL 중복 처리, 스플래시 배경, Pretendard 로딩, 개발용 React Query Devtools 설정도 조정되었습니다.

Changes

로그인 인증 흐름

Layer / File(s) Summary
JWT 역할 판별
apps/web/src/utils/auth.ts
유효한 액세스 토큰에서 GUEST 또는 MEMBER 역할을 추출하는 getRoleFromToken을 추가했습니다.
로그인 페이지 회원 리다이렉트
apps/web/src/app/login/page.tsx
MEMBER 역할이면서 SESSION_EXPIRED가 아닌 경우 홈으로 리다이렉트하고, 로그인 UI에 진입 애니메이션을 추가했습니다.
게스트 로그인 토큰 갱신
apps/web/src/app/login/_components/LoginButtons.tsx
canReuseGuestSession prop을 제거하고, 클라이언트 토큰 갱신 실패 시 게스트 발급을 실행하도록 변경했습니다.

위시 공유 처리

Layer / File(s) Summary
위시 공유 URL 중복 처리
apps/web/src/app/archive/wish/_hooks/useShareIntentWish.ts
공유 URL별 처리 상태를 추적하고, 뮤테이션 완료 후 동일 URL을 다시 처리할 수 있도록 변경했습니다.

스플래시 및 렌더링 설정

Layer / File(s) Summary
스플래시 배경 및 애니메이션 스타일
apps/web/src/app/_components/SplashClient.tsx, apps/web/src/app/_components/splash.css
배경색·크기·전환을 인라인 스타일로 제어하고 reduced-motion 환경에서 로고 애니메이션을 비활성화했습니다.
Pretendard 렌더링 설정
apps/web/src/app/layout.tsx, apps/web/src/styles/globals.css
Pretendard 동적 서브셋 CSS를 로드하고 문서 기본 글꼴을 Pretendard 및 시스템 폴백으로 지정했습니다.
개발용 Devtools 로딩
apps/web/src/components/Providers.tsx
React Query Devtools를 개발 환경에서만 동적으로 로드하고 렌더링하도록 변경했습니다.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant LoginPage
  participant getRoleFromToken
  participant LoginButtons
  participant refreshClientToken
  participant postGuestLoginMutation
  LoginPage->>getRoleFromToken: access_token 역할 확인
  getRoleFromToken-->>LoginPage: MEMBER 또는 null
  LoginPage->>LoginButtons: redirect와 action 전달
  LoginButtons->>refreshClientToken: 클라이언트 토큰 갱신
  refreshClientToken-->>LoginButtons: 성공 또는 실패
  LoginButtons->>postGuestLoginMutation: 실패 시 게스트 발급
Loading

Possibly related PRs

  • TeamPiKi/client#328: 로그인 페이지와 LoginButtons의 props 및 로그인 흐름이 겹칩니다.

Suggested labels: WEB

Suggested reviewers: kanghaeun

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning 로그인 성능 개선 외에 스플래시 전환, 폰트 로딩 방식, Pretendard preload, DevTools 동적 로드 등 이슈 #346 범위를 벗어난 변경이 포함됩니다. 이슈 #346 범위만 남기고 스플래시, 폰트, DevTools 관련 변경은 별도 PR로 분리하세요.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목이 로그인 진입 시 세션 조회 제거와 스플래시 전환 개선이라는 핵심 변경을 정확히 요약합니다.
Linked Issues check ✅ Passed 로그인 레이아웃의 getMe 블로킹 제거, JWT role 동기 판정, 게스트 세션 판정의 클릭 시점 이동이 이슈 #346 요구와 일치합니다.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/346-login

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 5

🧹 Nitpick comments (2)
apps/web/src/app/archive/tournament/_components/TournamentStatusTab.tsx (1)

19-34: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

탭 상태를 보조기기에 노출해 주세요.

현재 선택 상태가 색상과 indicator로만 표현되어 스크린 리더에는 일반 버튼 그룹으로 노출됩니다. wrapper에 role="tablist", 각 버튼에 role="tab"aria-selected를 추가해 선택 상태를 전달해 주세요. 이 지적은 현재 컴포넌트가 콘텐츠 전환용 탭 UI로 사용되는 구현에 근거합니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/web/src/app/archive/tournament/_components/TournamentStatusTab.tsx`
around lines 19 - 34, Update the tab wrapper around TABS in TournamentStatusTab
to use role="tablist", and add role="tab" plus aria-selected based on activeTab
=== tab.value to each tab button so assistive technologies receive the selection
state.
apps/web/src/app/archive/_common/_components/ArchivePageLayout.tsx (1)

3-8: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

컴포넌트 props 타입 이름을 컴포넌트별로 명시해 주세요.

세 파일 모두 일반적인 Props를 사용해 저장소의 명명 규칙을 위반합니다. As per coding guidelines, 컴포넌트 props 타입은 {ComponentName}Props 형식을 사용해야 합니다.

  • apps/web/src/app/archive/_common/_components/ArchivePageLayout.tsx#L3-L8: PropsArchivePageLayoutProps로 변경하고 시그니처 참조를 갱신해 주세요.
  • apps/web/src/app/archive/tournament/_components/TournamentHistoryList.tsx#L8-L13: PropsTournamentHistoryListProps로 변경하고 시그니처 참조를 갱신해 주세요.
  • apps/web/src/app/archive/tournament/_components/TournamentStatusTab.tsx#L7-L10: PropsTournamentStatusTabProps로 변경하고 시그니처 참조를 갱신해 주세요.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/web/src/app/archive/_common/_components/ArchivePageLayout.tsx` around
lines 3 - 8, Rename the generic Props type to the component-specific name and
update its usage in ArchivePageLayout.tsx (lines 3-8) to ArchivePageLayoutProps,
TournamentHistoryList.tsx (lines 8-13) to TournamentHistoryListProps, and
TournamentStatusTab.tsx (lines 7-10) to TournamentStatusTabProps. Ensure each
component signature references its renamed type.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/web/src/app/archive/tournament/_components/TournamentHistoryList.tsx`:
- Around line 12-13: Update TournamentHistoryList to distinguish the empty-state
message when statuses includes COMPLETED, using the existing tab context or an
emptyMessage prop. Ensure completed tournaments show completion-appropriate
wording, while other statuses retain the current “not started” message; align
the condition with the COMPLETED mapping in ArchiveTournamentClient.tsx.

In `@apps/web/src/app/archive/wish/_components/WishContentClient.tsx`:
- Around line 5-6: Update the useDeleteWishes and useShareIntentWish imports in
WishContentClient.tsx to use the project’s `@/`* absolute path alias instead of
relative sibling-directory paths; keep relative imports only for files in the
same directory.

In `@apps/web/src/app/archive/wish/_hooks/useShareIntentWish.ts`:
- Around line 32-51: Update handleShareIntent so the processedUrlsRef entry is
removed in the mutation’s onSettled callback rather than only onError, allowing
both successful and failed URLs to be shared again while preserving duplicate
protection during processing.

In `@apps/web/src/app/login/page.tsx`:
- Around line 37-39: In the login page JSX paragraph element, reformat the
className attribute so each line complies with the 100-character print width
while preserving the existing class names and whitespace-pre-line behavior.

In `@apps/web/src/utils/auth.ts`:
- Around line 34-41: Update getRoleFromToken to validate payload.role at runtime
instead of relying on the UserIdentityTypeT type assertion. Return the role only
when it is exactly an allowed GUEST or MEMBER value; return null for missing,
arbitrary, or non-string values.

---

Nitpick comments:
In `@apps/web/src/app/archive/_common/_components/ArchivePageLayout.tsx`:
- Around line 3-8: Rename the generic Props type to the component-specific name
and update its usage in ArchivePageLayout.tsx (lines 3-8) to
ArchivePageLayoutProps, TournamentHistoryList.tsx (lines 8-13) to
TournamentHistoryListProps, and TournamentStatusTab.tsx (lines 7-10) to
TournamentStatusTabProps. Ensure each component signature references its renamed
type.

In `@apps/web/src/app/archive/tournament/_components/TournamentStatusTab.tsx`:
- Around line 19-34: Update the tab wrapper around TABS in TournamentStatusTab
to use role="tablist", and add role="tab" plus aria-selected based on activeTab
=== tab.value to each tab button so assistive technologies receive the selection
state.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 48396b3f-c93e-4dfa-80f7-ac53771f3c24

📥 Commits

Reviewing files that changed from the base of the PR and between 7da38be and ba8c24c.

📒 Files selected for processing (54)
  • apps/app/app/+native-intent.ts
  • apps/app/components/ShareBottomSheet.tsx
  • apps/app/hooks/useShareIntent.ts
  • apps/web/next.config.mjs
  • apps/web/src/apis/getWishlist.ts
  • apps/web/src/app/_components/SplashClient.tsx
  • apps/web/src/app/_components/splash.css
  • apps/web/src/app/archive/_common/_components/ArchivePageLayout.tsx
  • apps/web/src/app/archive/_components/WishTab.tsx
  • apps/web/src/app/archive/_components/tournament-history-content/client.tsx
  • apps/web/src/app/archive/_types/wish.ts
  • apps/web/src/app/archive/page.tsx
  • apps/web/src/app/archive/tournament/_components/ArchiveTournamentClient.tsx
  • apps/web/src/app/archive/tournament/_components/TournamentHistoryContent.tsx
  • apps/web/src/app/archive/tournament/_components/TournamentHistoryList.tsx
  • apps/web/src/app/archive/tournament/_components/TournamentStatusTab.tsx
  • apps/web/src/app/archive/tournament/page.tsx
  • apps/web/src/app/archive/wish/[id]/_hooks/useDeleteWish.ts
  • apps/web/src/app/archive/wish/[id]/_hooks/usePatchWish.ts
  • apps/web/src/app/archive/wish/[id]/layout.tsx
  • apps/web/src/app/archive/wish/_apis/deleteWishes.ts
  • apps/web/src/app/archive/wish/_components/FabMenu.tsx
  • apps/web/src/app/archive/wish/_components/WishAddDialog.tsx
  • apps/web/src/app/archive/wish/_components/WishCardSkeleton.tsx
  • apps/web/src/app/archive/wish/_components/WishContent.tsx
  • apps/web/src/app/archive/wish/_components/WishContentClient.tsx
  • apps/web/src/app/archive/wish/_components/WishFab.tsx
  • apps/web/src/app/archive/wish/_components/WishGridContent.tsx
  • apps/web/src/app/archive/wish/_components/WishlistBottomBar.tsx
  • apps/web/src/app/archive/wish/_components/WishlistFabArea.tsx
  • apps/web/src/app/archive/wish/_components/WishlistList.tsx
  • apps/web/src/app/archive/wish/_components/wish-grid/WishFailedCard.tsx
  • apps/web/src/app/archive/wish/_components/wish-grid/WishProcessingCard.tsx
  • apps/web/src/app/archive/wish/_components/wish-grid/index.tsx
  • apps/web/src/app/archive/wish/_hooks/useDeleteWishes.ts
  • apps/web/src/app/archive/wish/_hooks/useShareIntentWish.ts
  • apps/web/src/app/archive/wish/page.tsx
  • apps/web/src/app/login/_components/LoginButtons.tsx
  • apps/web/src/app/login/layout.tsx
  • apps/web/src/app/login/page.tsx
  • apps/web/src/app/notification/_utils/getNotificationRoute.ts
  • apps/web/src/app/tournament/[id]/create/by-wish/_components/WishSelectCard.tsx
  • apps/web/src/components/bottom-tab-bar/index.tsx
  • apps/web/src/components/common/wish-card/index.tsx
  • apps/web/src/components/get-item-dialog/ByLinkDialog.tsx
  • apps/web/src/components/tournament-error-dialog/index.tsx
  • apps/web/src/consts/route.ts
  • apps/web/src/hooks/useNotificationSSE.ts
  • apps/web/src/hooks/usePostWishLink.ts
  • apps/web/src/hooks/usePostWishOCR.ts
  • apps/web/src/types/wish.ts
  • apps/web/src/utils/auth.ts
  • apps/web/src/utils/getRouteType.ts
  • apps/web/src/utils/pushNotificationRoute.ts
💤 Files with no reviewable changes (6)
  • apps/web/src/app/archive/_components/tournament-history-content/client.tsx
  • apps/web/src/app/archive/_types/wish.ts
  • apps/web/src/app/login/layout.tsx
  • apps/web/src/app/archive/_components/WishTab.tsx
  • apps/web/src/app/archive/page.tsx
  • apps/web/src/app/_components/splash.css

Comment thread apps/web/src/app/archive/wish/_components/WishContentClient.tsx
Comment thread apps/web/src/app/archive/wish/_hooks/useShareIntentWish.ts
Comment thread apps/web/src/app/login/page.tsx
Comment thread apps/web/src/utils/auth.ts
# Conflicts:
#	apps/web/src/app/archive/wish/_hooks/useShareIntentWish.ts
@iOdiO89

iOdiO89 commented Jul 17, 2026

Copy link
Copy Markdown
Contributor Author

추가 작업 내용

  • Local Variable Font → CDN Subset Variable Font로 변경 (필요한 Unicode Range에 대해서만 로드하기 위함)
  • Tanstack Query DevTools dev 환경에서만 dynamic import되도록 변경 (Prod 빌드 번들에 포함되지 않도록)

Before
스크린샷 2026-07-17 오후 5 50 02

After
스크린샷 2026-07-17 오후 5 50 11

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
apps/web/src/app/layout.tsx (1)

5-5: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

타입 전용 React import를 import type으로 변경해 주세요.

React는 타입 참조에만 사용되므로 런타임 기본 import 대신 타입 import를 사용하고 React.ReactNodeReactNode로 바꾸는 편이 규칙에 맞습니다.

수정 예시
-import React from 'react';
+import type { ReactNode } from 'react';

-  children: React.ReactNode;
+  children: ReactNode;

As per coding guidelines, apps/web/**/*.{ts,tsx}에서는 타입 전용 import에 import type을 사용해야 합니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/web/src/app/layout.tsx` at line 5, Update the React import in the layout
module to use a type-only import, and replace the `React.ReactNode` references
with the imported `ReactNode` type. Preserve the component behavior while
removing the runtime React import.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@apps/web/src/app/layout.tsx`:
- Line 5: Update the React import in the layout module to use a type-only
import, and replace the `React.ReactNode` references with the imported
`ReactNode` type. Preserve the component behavior while removing the runtime
React import.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: b85790cd-54c2-4b33-bf17-c11908958197

📥 Commits

Reviewing files that changed from the base of the PR and between aa9c760 and 2bcc85f.

⛔ Files ignored due to path filters (1)
  • apps/web/src/assets/fonts/PretendardVariable.woff2 is excluded by !**/*.woff2
📒 Files selected for processing (2)
  • apps/web/src/app/layout.tsx
  • apps/web/src/styles/globals.css

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/web/src/components/Providers.tsx`:
- Around line 15-22: Update the ReactQueryDevtools dynamic import to disable
server-side rendering by passing the next/dynamic option ssr: false, while
preserving the existing development-only loading behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: be0a2eb9-846e-46b7-bfbd-3d203cc73488

📥 Commits

Reviewing files that changed from the base of the PR and between 2bcc85f and c420727.

📒 Files selected for processing (1)
  • apps/web/src/components/Providers.tsx

Comment thread apps/web/src/components/Providers.tsx
@iOdiO89
iOdiO89 merged commit 2e957a3 into dev Jul 17, 2026
6 checks passed
@iOdiO89
iOdiO89 deleted the refactor/346-login branch July 17, 2026 09:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

refactor Extra attention is needed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

refactor: 로그인 페이지 성능 개선 (게스트 세션 검사로 인한 버튼 지연 노출)

1 participant