본문으로 건너뛰기
버전: 0.64.0

Sleep 관련 오류 코드

Sleep 도메인 또는 관련 API(예: /sleep/logs/day-index, /sleep/goals/target-wake-time)에서 발생할 수 있는 오류 코드입니다.

오류 응답 형식​

{
"code": 10001,
"message": "MISSING_REQUIRED_FIELDS",
"detail": "필수 입력 항목이 누락되었습니다",
"metadata": {
"fields": ["sleepQuality", "lot", "aet"],
"context": "dns=false"
}
}
필드타입설명
codenumber애플리케이션 오류 코드
messagestring개발자용 오류 코드 이름 (대문자 및 언더스코어)
detailstring사용자에게 표시할 수 있는 친화적인 오류 메시지
errorsarray필드별 유효성 검증 오류가 있는 경우 추가 정보 제공 (선택 사항)
metadataobject오류 관련 추가 메타데이터 (선택 사항)
노트

errors와 metadata 필드는 선택 사항이며, 오류 상황에 따라 포함되지 않을 수 있습니다.

오류 코드 체계​

Sleep 관련 오류는 주로 10000번대 코드를 사용합니다.

범위용도
10000-10019서버 및 일반 Sleep 오류
10020-10029사용자 입력 및 형식 관련 오류
10030-10039권한 및 보안 관련 오류
10040-10049리소스 조회 실패 오류
10050-10059통계 및 분석 관련 오류
10060-10079예약됨
10080-10089예약됨
10090-10099리소스 충돌 및 중복 관련 오류

서버 및 일반 Sleep 오류 (10000-10019)​

HTTP 상태 코드코드메시지설명
50010000SERVER_ERROR서버 내부 오류가 발생했습니다
40010001MISSING_REQUIRED_FIELDS필수 입력 항목이 누락되었습니다
40010002INVALID_PARAMETERS잘못된 파라미터입니다
40010003INVALID_FORMAT입력 형식이 유효하지 않습니다
40010004INVALID_TIMEZONE유효하지 않은 시간대 ID입니다
40010005INVALID_SLEEP_QUALITY수면의 질 값이 유효하지 않습니다 (1~5 범위)
40010006INVALID_TIME_RANGE유효하지 않은 시간 범위입니다
40010007INVALID_FACTOR_ID유효하지 않은 영향 요인 ID입니다
40010008TOO_MANY_CUSTOM_FACTORS사용자 정의 요인이 너무 많습니다 (최대 10개)
40010009SLEEP_TIME_VALIDATION_FAILED수면 시간 검증에 실패했습니다
40010010DATE_VALIDATION_FAILED날짜 검증에 실패했습니다 (당일 일차만 생성/수정 가능)
40310011TREATMENT_SUSPENDED치료 활동 일시 정지 상태에서는 수면 기록을 생성할 수 없습니다
40010012INVALID_DAY_INDEX유효하지 않은 일차 값입니다
40010013INVALID_RTIB유효하지 않은 rTIB 값입니다
40010014INVALID_TST계산된 총 수면 시간(TST)과 제공된 값이 일치하지 않습니다
40010015UNEXPECTED_SLEEP_DATADNS=true인 경우 수면 관련 데이터를 입력할 수 없습니다
40010016TARGET_WAKE_TIME_CHANGE_NOT_ALLOWED목표 기상 시각 변경이 허용되지 않습니다 (rTIB 처방일에만 가능)
40010017INVALID_CUSTOM_FACTORS"없음" 선택 시 해당 카테고리의 사용자 지정 요인을 입력할 수 없습니다

사용자 입력 및 형식 관련 오류 (10020-10029)​

HTTP 상태 코드코드메시지설명
40010020CUSTOM_FACTOR_TOO_LONG사용자 정의 요인이 너무 깁니다 (최대 100자)

권한 및 보안 관련 오류 (10030-10039)​

HTTP 상태 코드코드메시지설명
40310030INSUFFICIENT_PERMISSIONS권한이 충분하지 않습니다

리소스 조회 실패 오류 (10040-10049)​

HTTP 상태 코드코드메시지설명
40410040SLEEP_LOG_NOT_FOUND수면 기록을 찾을 수 없습니다
40410041SLEEP_GOAL_NOT_FOUND수면 목표를 찾을 수 없습니다
40410042RTIB_RECOMMENDATION_NOT_FOUNDrTIB 처방을 찾을 수 없습니다
40410043SLEEP_GOAL_ADHERENCE_NOT_FOUND수면 목표 달성 기록을 찾을 수 없습니다
40410044USER_NOT_FOUND사용자를 찾을 수 없습니다
40410045TEMPORARY_SLEEP_LOG_NOT_FOUND임시 수면 기록을 찾을 수 없습니다

통계 및 분석 관련 오류 (10050-10059)​

HTTP 상태 코드코드메시지설명
50010050STATISTICS_CALCULATION_FAILED통계 계산에 실패했습니다
40010051INSUFFICIENT_DATA_FOR_STATISTICS통계를 계산하기 위한 데이터가 충분하지 않습니다

리소스 충돌 및 중복 관련 오류 (10090-10099)​

HTTP 상태 코드코드메시지설명
40910090SLEEP_LOG_ALREADY_EXISTS해당 날짜에 이미 수면 기록이 존재합니다
40910091SLEEP_GOAL_ALREADY_EXISTS해당 날짜에 이미 수면 목표가 존재합니다
42910092RATE_LIMIT_EXCEEDED요청 횟수가 제한을 초과했습니다
50010099UNKNOWN_SLEEP_ERROR알 수 없는 수면 도메인 오류가 발생했습니다

오류 처리 가이드​

수면 기록 생성/수정 오류 처리​

  • 필수 필드 누락(10001): DNS 상태에 따른 필수 필드 목록을 사용자에게 안내합니다.

    {
    "code": 10001,
    "message": "MISSING_REQUIRED_FIELDS",
    "detail": "잠을 잤을 경우 필수 입력 항목이 누락되었습니다.",
    "metadata": {
    "fields": ["sleepQuality", "lot", "aet"],
    "context": "dns=false"
    }
    }
  • 시간 검증 실패(10009): 구체적인 시간 제약사항을 사용자에게 안내합니다.

    {
    "code": 10009,
    "message": "SLEEP_TIME_VALIDATION_FAILED",
    "detail": "LOT는 18:00 이후여야 하고, 시간 값은 5분 단위여야 하며, AET는 LOT보다 이후여야 합니다.",
    "metadata": {
    "lot": "2024-05-10T16:30:00.000Z",
    "aet": "2024-05-11T06:00:00.000Z"
    }
    }
  • TST 불일치(10014): 계산된 값과 제공된 값의 차이를 명시합니다.

    {
    "code": 10014,
    "message": "INVALID_TST",
    "detail": "계산된 총 수면 시간(TST)과 제공된 값이 일치하지 않습니다.",
    "metadata": {
    "calculated": 450,
    "provided": 480
    }
    }

DNS(Did Not Sleep) 관련 오류 처리​

UNEXPECTED_SLEEP_DATA (10015) 오류 발생 시:

{
"code": 10015,
"message": "UNEXPECTED_SLEEP_DATA",
"detail": "DNS=true인 경우 수면 관련 데이터(lot, aet, solMinutes, wasoMinutes, tstMinutes)를 입력할 수 없습니다.",
"metadata": {
"unexpectedFields": ["lot", "aet", "sleepQuality"]
}
}

클라이언트는 DNS=true 상태에서는 수면 관련 필드를 입력받지 않도록 UI를 조정해야 합니다.

치료 활동 제약 관련 오류 처리​

  • 치료 일시 정지(10011): 사용자에게 치료가 일시 정지된 상태임을 알리고, 정지 해제 방법을 안내합니다.
  • 날짜 제약 위반(10010): 당일 일차에만 수면 기록 생성/수정이 가능함을 안내합니다.

리소스 충돌 오류 처리​

SLEEP_LOG_ALREADY_EXISTS (10090) 오류 발생 시:

{
"code": 10090,
"message": "SLEEP_LOG_ALREADY_EXISTS",
"detail": "해당 날짜에 이미 수면 기록이 존재합니다.",
"metadata": {
"dayIndex": 7,
"existingId": "sl_12345"
}
}

클라이언트는 기존 기록을 수정하거나 덮어쓸지 사용자에게 선택하도록 안내할 수 있습니다.

속도 제한 처리​

RATE_LIMIT_EXCEEDED (10092) 오류 발생 시:

{
"code": 10092,
"message": "RATE_LIMIT_EXCEEDED",
"detail": "요청 횟수가 제한을 초과했습니다",
"metadata": {
"remainingLockoutSeconds": 300,
"maxAttemptsAllowed": 10
}
}

클라이언트는 metadata.remainingLockoutSeconds 값을 확인하여 사용자에게 남은 대기 시간을 표시하고, 적절한 재시도 로직을 구현해야 합니다.

사용자 입력 형식 검증​

수면의 질 범위 오류(10005):

  • 1~5 범위 외의 값 입력 시 발생
  • UI에서 유효한 범위를 명확히 표시해야 함

영향 요인 관련 오류:

  • INVALID_FACTOR_ID (10007): 존재하지 않는 영향 요인 ID 참조
  • TOO_MANY_CUSTOM_FACTORS (10008): 사용자 정의 요인 10개 초과
  • CUSTOM_FACTOR_TOO_LONG (10020): 사용자 정의 요인 100자 초과

rTIB 관련 오류 처리​

  • TARGET_WAKE_TIME_CHANGE_NOT_ALLOWED (10016): rTIB 처방일이 아닌 날에 목표 기상 시각 변경 시도
  • RTIB_RECOMMENDATION_NOT_FOUND (10042): 해당 일차의 rTIB 처방이 없는 경우

통계 및 분석 오류 처리​

INSUFFICIENT_DATA_FOR_STATISTICS (10051) 오류 발생 시:

  • 사용자에게 충분한 수면 기록이 축적될 때까지 기다리도록 안내
  • 필요한 최소 데이터 개수(예: 4개 이상의 유효한 기록)를 명시

특별 고려사항​

시간 관련 검증​

Sleep 도메인에서는 다음과 같은 시간 관련 제약사항이 있습니다:

  1. 5분 단위 입력: 모든 시간 입력은 5분 단위로만 허용
  2. LOT 시간 제약: 18:00 이후여야 함
  3. AET > LOT: 일어난 시각은 잠자리에 든 시각보다 이후여야 함
  4. 당일 일차 제약: 현재 진행 중인 일차에만 생성/수정 가능

데이터 일관성​

  • TST(총 수면 시간) 계산값과 사용자 입력값의 일치성 검증
  • DNS 상태에 따른 필수/금지 필드 검증
  • 치료 주기와 일차 정보의 일관성 유지

변경 이력​

버전날짜작성자변경 내용
0.1.02025-05-23dalia@weltcorp.com최초 작성