본문으로 건너뛰기
버전: 개발 버전 (최신)

일반/시스템 오류 코드

일반/시스템 오류는 특정 도메인에 국한되지 않고 애플리케이션 전반에서 발생할 수 있는 오류 코드입니다. 이 오류 코드들은 libs/core/error-handling/src/lib/enums/error-code.enum.ts 파일에 정의되어 있습니다.

오류 응답 형식

기본 오류 응답

{
"code": 1002,
"message": "NOT_FOUND",
"detail": "요청한 리소스를 찾을 수 없습니다"
}

Validation 오류 응답 (상세 필드 정보 포함)

{
"code": 1001,
"message": "VALIDATION_ERROR",
"detail": "입력 값이 유효하지 않습니다",
"errors": [
{
"field": "email",
"message": "must be an email"
},
{
"field": "content",
"message": "Invalid WCS URI format. Expected: wcs://[language]/[version]/[path]"
}
]
}

메타데이터를 포함한 오류 응답

{
"code": 1006,
"message": "CONFLICT",
"detail": "리소스 상태 충돌이 발생했습니다",
"metadata": {
"requestId": "req-12345",
"conflictingResource": "user_email"
}
}

응답 필드 상세

필드타입설명
codenumber애플리케이션 오류 코드
messagestring개발자용 오류 코드 이름 (대문자 및 언더스코어)
detailstring사용자에게 표시할 수 있는 친화적인 오류 메시지
errorsarray필드별 유효성 검증 오류가 있는 경우 추가 정보 제공 (선택 사항)
metadataobject오류 관련 추가 메타데이터 (선택 사항)

ValidationErrorDetail 타입 정의

Validation 오류 시 errors 배열에 포함되는 각 항목의 구조:

interface ValidationErrorDetail {
field: string; // 오류가 발생한 필드명 (nested.field, items[0].name 등 지원)
message: string; // 해당 필드의 구체적인 오류 메시지
}

지원하는 필드명 형식:

  • 기본 필드: "email", "name", "accessCode"
  • 중첩 필드: "user.profile.email", "address.zipCode"
  • 배열 인덱스: "items[0].name", "users[2].email"
노트

errorsmetadata 필드는 선택 사항이며, 오류 상황에 따라 포함되지 않을 수 있습니다. errors 배열은 주로 VALIDATION_ERROR (1001) 코드와 함께 사용됩니다.

오류 코드 체계

일반/시스템 오류는 주로 1000번대 코드를 사용합니다.

범위용도
1000-1099일반/시스템 오류

주요 오류 코드 상세

HTTP 상태 코드코드메시지설명
5001000UNKNOWN_ERROR알 수 없는 오류가 발생했습니다
4001001VALIDATION_ERROR요청 데이터 유효성 검증에 실패했습니다
4041002NOT_FOUND요청한 리소스를 찾을 수 없습니다
4011003UNAUTHORIZED인증되지 않은 요청입니다
4031004FORBIDDEN요청한 작업에 대한 권한이 없습니다
4001005BAD_REQUEST잘못된 요청입니다
4091006CONFLICT리소스 상태 충돌이 발생했습니다
5001007INTERNAL_SERVER_ERROR서버 내부 오류가 발생했습니다
5031008SERVICE_UNAVAILABLE서비스를 일시적으로 사용할 수 없습니다
5001009DATABASE_ERROR데이터베이스 오류가 발생했습니다
5001010NETWORK_ERROR네트워크 오류가 발생했습니다
4081011TIMEOUT_ERROR요청 처리 시간이 초과되었습니다
4221012UNPROCESSABLE_ENTITY요청은 유효하나 처리할 수 없습니다
4291013TOO_MANY_REQUESTS요청 횟수가 제한을 초과했습니다
4291014RATE_LIMIT_EXCEEDED초당 요청 제한을 초과했습니다
4291015QUOTA_EXCEEDED할당량을 초과했습니다 (일일/월간 API 호출 등)
4291016RETRY_AFTER재시도 대기 시간이 필요합니다
4031017IP_BLOCKED과도한 요청으로 IP가 일시적으로 차단되었습니다

도메인별 오류 코드 체계

전체 API 오류 코드는 도메인별로 고유한 숫자 범위를 사용하여 관리됩니다:

범위도메인문서 링크
1000-1999일반/시스템현재 문서
2000-2999인증(Auth)Auth 도메인 오류 코드
3000-3999액세스 코드(Access Code)Access Code 오류 코드
4000-4999환자 관리(Patient Management)-
5000-5999임상(Clinical)-

일반 오류 처리 가이드

클라이언트 측 처리 권장사항

서버 오류 (500번대)

서버 오류(1000, 1007, 1008, 1009, 1010)는 다음과 같이 처리하는 것이 좋습니다:

  • 지수 백오프 재시도: 즉시 재시도하지 말고, 점진적으로 증가하는 대기 시간 후 재시도
  • 최대 재시도 횟수 설정: 일정 횟수(예: 3-5회) 이상 재시도 실패 시 사용자에게 알림
  • 오프라인 모드 전환: 가능한 경우 일시적으로 오프라인 모드로 전환
  • 로깅: 오류 발생 시 로그를 수집하여 디버깅에 활용

클라이언트 오류 (400번대)

클라이언트 오류(1001, 1002, 1003, 1004, 1005, 1006, 1012)는 다음과 같이 처리하는 것이 좋습니다:

  • 사용자 피드백 제공: 오류 원인을 사용자 친화적인 메시지로 표시
  • 입력 데이터 검증: 사용자 입력 검증 로직 강화
  • 재시도 자제: 동일한 요청 재시도는 같은 결과를 반환할 가능성이 높음
  • 상황별 UI 대응: 오류 유형에 따라 적절한 UI 처리 (예: 404는 '찾을 수 없음' 페이지 표시)

재시도 가능한 오류

다음 오류가 발생한 경우 적절한 지연 후 재시도할 수 있습니다:

  • 1007 (INTERNAL_SERVER_ERROR): 서버 내부 오류
  • 1008 (SERVICE_UNAVAILABLE): 서비스 일시 불가
  • 1010 (NETWORK_ERROR): 네트워크 오류
  • 1011 (TIMEOUT_ERROR): 타임아웃 오류
  • 1013 (TOO_MANY_REQUESTS): 요청 횟수 초과
  • 1014 (RATE_LIMIT_EXCEEDED): 초당 요청 제한 초과
  • 1015 (QUOTA_EXCEEDED): 할당량 초과
  • 1016 (RETRY_AFTER): 재시도 대기 필요
노트

속도 제한(Rate Limiting) 관련 오류(1013-1016)는 재시도 시 반드시 서버가 제공하는 Retry-After 헤더나 응답의 metadata.retryAfterSeconds 값을 준수하여 충분한 대기 시간 후에 재시도해야 합니다. 이를 무시하고 즉시 재시도할 경우 IP 차단(1017)과 같은 더 심각한 제한이 발생할 수 있습니다.

재시도 불가능한 오류

다음 오류는 재시도해도 동일한 결과가 예상되므로, 사용자 개입이 필요합니다:

  • 1001 (VALIDATION_ERROR): 유효성 검증 오류
  • 1002 (NOT_FOUND): 리소스 없음
  • 1003 (UNAUTHORIZED): 인증 필요
  • 1004 (FORBIDDEN): 권한 없음
  • 1005 (BAD_REQUEST): 잘못된 요청
  • 1006 (CONFLICT): 충돌 발생
  • 1012 (UNPROCESSABLE_ENTITY): 처리 불가능한 엔티티
  • 1017 (IP_BLOCKED): IP 차단 (관리자 문의 필요)

변경 이력

버전날짜작성자변경 내용
0.1.02025-05-01bok@weltcorp.com최초 작성
0.47.02025-09-09jeff@weltcorp.comValidationErrorDetail 인터페이스 추가, errors 배열 형식 상세화, 실제 WCS URI validation 케이스 반영