계정 비활성화 API
계정 비활성화 API는 현재 로그인한 사용자의 계정을 비활성화(Soft Delete)합니다. 일반 사용자와 게스트 사용자 모두 이 API를 통해 자발적으로 탈퇴할 수 있습니다.
공통 요청 헤더
모든 dha-sleep API 요청은 공통 요청 헤더를 준수해야 합니다. User-Agent, Accept-Language, 인증 헤더 요구사항을 먼저 확인하세요.
계정 비활성화
현재 로그인한 사용자의 계정을 비활성화합니다. 게스트 계정의 경우 만료 타이머도 함께 해제됩니다.
- HTTP Method:
DELETE - Path:
/v1/auth/me(API_PREFIX기본값이v1이며 환경에 따라 변경 가능) - 인증:
accessToken필요 (Authorization: Bearer {accessToken})
Headers
| Header | Type | Description | Required |
|---|---|---|---|
Authorization | string | 액세스 토큰 (Bearer {accessToken}) | Yes |
Content-Type | application/json | 요청 본문 형식을 지정합니다. | No |
Request Body
요청 본문은 선택 사항입니다. 탈퇴 사유를 기록하고 싶은 경우에만 전송합니다.
{
"reason": "더 이상 서비스를 이용하지 않습니다."
}
| 필드 | 타입 | 설명 | 필수 |
|---|---|---|---|
reason | string | 탈퇴 사유 (선택) | No |
Responses
| HTTP Status Code | 설명 | Error Code(s) |
|---|---|---|
200 OK | 계정 비활성화 성공 | - |
400 Bad Request | 이미 비활성화된 계정 | 2009 |
401 Unauthorized | 인증 실패 (유효하지 않은 토큰) | 2051 |
404 Not Found | 사용자를 찾을 수 없음 | 7002 |
500 Internal Server Error | 서버 내부 오류 | 2000 |
200 OK - 계정 비활성화 성공
{
"message": "계정이 성공적으로 비활성화되었습니다.",
"userId": "123e4567-e89b-12d3-a456-426614174000",
"status": "INACTIVE",
"deletedAt": 1702819200000
}
| 필드 | 타입 | 설명 | 필수 |
|---|---|---|---|
message | string | 처리 결과 메시지 | Yes |
userId | string | 비활성화된 사용자 ID | Yes |
status | string | 계정 상태 (INACTIVE) | Yes |
deletedAt | number | 비활성화 시각 (Unix timestamp in milliseconds, Kotlin: Long, Swift: Int64) | Yes |
400 Bad Request - 이미 비활성화된 계정
{
"code": 2009,
"message": "ACCOUNT_INACTIVE",
"detail": "이미 비활성화된 사용자입니다."
}
이 오류는 이미 비활성화된 계정에 대해 다시 비활성화를 시도할 때 발생합니다.
401 Unauthorized - 인증 실패
{
"code": 2051,
"message": "INVALID_TOKEN",
"detail": "유효한 사용자 인증 정보가 없습니다."
}
이 오류는 액세스 토큰이 유효하지 않거나 만료된 경우 발생합니다.
404 Not Found - 사용자를 찾을 수 없음
{
"code": 7002,
"message": "USER_NOT_FOUND",
"detail": "사용자를 찾을 수 없습니다."
}
이 오류는 토큰에 해당하는 사용자를 데이터베이스에서 찾을 수 없을 때 발생합니다.
500 Internal Server Error - 서버 내부 오류
{
"code": 2000,
"message": "SERVER_ERROR",
"detail": "서버 내부 오류"
}
설명
비활성화 동작
계정 비활성화는 다음과 같이 처리됩니다:
- 일반 사용자: 사용자 상태가
INACTIVE로 변경됩니다 (Soft Delete). - 게스트 사용자 (v1.2.0): User 레코드가 있는 경우 일반 사용자와 동일하게 처리됩니다.
- 레거시 게스트 (v1.1.x):
GuestAccountLifecycle에VOLUNTARILY_WITHDRAWN이벤트가 기록됩니다.
주의사항
- 비활성화된 계정의 데이터는 즉시 삭제되지 않습니다 (Soft Delete).
- 비활성화 후에는 해당 토큰으로 더 이상 인증할 수 없습니다.
- 게스트 계정의 경우 동일 디바이스로 새로운 게스트 등록이 필요합니다.
- 정식 회원의 경우 동일 이메일로 재가입이 가능합니다 (정책에 따라 다를 수 있음).
클라이언트 구현 가이드
// 탈퇴 후 처리 예시
async function handleWithdraw() {
try {
await withdrawUser({ reason: '서비스 이용 종료' });
// 로컬 스토리지 토큰 삭제
localStorage.removeItem('auth.accessToken');
localStorage.removeItem('auth.refreshToken');
// 온보딩 화면으로 이동
router.push('/onboarding');
} catch (error) {
// 에러 처리
}
}
오류 코드 참조
| 코드 | 메시지 | 설명 |
|---|---|---|
2000 | SERVER_ERROR | 서버 내부 오류 |
2009 | ACCOUNT_INACTIVE | 이미 비활성화된 계정 |
2051 | INVALID_TOKEN | 액세스 토큰이 유효하지 않음 |
7002 | USER_NOT_FOUND | 사용자를 찾을 수 없음 |