📝 기능 설명
이미 구현된 Clerk 기반 구글 로그인 흐름을 바탕으로, 백엔드 보호 API를 호출할 때 사용할 공통 요청 구조를 정리합니다.
현재 프론트엔드에는 Clerk OAuth 로그인과 로그인 후 /api/v1/auth/me를 호출하는 회원 동기화 흐름이 구현되어 있습니다.
다만 /auth/me는 새로 구현해야 할 로그인 API가 아니라, 백엔드에서 Clerk JWT를 검증하고 해당 Clerk 사용자를 내부 member와 매핑했는지 확인하는 기존 동기화/확인용 API입니다.
백엔드에서는 인증이 필요한 API 요청이 들어오면 Spring Security의 Clerk JWT 인증 흐름을 통해 clerk_id 기준 member를 조회하거나 생성합니다.
따라서 이후 analyses, saved-links 등 보호 API를 연동할 때 핵심은 /auth/me를 새로 연동하는 것이 아니라, Clerk getToken()으로 받은 토큰을 모든 보호 API 요청에 일관되게 포함하는 구조를 만드는 것입니다.
이번 작업에서는 기존 로그인/회원 동기화 흐름은 유지하되, API base URL, Clerk 토큰 주입, { data: ... } 응답 래퍼 처리, 에러 처리 방식을 공통화하여 이후 분석 요청과 저장 링크 API 연동의 기반을 마련합니다.
📋 구현할 Task
📎 추가 내용
-
이미 구현된 흐름
- Clerk 기반 Google OAuth 로그인
- 로그인 후
/api/v1/auth/me 호출
- 탭 진입 시 세션 기준 회원 동기화 확인
-
/api/v1/auth/me의 현재 역할
- 새로 구현해야 할 로그인 API가 아님
- Clerk JWT가 백엔드에서 유효하게 검증되는지 확인
- 백엔드 내부
member 확인/동기화 흐름을 확인
- 필요한 경우
publicId를 확인하는 용도
-
관련 파일
services/auth-api.ts
api/terms.ts
app/(auth)/login.tsx
app/(tabs)/_layout.tsx
-
백엔드 인증 방식
- Clerk JWT
- Header:
Authorization: Bearer {token}
- 인증이 필요한 API 요청 시 백엔드에서 Clerk JWT를 검증하고 내부 member를 조회/생성
-
백엔드 응답 형태
- 성공 응답:
{ data: ... }
- 프론트에서는
body.data 기준으로 파싱 필요
-
작업 목적
- 이미 구현된 Clerk 인증 흐름을 유지하면서 보호 API 통신 구조를 공통화
/auth/me를 새 로그인 API처럼 다루지 않고, 기존 member 확인/동기화 흐름으로 유지할지 검토
- 이후 분석 요청, 저장 링크, 북마크/삭제 API 연동의 기반 마련
📝 기능 설명
이미 구현된 Clerk 기반 구글 로그인 흐름을 바탕으로, 백엔드 보호 API를 호출할 때 사용할 공통 요청 구조를 정리합니다.
현재 프론트엔드에는 Clerk OAuth 로그인과 로그인 후
/api/v1/auth/me를 호출하는 회원 동기화 흐름이 구현되어 있습니다.다만
/auth/me는 새로 구현해야 할 로그인 API가 아니라, 백엔드에서 Clerk JWT를 검증하고 해당 Clerk 사용자를 내부member와 매핑했는지 확인하는 기존 동기화/확인용 API입니다.백엔드에서는 인증이 필요한 API 요청이 들어오면 Spring Security의 Clerk JWT 인증 흐름을 통해
clerk_id기준 member를 조회하거나 생성합니다.따라서 이후
analyses,saved-links등 보호 API를 연동할 때 핵심은/auth/me를 새로 연동하는 것이 아니라, ClerkgetToken()으로 받은 토큰을 모든 보호 API 요청에 일관되게 포함하는 구조를 만드는 것입니다.이번 작업에서는 기존 로그인/회원 동기화 흐름은 유지하되, API base URL, Clerk 토큰 주입,
{ data: ... }응답 래퍼 처리, 에러 처리 방식을 공통화하여 이후 분석 요청과 저장 링크 API 연동의 기반을 마련합니다.📋 구현할 Task
/api/v1/auth/me호출 위치와 역할을 확인했는가?/auth/me를 새로 연동하는 작업이 아니라, 기존 member 확인/동기화 흐름으로 유지할지 검토했는가?/auth/me사전 호출에 의존하지 않아도 보호 API 요청에 Clerk 토큰이 일관되게 포함되는 구조인지 확인했는가?services/auth-api.ts의 역할과 유지해야 할 동작을 확인했는가?api/terms.ts의 base URL, 응답 파싱, 에러 처리 방식을 확인했는가?getToken()으로 받은 토큰을 보호 API 요청 헤더에 재사용 가능하게 주입했는가?{ data: ... }응답 래퍼를 공통으로 처리할 수 있는 타입 또는 유틸을 정리했는가?📎 추가 내용
이미 구현된 흐름
/api/v1/auth/me호출/api/v1/auth/me의 현재 역할member확인/동기화 흐름을 확인publicId를 확인하는 용도관련 파일
services/auth-api.tsapi/terms.tsapp/(auth)/login.tsxapp/(tabs)/_layout.tsx백엔드 인증 방식
Authorization: Bearer {token}백엔드 응답 형태
{ data: ... }body.data기준으로 파싱 필요작업 목적
/auth/me를 새 로그인 API처럼 다루지 않고, 기존 member 확인/동기화 흐름으로 유지할지 검토