codingstairs
노트에듀라이프연락
⌕검색⌘K
koen

Navigation

  • Intro
  • Blog
  • Life

연락하기

로그인 없이도 보낼 수 있어요. 답변이 필요하면 이메일을 함께 적어 주세요.

  • 익명 폼으로 의견 남기기 →
  • ✉ warragon112@gmail.com
  • 카카오톡 오픈채팅 ↗

© 2026 codingstairs

  • 노트
  • 에듀
  • 검색
  • 라이프
  • 연락
  • 약관
  • RSS
  • GitHub
노트›security

공개 라우트 화이트리스트 — 신규 도메인 도입 시 같이 갱신

2026-05-26 게시·0회 조회

공개 라우트 화이트리스트

인증 게이트가 있는 앱에서 어떤 경로는 비인증 사용자도 봐야 하는가 를 결정하는 자리가 있습니다. 이 자리에 공개 경로 화이트리스트 가 보통 자리잡습니다. 그리고 신규 도메인 도입 시 이 자리를 같이 갱신 하지 않으면 사용자가 정보성 페이지에 진입할 때 로그인 화면으로 튕깁니다.

1. 사고 시나리오

상황 사용자 경험 진짜 원인
비인증 사용자가 /약국 진입 → /login?returnUrl=/약국 redirect "왜 정보 보는데 로그인하라지?" publicRoute 화이트리스트에 /약국 누락
검색엔진 크롤러가 정보성 페이지를 못 색인 SEO 점수 하락 동일 원인 — 크롤러도 비인증
신규 도메인 PR 머지 후 해당 도메인 진입점 누락 사용자 발견 → 사후 패치 publicRoute 동기화 의무 누락

2. 흔한 매처 형태

비인증 사용자도 볼 수 있어야 하는 경로는 두 종류로 나뉩니다.

  • 정확한 경로: /, /login, /signup, /help
  • prefix 매처: /약국, /약국/서울/12345 (도메인 전체)

prefix 매처는 startsWith 패턴 하나로 도메인 전체 를 한 자리에 등록할 수 있어 가장 견고합니다.

function isPublicRoute(pathname: string): boolean {
  if (pathname === "/" ) return true;
  if (pathname.startsWith("/login")) return true;
  if (pathname.startsWith("/signup")) return true;
  // 정보성 도메인 ↓
  if (pathname.startsWith("/약국")) return true;
  if (pathname.startsWith("/가격비교")) return true;
  if (pathname.startsWith("/요양")) return true;
  // ...
  return false;
}

타입 정의 (string union) 보다 함수 가 좋은 이유 — startsWith 같은 동적 매칭이 가능.

3. 신규 도메인 도입 동기화 7자리

대시보드 위젯 통일성 의 7 자리 동기화 중 #7 자리.

신규 도메인 PR 체크리스트
├─ 라우트 등록 (app/x/page.tsx)
├─ 대시보드 위젯
├─ 사이드바
├─ 푸터 링크
├─ i18n ko/en
├─ 검색 카테고리
└─ 공개 라우트 화이트리스트  ← 이 자리

이 자리 하나가 빠지면 비인증 사용자가 도메인에 도달조차 못함 — 가장 큰 사용자 영향에 비해 가장 쉽게 누락되는 항목.

4. 적용 전 / 적용 후

측면 화이트리스트 누락 화이트리스트 정합
비인증 사용자 진입 login 강제 리다이렉트 정보성 페이지 정상 렌더
검색 크롤러 색인 색인 실패 색인 가능
신규 도메인 도입 후 사용자 발견 "왜 안 보여?" 직접 보고 매끄러운 도입
SEO 점수 하락 영향 없음
회귀 검증 사후 사용자 보고 PR 체크리스트로 사전

5. 자신의 프로젝트에 적용하려면

  • 인증 게이트 (middleware · ClientLayout · server guard) 자리에 isPublicRoute() 함수 단일 SSOT 만들기.
  • 신규 도메인 PR 템플릿에 "publicRoute 등록" 체크박스 추가.
  • prefix 매처 (startsWith) 패턴을 기본으로 — 도메인 하위 모든 경로 자동 포함.
  • 정보성 페이지 / 인증 필요 페이지를 코드 주석 으로 분리해 검토 가능하게.
  • e2e 회귀 — 비인증 fetch 시 정보성 도메인은 200, 인증 도메인은 308 인지 카운트 검증.

비인증 사용자 한 사람이 페이지를 못 보면 — 그 한 사람이 검색 엔진일 수도 있습니다. 화이트리스트는 작은 자리지만 공개의 폭 을 결정하는 자리입니다.

security 카테고리의 다른 글

카테고리 전체 보기 →
  • 익명 폼 — 최소한의 안전망
  • 보안 헤더와 CORS
  • 비밀번호 해싱 — bcrypt · scrypt · Argon2
  • 입력 검증 — 경계에서 다듬는다
  • 레이트 리밋 — 알고리즘과 구현
  • OAuth — state · PKCE · OIDC