Repository navigation
[Feat/#141] 홈·로그인 경로 변경(/home, /login)과 로그인 가드 전역 적용 - #142
Merged
Merged
Conversation
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars.
|
github-actions
Bot
requested review from
leegain1,
sangrae2325,
tnals0924 and
xeoxxn
October 30, 2026 14:22
|
Add Carrot credits or activate Agent usage billing to use Autofix |
leegain1
approved these changes
Oct 31, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
#️⃣연관된 이슈
🎯 해결하려는 문제가 무엇인가요?
/, 로그인 경로가/auth라서 주소만 보고는 어떤 화면인지 알기 어렵습니다.AuthEntryGate)가 홈(/)에만 걸려 있어서, 로그인하지 않은 상태로/events,/my/fee같은 다른 화면 주소를 직접 열면 가드를 거치지 않고 그대로 열립니다.useAccountExit의 TODO), 가드가 있어도 떠난 계정으로 화면이 계속 열립니다.❓ 왜 해결해야 하나요?
PR #112로 로그인·온보딩이 들어왔지만 가드가 홈 한 곳뿐이라, 로그인 없이 열리는 화면이 사실상 대부분입니다. 가드를 전역으로 올리지 않으면 로그인 흐름이 의미가 없습니다. 경로 이름은 가드가 보내는 곳(
/login)이 바뀌므로 같은 PR에서 함께 정리하는 것이 변경이 적습니다.⭐ 어떻게 해결했나요?
커밋 순서대로 보시면 됩니다. 동작이 바뀌는 것은 3번과 4번 커밋뿐이고, 1번·2번·6번은 경로 문자열과 상수 위치 정리입니다.
HOME_PATH(/home) 상수를 도입하고 하드코딩된"/"23곳을 교체했습니다./는/home으로 replace 이동합니다./auth를/login으로 바꾸고AUTH_PATH를LOGIN_PATH로 대체했습니다.AuthEntryGate가 레이아웃 라우트(ScreenLayoutRoute)를 감쌉니다.useAccountExit이clearLoggedIn()을 부르고/login으로 이동합니다.coding-style.md,terminology.md,wds-component-usage.mdsrc/constants/paths.ts에 두었던 상수를 기존 경로 상수(NOTIFICATIONS_PATH등)처럼 기능 폴더로 옮겼습니다.HOME_PATH는features/home/constants/home.ts,LOGIN_PATH는features/auth/constants/auth.ts입니다.ErrorScreen의 홈 이동을/home으로 맞췄습니다.가드 판단
handle.isPublic이 true면 통과합니다./login으로 replace 이동합니다(뒤로가기로 돌아오지 않음).공개 라우트는
/login과/oauth/kconnect둘이고, 라우트handle에 표시합니다.*)도 로그인 전에는 로그인으로 갑니다./oauth/kconnect는 K-CONNECT에 등록된 redirect URI라 바꾸지 않았습니다.🧩 이 PR의 한계 & 트레이드오프
/events/3을 열면 로그인으로 가고, 로그인을 마치면 항상 홈으로 갑니다. 원래 화면 복귀는 K-CONNECT로 페이지 전체가 이동해서 sessionStorage에 보관해야 하므로 이번에는 하지 않았습니다.@billilge/oauth-kconnect는 앱에서 웹 로그인을 WebView 안에서 하지 말라고 안내(RFC 8252)하는데, 지금 가드는 앱 WebView에서도/login으로 보내고 버튼은 WebView 안에서 K-CONNECT로 이동합니다. 앱이 가드를 건너뛸지, 브리지로 네이티브 로그인을 띄울지는 앱 쪽 인증 전달 방식이 정해져야 해서 별도 이슈로 다룹니다.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으로 보냅니다./login?mockKConnect=existing으로 로그인하거나, 콘솔에서sessionStorage.setItem('stream:auth:logged-in','1')를 실행합니다./login으로 갑니다(ACCOUNT_EXIT_PATH가LOGIN_PATH로 변경).HOME_PATH를 쓰도록 바꿨고 동작은 같습니다./oauth/kconnect)와 서버 엔드포인트는 변경이 없습니다.🔀 Edge Case & 실패 시나리오
/를 열면 모두/login으로 갑니다./login을 열면 퍼널이/home으로 보냅니다(가입 완료 단계는 예외라 그대로 보입니다)./oauth/kconnect)은 공개 라우트라 로그인 전에도 가드에 막히지 않고, 취소·오류는/login에서 실패 토스트로 보입니다./login으로 보냅니다./login으로 보냅니다.📋 검토한 대안과 선택 이유
handle의isPublic으로 표시(채택): 기본이 "보호"라서 새 화면이 추가돼도 자동으로 보호되고,router.tsx변경이 작습니다. 기존handle컨벤션과 같은 모양입니다.router.tsx들여쓰기 diff가 매우 크고, 새 화면을 잘못된 쪽children에 넣으면 보호가 조용히 빠집니다./login(채택):/welcome(로그인·온보딩을 모두 담지만 일반적이지 않음),/signin(국내에서 덜 흔함),/auth/login(경로가 길고 하위 경로가 더 필요하지 않음)과 비교했습니다./를 남기고/home리다이렉트(채택): 앱 WebView 진입 주소나 북마크가/일 수 있어서 호환을 위해 남겼습니다.src/constants/paths.ts에 두는 안: 처음에는 이 위치로 만들었지만, 다른 경로 상수가 모두 기능 폴더constants/에 있어서 규칙이 두 갈래가 되므로 기능 폴더로 옮겼습니다. 대신 위 기능 간 import가 생깁니다.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줄 수준)는 별도로 정해도 됩니다.