Skip to content

[ Auth ] 사용자 API 계약 정리 (가입 전용 DTO, /users 구 경로 제거) #91

Open

Description

@RosieOh

💚 어떤 기능인가요?

#80 에서 의도적으로 미룬 API 계약 정리 두 건이다. 동작에는 문제가 없고 계약이 지저분한 상태다.

1. 가입 요청 전용 DTO 분리

POST /auth/register 가 응답 DTO 인 UserDto 를 그대로 요청 본문으로 받는다.
role / provider / providerId / isActive / emailVerified / id / deletedAt 등
클라이언트가 정해서는 안 되는 필드가 전부 노출된다.

값이 무시된다는 사실은 UserService.createUser 가 보장하지만(#82),
Swagger 문서에는 여전히 설정 가능한 것처럼 보인다. 읽는 사람이 오해하기 쉽고,
"무시되니까 괜찮다"는 전제가 언젠가 깨진다.

  • SignUpRequest 를 만들어 등록 가능한 필드만 노출
  • 프런트 계약 영향 확인 후 적용

2. /users 구 경로 제거

#83 에서 호환을 위해 남겨둔 경로들이다. 본인 확인은 들어가 있으나 형태가 오해를 부른다
(경로에 남의 ID 를 넣을 수 있는 것처럼 보인다).

구 경로 대체
PUT /users/{userId}/location PUT /users/me/location
PUT /users/{userId}/profile-image PUT /users/me/profile-image
PUT /users/{userId}/deactivate PUT /users/me/deactivate
DELETE /users/{userId} DELETE /users/me

프런트에서 실제로 쓰는 것은 /users/{userId}/location 하나다.

  • 프런트를 /users/me/* 로 전환
  • 전환 확인 후 구 경로 제거
  • 접근제어 계약 테스트에서 해당 경로가 404 인지 확인

✅ To Dos

  • 가입 요청 전용 DTO 분리
  • 프런트 /users/me/* 전환
  • /users/{userId}/* 구 경로 제거

Activity

  1. added this to the API Stabilization milestone on Aug 22, 2026
  2. added theissue type on Aug 22, 2026
  3. RosieOh commented on Sep 22, 2026

    @RosieOh
    ContributorAuthor

    진행 상황

    구 경로 제거를 지금 할 수 없는 이유

    프런트가 실제로 쓰는 구 경로는 하나다.

    // CareCode_FE/src/apis/user.ts
    await CareCode.put(`/users/${userId}/location`, null, { params: { latitude, longitude } })

    이걸 /users/me/location 으로 바꾸려면 백엔드에 그 경로가 운영에 있어야 한다.
    그런데 운영 백엔드는 배포가 막혀(#94) #80 이전 코드 그대로라 /users/me/* 가 없다.
    프런트 저장소에는 배포 워크플로가 없어 배포 방식을 저장소에서 확인할 수 없으므로,
    독립적으로 나간다고 가정해야 한다. 지금 프런트를 바꾸면 운영에서 위치 갱신이 깨진다.

    순서

    1. [ Infra ] 운영 배포 파이프라인이 시크릿 미설정으로 계속 실패한다 #94 해결 → 백엔드 배포 (/users/me/location 이 운영에 생김)
    2. 프런트를 /users/me/location 으로 전환, 배포
    3. 백엔드에서 /users/{userId}/... 구 경로 제거
      • EndpointAuthorizationCoverageTest 가 매핑 전수를 보므로 제거 후에도 공개 경로가 새로 생기지 않는지 자동으로 확인된다
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions