목표
사용자 식별·인증. 배포하지 않는 동안 최후순위다.
상태 — 보류 (2026-07-30 결정)
배포를 하지 않으므로 인증이 필요 없다. 이 에픽은 열려 있지만 다른 도메인 작업을 막지 않는다.
원래 "게스트 기반 + 후순위 소셜 로그인" 이었는데 설계가 바뀌었다 — 게스트를 폐기하고 OAuth 전용으로 간다(구글·카카오·애플). 게스트는 사실상 자격증명 없는 사용자 레코드인데, 현재 X-Guest-Id 헤더는 발급도 검증도 없어 아무 문자열이나 남의 코스를 볼 수 있다. 근거는 docs/adr/0002-oauth-user-authentication.md.
구현은 PR #93 (draft) 에 있고, 플러터 앱이 provider 클라이언트 ID 를 확보해야 재개한다.
지금 상태로 무엇이 되나
인증 없이도 전체 플로우가 돈다 — X-Guest-Id 헤더로 코스를 저장·조회한다. 로컬 개발·데모 목적에는 충분하고, 배포하는 순간 구멍이 된다.
범위
완료 기준
하위 태스크
📖 설계 참고
docs/adr/0002-oauth-user-authentication.md — 인증 설계 결정(이 에픽의 정본)
CLAUDE.md — 아키텍처·엔드포인트 네이밍·코딩 컨벤션
docs/specs/feature-spec.md · docs/specs/api-spec.md
목표
사용자 식별·인증. 배포하지 않는 동안 최후순위다.
상태 — 보류 (2026-07-30 결정)
배포를 하지 않으므로 인증이 필요 없다. 이 에픽은 열려 있지만 다른 도메인 작업을 막지 않는다.
원래 "게스트 기반 + 후순위 소셜 로그인" 이었는데 설계가 바뀌었다 — 게스트를 폐기하고 OAuth 전용으로 간다(구글·카카오·애플). 게스트는 사실상 자격증명 없는 사용자 레코드인데, 현재
X-Guest-Id헤더는 발급도 검증도 없어 아무 문자열이나 남의 코스를 볼 수 있다. 근거는docs/adr/0002-oauth-user-authentication.md.구현은 PR #93 (draft) 에 있고, 플러터 앱이 provider 클라이언트 ID 를 확보해야 재개한다.
지금 상태로 무엇이 되나
인증 없이도 전체 플로우가 돈다 —
X-Guest-Id헤더로 코스를 저장·조회한다. 로컬 개발·데모 목적에는 충분하고, 배포하는 순간 구멍이 된다.범위
courses.guest_id→user_id소유 전환 — ADR 0002 §작업 순서 7, 별도 PR완료 기준
하위 태스크
📖 설계 참고
docs/adr/0002-oauth-user-authentication.md— 인증 설계 결정(이 에픽의 정본)CLAUDE.md— 아키텍처·엔드포인트 네이밍·코딩 컨벤션docs/specs/feature-spec.md·docs/specs/api-spec.md