YuON Auth(JWT) 작업 정리 — 누가·어떤 PR·어디까지
작성: jini · 2026-06-21 · 목적: "auth는 수봉님이 한 거 맞나, 어떤 PR을 보면 되나"에 대한 단일 답. 상위 진행 맥락은 YuON 진행 상황 다운로드(6/20) 참조. 출처: YUON-86 본문·코멘트(수봉님, 6/11~6/13) 직접 확인. 활성화 갭의 전수조사 근거는 인증 티켓 전수조사 + auth 활성화 갭 참조.
TL;DR
- auth는 수봉님이 했다. BE auth JWT(
YUON-86,migrated from DAV-90)를 수봉님이 구현·머지. PR #13(yuon-backend, merge commit10dd59d), 6/13 머지. 독립 리뷰 APPROVE(CRITICAL/HIGH 0), CI green. - 단, "auth 완료"는 인프라 완료 + 적용 대기 상태다.
/auth/anonymous·/auth/refresh·get_current_user는 다 들어갔지만,get_current_user가 아직 어느 라우터에도 안 붙어 있다. 36개 user-scope 라우트는 여전히X-User-Id폴백으로 돈다. 실제 활성화는 후속 티켓.
티켓 — auth 삼각 (전부 수봉님)
YUON-86[M1][BE] auth JWT 도입 —/auth/anonymous+ refresh + X-User-Id 폴백 플래그. 본편. ←DAV-90YUON-91[M1][BE] quest/profiling 라우터 X-User-Id 검증 통일(보안 구멍) — auth 선행 정리. ←DAV-85YUON-77[M1][APP] auth 토큰 활성화 — 앱 측 짝 티켓. BE 머지로 unblock, 전환기 배포 순서 자유. ←DAV-99
주의: 세 티켓 모두 6/14 보드 이관 때 Done으로 일괄 임포트됐다. completedAt·createdBy(Jinwoo Jung)는 마이그레이션 메타라 신뢰 불가 — 실제 작성자는 코멘트 서명(최수봉)과 PR이 근거.
어디를 보면 되나 — PR #13
- 레포:
yuon-backend· merge commit10dd59d· 머지 6/13 - 계약 원천: 위키
contract.md §0 인증 합의안(2026-06-12 확정) - git 브랜치(참고):
yhs7604kor/yuon-86-m1be-auth-jwt-도입-...
구현된 것 (계약 정합)
POST /auth/anonymous {device_id}→ 201{user_id, access_token, refresh_token, expires_in, token_type}. 같은 device_id 재호출 = 멱등 재발급(같은 유저 복귀). Stage 1은 로그인 UI가 없어 익명 디바이스 가입이 유일 발급 경로.POST /auth/refresh {refresh_token}→ 200 동일 shape. 클라TokenDto와 1:1.get_current_user: JWT sub 우선(위조/만료여도 폴백 안 하고 401), 없으면 폴백 on→X-User-Id/ off→401.- 의미론:
expires_in == access TTL· 기본 900초(15분, 클라가 만료 5분 전 사전 refresh) · refresh 만료 401 → 클라 anonymous 재가입으로 복구.
구현 결정 (합의안 범위 내 세부)
- refresh는 stateless — 서버측 회전/blacklist 없음(멱등 재가입이 복구 보장). revoke는 후속.
- device_id는 별도
user_devices테이블(1:N, Stage 2 멀티디바이스 대비).users테이블 무변경 → demo seed 무파손.
env (배포 시 주입)
JWT_SECRET— 미설정 시 fail-closed 503AUTH_NOT_CONFIGUREDJWT_ACCESS_TTL_SECONDS/JWT_REFRESH_TTL_SECONDS·AUTH_HEADER_FALLBACK(기본 true)
아직 안 된 것 — 활성화 (오너십 회수 포인트)
get_current_user가 어느 라우터에도 미부착. 기존 36개 user-scope 라우트는 X-User-Id 그대로. 채택은 후속 티켓(데모 직전 blast radius 최소화, backend 패널 판단).- path
user_id↔ JWTsub일치 검증도 그 후속 티켓에서 결합 예정. - 폴백 off 전환은 S2(소셜/trust) 직전 + 앱
YUON-77배포 확인 후 조율자 경유.
리뷰 MEDIUM 2건은 차단 사유 아님으로 보류: created_at naive default(전 도메인 공통 패턴) · 레이스 재조회(정확성 확인됨, 방어 주석 추가).
그래서 결정 한 칸
auth 코드는 끝났으니 항승님 몫은 새로 짜기가 아니라 읽고 활성화 오너십을 회수하는 것. 다음 질문 하나 — get_current_user 라우터 부착(+ path/sub 검증)을 후속 티켓으로 끊어 항승님이 잡을지, 아니면 S2 직전까지 수봉님 레인에 둘지?