API URL namespace를 v1에서 v2로 이동#52
Conversation
기존 앱(v1) 호환을 위해 develop이 노출하는 API를 /api/v2/*로 옮긴다. v1 폴더는 비어있는 상태가 되며, 이후 Step에서 main의 v1 코드를 이식한다. - pages/api/v1/ → pages/api/v2/ (47개 endpoint git mv로 이동) - middleware.ts matcher 28개 v2로 교체 - src/lib/openapi/register-paths.ts 경로 51개 v2로 교체 (/api/health-check는 버전 prefix 없이 유지) - 클라이언트 fetch 6개소 v2로 갱신 (download/app, c/edit/[uuid], src/repositories/club.ts) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
There was a problem hiding this comment.
외부 시스템이 직접 호출하는 콜백 URL은 앱 버전과 독립적이라서 버전 없이 관리하는것은 어떨까요?
There was a problem hiding this comment.
추가로 server/ENV.ts에서
REDIRECT_URI: ${SERVER_BASE_URL}/v1/auth/kakao/callback,
이 부분도 수정해야 할 것 같습니다
There was a problem hiding this comment.
Kakao Web Login callback은 현재 사용 중인 API가 아니고,
ENV.ts에 있는 REDIRECT_URI 변수도 따라서 사용 중이지 않은 것으로 알고 있습니다
실제 소셜 로그인 시 사용하는 API는 POST /v1/auth/kakao/native/callback (or apple) 로,
외부 시스템이 아니라 App에서 직접적으로 호출 중입니다
물론 로그인 API 같은 경우에는 따로 버저닝이 없어도 될 것 같은데,
하나의 디렉토리 아래에서 통일성 있게 관리하려고 저런 식으로 설정한 것 같아요
|
AI가 설명하는 소셜 로그인 흐름 현재 Kakao social login 흐름은 이렇게 되어 있습니다.
주의할 점은 현재 앱은 Kakao 토큰을 장기 저장하지 않고, 백엔드가 내려준 자체 토큰만 저장합니다. 그리고 로그인 실패는 세부 에러 분기 없이 전부 “로그인에 실패했어요” Toast로 처리됩니다. |
기존 앱(v1) 호환을 위해 main의 v1 endpoint와 의존 서비스를 develop에 옮겨 격리한다.
v2 코드는 건드리지 않고, v1은 통째로 폴더 단위 격리되어 향후 v2 일원화 시 일괄 삭제 가능하다.
- pages/api/v1/ 27개 endpoint를 main에서 복사
- server/service/v1/ 5개 서비스 복사 (Auth/Club/Review/Slack/User)
- Provider DI cache key 충돌을 피하려 클래스명에 V1 접미사 부여
- server/infra/database/entities/v1/club-manager-register-request.entity.ts 추가
- develop이 새 테이블 club_manager_request로 entity를 옮긴 반면,
원래 club_manager_register_request 테이블은 그대로 남아있어 v1 전용 entity로 격리
- middleware.ts matcher에 v1 인증 보호 path 12개 append
- user.service.ts: develop이 nullable로 바꾼 college/major 컬럼에 ?? undefined 처리
develop의 Club 도메인은 main 대비 12개 신규 필드(shortDescription, affiliationType, collegeMajorId, collegeMajor, isOfficialVerified, verifiedAt, dongbangLocation, minActivityPeriod, activeMemberCount, sns, status, rejectReason)를 가진다. 또한 CollegeMajor는 college/major가 nullable로 바뀌었다. v1 endpoint가 develop entity를 그대로 직렬화하면 main 응답과 shape이 어긋나 기존 앱 호환이 깨지므로 v1 service 안에 main과 동일한 shape의 mapper를 둔다. - server/service/v1/club.service.ts: V1Club 타입 + toV1ClubDomain 함수 추가, develop의 toClubDomain 호출을 모두 toV1ClubDomain으로 교체 - server/service/v1/user.service.ts: V1CollegeMajor 타입 추가, getCollegeMajors의 nullable 컬럼을 ?? ''로 좁혀 main 계약 유지 - pages/api/v1/*: ResponseData 타입을 V1Club/V1CollegeMajor로 갱신 검증: dev DB(telepresence) 위에서 /api/v1/clubs/popular, /clubs/latest, /clubs/categories, /users/majors 응답이 main의 필드 집합과 1:1 일치 확인.
기존 앱(v1) 호환을 위해 develop이 노출하는 API를 /api/v2/*로 옮긴다.
v1 폴더는 비어있는 상태가 되며, 이후 Step에서 main의 v1 코드를 이식한다.
login native callback API도 변경 -> 마찬가지로 app에서 관리 필요 (web callback은 안 쓰는 중이라 상관 X)