You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[ Auth ] 사용자 API 계약 정리 (가입 전용 DTO, /users 구 경로 제거) #91
#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 를 넣을 수 있는 것처럼 보인다).
이걸 /users/me/location 으로 바꾸려면 백엔드에 그 경로가 운영에 있어야 한다.
그런데 운영 백엔드는 배포가 막혀(#94) #80 이전 코드 그대로라 /users/me/* 가 없다.
프런트 저장소에는 배포 워크플로가 없어 배포 방식을 저장소에서 확인할 수 없으므로,
독립적으로 나간다고 가정해야 한다. 지금 프런트를 바꾸면 운영에서 위치 갱신이 깨진다.
PUT /users/me/profile-image
PUT /users/me/location
PUT /users/me/deactivate
DELETE /users/me
SignUpRequest 는 가입자가 정할 수 있는 값만 노출한다. role / provider / isActive / emailVerified 는 받을 필드 자체가 없어 요청에 넣어도 버려진다 — "서비스가 무시하니까 괜찮다" 가
아니라 계약에서 사라졌다. 검증 어노테이션도 함께 들어가, 예전에 500 이 나던 입력(빈 이름,
잘못된 성별 값)이 400 으로 끝난다.
구 경로가 404 인지는 접근제어 계약 테스트가 지킨다. GET 이 아니라 실제 메서드(PUT/DELETE)로
두드린다 — GET 으로 두드리면 매핑이 남아 있어도 405 가 나와 구분이 약해진다.
Activity
RosieOh commentedon Sep 22, 2026
진행 상황
UserDto에는 검증 어노테이션이 없어@Valid가 무효였다)./users구 경로 제거 — 보류. 순서가 강제된다.구 경로 제거를 지금 할 수 없는 이유
프런트가 실제로 쓰는 구 경로는 하나다.
이걸
/users/me/location으로 바꾸려면 백엔드에 그 경로가 운영에 있어야 한다.그런데 운영 백엔드는 배포가 막혀(#94) #80 이전 코드 그대로라
/users/me/*가 없다.프런트 저장소에는 배포 워크플로가 없어 배포 방식을 저장소에서 확인할 수 없으므로,
독립적으로 나간다고 가정해야 한다. 지금 프런트를 바꾸면 운영에서 위치 갱신이 깨진다.
순서
/users/me/location이 운영에 생김)/users/me/location으로 전환, 배포/users/{userId}/...구 경로 제거EndpointAuthorizationCoverageTest가 매핑 전수를 보므로 제거 후에도 공개 경로가 새로 생기지 않는지 자동으로 확인된다RosieOh commentedon Oct 24, 2026
세 항목 모두 끝났다 — 닫는다
POST /auth/register는UserDto가 아니라SignUpRequest를 받는다/users/me/*전환/users/{userId}/*구 경로 제거확인한 현재 상태 —
UserController에 남은 매핑은/me/*뿐이다:SignUpRequest는 가입자가 정할 수 있는 값만 노출한다.role/provider/isActive/emailVerified는 받을 필드 자체가 없어 요청에 넣어도 버려진다 — "서비스가 무시하니까 괜찮다" 가아니라 계약에서 사라졌다. 검증 어노테이션도 함께 들어가, 예전에 500 이 나던 입력(빈 이름,
잘못된 성별 값)이 400 으로 끝난다.
구 경로가 404 인지는 접근제어 계약 테스트가 지킨다. GET 이 아니라 실제 메서드(PUT/DELETE)로
두드린다 — GET 으로 두드리면 매핑이 남아 있어도 405 가 나와 구분이 약해진다.