Agreement 철회 플로우 요약
클라이언트 개발자가 바로 구현할 수 있도록 agreement 철회 플로우의 핵심만 정리한다. 기준 문서는 plan-agreement-withdrawal-api.md이며, 아래 내용은 현재 변경된 서버 코드 기준으로 정리했다.
한눈에 보기
| 상황 | 기준 값 | 클라이언트 액션 | 서버 API |
|---|---|---|---|
| 필수 약관 체크 해제 후 저장 | isRequired = true | agreement 철회 API 호출 금지, 회원 탈퇴 안내 화면으로 이동 | 기존 회원 탈퇴 플로우 사용 |
| 선택 약관 체크 해제 후 저장 | isRequired = false and agreed = true | 철회 안내 후 철회 API 호출 | DELETE /users/agreements/:agreementId/consent |
| 미동의 선택 약관 체크 후 저장 | isRequired = false and agreed = false | 기존 동의 API 호출 | POST /agreements/versions/:versionId/agree |
| 필수 약관 체크 후 저장 | isRequired = true | 기존 동의 API 호출 | POST /agreements/versions/:versionId/agree |
핵심 판단 기준
- 분기 기준은 각 agreement item의
isRequired,agreed - 철회 API는
agreementId기준 - 동의 API는
versionId기준 - 필수 약관은 서버에서 철회하지 않음
- 선택 약관 철회 API는 현재 활성 동의가 없어도
200 OK로 멱등 성공
화면 플로우
API 사용 방식
1. 약관 목록 조회
GET /users/agreements
클라이언트가 바로 써야 하는 필드:
| 필드 | 의미 | 용도 |
|---|---|---|
agreementId | 약관 자체 ID | 철회 API path param |
versionId | 현재 활성 버전 ID | 동의 API path param |
isRequired | 필수 여부 | 탈퇴 플로우 분기 |
agreed | 현재 사용자 동의 상태 | 체크 초기값, 저장 분기 |
isAgreeable | 동의 가능한 항목인지 | UI 제어 |
예시:
{
"items": [
{
"agreementId": "agreement-required-uuid",
"versionId": "version-required-uuid",
"isRequired": true,
"agreed": true,
"isAgreeable": true
},
{
"agreementId": "agreement-optional-uuid",
"versionId": "version-optional-uuid",
"isRequired": false,
"agreed": false,
"isAgreeable": true
}
]
}
2. 선택 약관 철회
DELETE /users/agreements/:agreementId/consent
응답 예시:
{
"success": true,
"agreementId": "agreement-uuid",
"agreed": false,
"revokedAt": "2026-03-11T10:15:30.000Z"
}
규칙:
- 선택 약관만 가능
- 필수 약관이면
400 - 대상 약관이 없으면
404 - 이미 철회 상태여도
200성공 가능
3. 동의 및 재동의
POST /agreements/versions/:versionId/agree
응답 예시:
{
"success": true,
"agreementId": "agreement-uuid",
"versionId": "version-uuid",
"agreed": true,
"agreedAt": "2026-03-11T10:15:30.000Z"
}
규칙:
- 신규 동의와 재동의 모두 동일 API 사용
- 선택 약관을 철회한 뒤 다시 체크하면 이 API를 호출
선택 약관 철회 시퀀스
필수 약관 체크 해제 시퀀스
클라이언트 구현 규칙
- 저장 시 변경된 각 항목에 대해
isRequired,agreed, 현재 체크값을 비교해서 분기한다. - 필수 약관 해제는 agreement 철회 API로 보내면 안 된다.
- 선택 약관 해제는
agreementId로 철회한다. - 선택 약관 동의 또는 재동의는
versionId로 저장한다. - 저장 후에는 목록을 재조회하거나 응답값으로 로컬 상태를 즉시 갱신한다.
권장 분기 로직
서버 반영 사항 요약
- 목록 조회 응답에
agreementId,agreed추가 - 선택 약관 철회 API 추가
- 동의 API 응답에
agreementId,versionId,agreed,agreedAt포함 - 서버는 동일 agreement의 최신 기록 기준으로 현재 동의 상태를 계산
- 철회 후 재동의는 기존 레코드 복구가 아니라 새 동의 레코드 생성 방식