Skip to content

[Feat/#141] 홈·로그인 경로 변경(/home, /login)과 로그인 가드 전역 적용 - #142

Merged
jjunh33 merged 7 commits into
mainfrom
feat/#141-home-login-path-global-auth-guard
Nov 2, 2026
Merged

jjunh33 merged 7 commits into
mainfrom
feat/#141-home-login-path-global-auth-guard

Conversation

@jjunh33

@jjunh33 jjunh33 commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator

#️⃣연관된 이슈

🎯 해결하려는 문제가 무엇인가요?

  • 홈 경로가 /, 로그인 경로가 /auth라서 주소만 보고는 어떤 화면인지 알기 어렵습니다.
  • 로그인 가드(AuthEntryGate)가 홈(/)에만 걸려 있어서, 로그인하지 않은 상태로 /events, /my/fee 같은 다른 화면 주소를 직접 열면 가드를 거치지 않고 그대로 열립니다.
  • 로그아웃·회원 탈퇴가 로그인 표시를 지우지 않고 홈으로 이동해서(useAccountExit의 TODO), 가드가 있어도 떠난 계정으로 화면이 계속 열립니다.

❓ 왜 해결해야 하나요?

PR #112로 로그인·온보딩이 들어왔지만 가드가 홈 한 곳뿐이라, 로그인 없이 열리는 화면이 사실상 대부분입니다. 가드를 전역으로 올리지 않으면 로그인 흐름이 의미가 없습니다. 경로 이름은 가드가 보내는 곳(/login)이 바뀌므로 같은 PR에서 함께 정리하는 것이 변경이 적습니다.

⭐ 어떻게 해결했나요?

커밋 순서대로 보시면 됩니다. 동작이 바뀌는 것은 3번과 4번 커밋뿐이고, 1번·2번·6번은 경로 문자열과 상수 위치 정리입니다.

커밋 내용
1. 홈 경로 HOME_PATH(/home) 상수를 도입하고 하드코딩된 "/" 23곳을 교체했습니다. /는 /home으로 replace 이동합니다.
2. 로그인 경로 /auth를 /login으로 바꾸고 AUTH_PATH를 LOGIN_PATH로 대체했습니다.
3. 전역 가드 AuthEntryGate가 레이아웃 라우트(ScreenLayoutRoute)를 감쌉니다.
4. 계정 나가기 useAccountExit이 clearLoggedIn()을 부르고 /login으로 이동합니다.
5. 문서 coding-style.md, terminology.md, wds-component-usage.md
6. 상수 위치 1번에서 공용 src/constants/paths.ts에 두었던 상수를 기존 경로 상수(NOTIFICATIONS_PATH 등)처럼 기능 폴더로 옮겼습니다. HOME_PATH는 features/home/constants/home.ts, LOGIN_PATH는 features/auth/constants/auth.ts입니다.
7. main 병합 main의 공통 오류 화면(#138)·사물함 신청 실패 화면 변경과 충돌해 main 구조를 기준으로 풀고, 새로 생긴 ErrorScreen의 홈 이동을 /home으로 맞췄습니다.

가드 판단

  1. 이동할 라우트의 handle.isPublic이 true면 통과합니다.
  2. 아니면 이 탭에 로그인 표시(sessionStorage)가 있는지 봅니다. 있으면 통과합니다.
  3. 없으면 /login으로 replace 이동합니다(뒤로가기로 돌아오지 않음).

공개 라우트는 /login과 /oauth/kconnect 둘이고, 라우트 handle에 표시합니다.

handle: {
  background: "normal",
  hasBottomNav: false,
  isPublic: true,
} satisfies ScreenRouteHandle & AuthRouteHandle,
  • 표시가 없는 라우트는 모두 보호 화면입니다. 새 화면을 추가해도 아무것도 적지 않으면 가드가 자동으로 걸립니다.
  • 모르는 경로(*)도 로그인 전에는 로그인으로 갑니다.
  • /oauth/kconnect는 K-CONNECT에 등록된 redirect URI라 바꾸지 않았습니다.

🧩 이 PR의 한계 & 트레이드오프

  • 로그인 후 원래 화면으로 돌아가지 않습니다. 로그아웃 상태에서 /events/3을 열면 로그인으로 가고, 로그인을 마치면 항상 홈으로 갑니다. 원래 화면 복귀는 K-CONNECT로 페이지 전체가 이동해서 sessionStorage에 보관해야 하므로 이번에는 하지 않았습니다.
  • 앱 WebView에서의 로그인은 정하지 않았습니다. @billilge/oauth-kconnect는 앱에서 웹 로그인을 WebView 안에서 하지 말라고 안내(RFC 8252)하는데, 지금 가드는 앱 WebView에서도 /login으로 보내고 버튼은 WebView 안에서 K-CONNECT로 이동합니다. 앱이 가드를 건너뛸지, 브리지로 네이티브 로그인을 띄울지는 앱 쪽 인증 전달 방식이 정해져야 해서 별도 이슈로 다룹니다.
  • 가드는 접근 통제가 아닙니다. 로그인 표시는 sessionStorage 값이라 클라이언트가 바꿀 수 있습니다. 실제 인증은 서버 API가 검증해야 하고, 서버 연동은 아직 목입니다.
  • 경로 상수가 기능 폴더에 있어서 기능 간 import가 생깁니다. 여러 기능이 같은 경로를 이동 대상으로 쓰다 보니, 완료 화면들이 features/home의 HOME_PATH를, 설정(useAccountExit)이 features/auth의 LOGIN_PATH를 import합니다. 공용 components/ui(ScreenLayout의 하단 탭 매핑, ErrorScreen의 홈 이동)는 기능 폴더를 import하지 않으므로 "/home" 문자열을 그대로 씁니다(다른 탭 경로도 같은 방식). 홈 경로를 또 바꾸면 이 두 곳은 직접 고쳐야 합니다.
  • 이름은 그대로 둔 것이 있습니다. features/auth/, Auth* 파일, 퍼널 id(?auth.step=)는 용어 사전의 도메인 용어(auth)라 바꾸지 않았습니다. AuthEntryGate는 이제 전역 가드라 Entry가 조금 어긋나지만 이번 범위에서는 두었습니다.

⛓️ 기존 기능에 미치는 영향

  • 주소가 바뀝니다. 홈은 /home, 로그인은 /login입니다. /는 /home으로 가고, /auth는 아직 사용자에게 나간 적이 없어서 호환 리다이렉트를 두지 않았습니다. 즉 /auth로 들어가면 이제 준비 중 화면(*)이 보이는데, 로그아웃 상태에서는 가드가 /login으로 보냅니다.
  • 개발·QA 방식이 바뀝니다. 새 탭에서 어느 화면 주소를 열어도 로그인부터 시작합니다. 빠르게 보려면 /login?mockKConnect=existing으로 로그인하거나, 콘솔에서 sessionStorage.setItem('stream:auth:logged-in','1')를 실행합니다.
  • 로그아웃·회원 탈퇴 동작이 바뀝니다. 이제 로그인 표시를 지우고 홈이 아니라 /login으로 갑니다(ACCOUNT_EXIT_PATH가 LOGIN_PATH로 변경).
  • **하단 탭, 뒤로가기 폴백, 완료 화면의 "홈으로 가기"**는 모두 HOME_PATH를 쓰도록 바꿨고 동작은 같습니다.
  • K-CONNECT redirect URI(/oauth/kconnect)와 서버 엔드포인트는 변경이 없습니다.

🔀 Edge Case & 실패 시나리오

  • 로그아웃 상태에서 보호 화면, 없는 경로, /를 열면 모두 /login으로 갑니다.
  • 로그인 상태에서 /login을 열면 퍼널이 /home으로 보냅니다(가입 완료 단계는 예외라 그대로 보입니다).
  • K-CONNECT 콜백(/oauth/kconnect)은 공개 라우트라 로그인 전에도 가드에 막히지 않고, 취소·오류는 /login에서 실패 토스트로 보입니다.
  • 로그아웃 뒤 뒤로가기로 보호 화면에 가도 가드가 다시 /login으로 보냅니다.
  • sessionStorage 접근이 막힌 환경에서는 로그인 표시를 읽지 못해 항상 로그아웃 상태로 보고 /login으로 보냅니다.

📋 검토한 대안과 선택 이유

  • 공개 라우트를 handle의 isPublic으로 표시(채택): 기본이 "보호"라서 새 화면이 추가돼도 자동으로 보호되고, router.tsx 변경이 작습니다. 기존 handle 컨벤션과 같은 모양입니다.
  • 가드 라우트 아래로 보호 라우트 약 50개를 한 단계 더 중첩: 구조로 보이는 장점이 있지만 router.tsx 들여쓰기 diff가 매우 크고, 새 화면을 잘못된 쪽 children에 넣으면 보호가 조용히 빠집니다.
  • 로그인 경로 /login(채택): /welcome(로그인·온보딩을 모두 담지만 일반적이지 않음), /signin(국내에서 덜 흔함), /auth/login(경로가 길고 하위 경로가 더 필요하지 않음)과 비교했습니다.
  • /를 남기고 /home 리다이렉트(채택): 앱 WebView 진입 주소나 북마크가 /일 수 있어서 호환을 위해 남겼습니다.
  • 경로 상수를 공용 src/constants/paths.ts에 두는 안: 처음에는 이 위치로 만들었지만, 다른 경로 상수가 모두 기능 폴더 constants/에 있어서 규칙이 두 갈래가 되므로 기능 폴더로 옮겼습니다. 대신 위 기능 간 import가 생깁니다.
  • PR을 둘로 나누는 안: 경로 변경과 가드가 같은 LOGIN_PATH를 쓰는 순차 구조고 Squash Merge에서는 리베이스 비용이 커서 하나로 올립니다. 커밋을 나눠 두었습니다.

💬 리뷰 포인트

  • [r] 앱 WebView 처리: 위 한계에 적은 대로 앱에서도 가드가 /login으로 보냅니다. 앱 쪽에 네이티브 로그인이 이미 있는지, 이 PR 머지는 dev 배포 한정으로 두고 앱에서 /를 연결하지 않는 것으로 괜찮은지 의견 부탁드립니다.
  • [r] 용어 사전 예외: 홈(/home)과 로그인(/login)은 백엔드 엔드포인트와 짝이 있는 도메인이 아니라서 /{코드 용어} 규칙의 예외로 terminology.md에 적었습니다. 이 해석이 맞는지 확인해 주세요.
  • [c] 새 패턴: 공개 라우트를 handle.isPublic으로 표시하는 방식(AuthRouteHandle)이 컨벤션에 없던 것입니다. 괜찮은지 봐주세요.
  • [c] 경로 상수의 기능 간 import: HOME_PATH를 여러 기능이 features/home에서, LOGIN_PATH를 설정이 features/auth에서 import합니다. 기존 경로 상수와 같은 위치 규칙을 따른 대신 생기는 의존이라, 이 정도는 괜찮은지 봐주세요.
  • [c] 로그아웃 상태에서 원래 가려던 화면으로 돌아가는 동작을 후속으로 둔 것이 괜찮은지 봐주세요.
  • [a] AuthEntryGate를 AuthGuard로 바꿀지(파일 1개와 import 1줄 수준)는 별도로 정해도 됩니다.
  • 검증은 헤드리스 Chrome으로 로그아웃·로그인 상태의 진입 주소, 하단 탭 이동, 설정의 로그아웃을 확인했습니다. 하단 탭 홈 활성 표시와 앱 WebView 실기기는 확인하지 못했습니다.

@coderabbitai

coderabbitai Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Important

  • Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: c7d9f69d-7c2e-4b64-903a-7febb4912733
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@coderabbitai

coderabbitai Bot commented Oct 30, 2026

Copy link
Copy Markdown

Add Carrot credits or activate Agent usage billing to use Autofix

@jjunh33
jjunh33 merged commit ba83cf9 into main Nov 2, 2026
1 check passed
@jjunh33
jjunh33 deleted the feat/#141-home-login-path-global-auth-guard branch November 2, 2026 05:16
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.

홈·로그인 경로 변경(/home, /login)과 로그인 가드 전역 적용

2 participants