오류 응답 형식
모든 오류는 동일한 envelope을 따릅니다:
{
"result": "ERROR",
"code": "P-001",
"message": "정책 그룹을 찾을 수 없습니다."
}
code 필드는 안정적인 식별자입니다 — 통합 코드는 code 값을 기준으로 분기하세요. message는 사람이 읽기 위한 텍스트로 Accept-Language 헤더(en 또는 ko)에 따라 지역화되며 시간이 지나면서 표현이 바뀔 수 있지만, code는 바뀌지 않습니다.
코드 번호는 안정적인 식별자입니다 — 한 번 할당된 코드는 의미가 바뀌어도 재사용되지 않습니다. 번호 갭(예: ACT-007, ACT-008, ACT-010, ACT-011, ACT-012의 부재)은 엔진의 도메인 중립 원시(primitive) 리팩토링 영역에서 폐기된 코드를 반영합니다.
공통 (C)
| 코드 | HTTP | 설명 |
|---|
C-001 | 400 | 입력값이 올바르지 않습니다 |
C-002 | 405 | 허용되지 않은 HTTP 메서드 |
C-003 | 404 | 요청한 리소스를 찾을 수 없습니다 |
C-004 | 500 | 서버 내부 오류 |
C-005 | 400 | 데이터 타입이 올바르지 않습니다 |
C-006 | 409 | 이미 존재하는 리소스 |
C-007 | 429 | 요청량 초과 (TPS 한도) |
C-008 | 400 | 올바르지 않은 시간대 |
C-009 | 400 | 허용되지 않은 상태 전환 |
인증 (A)
| 코드 | HTTP | 설명 |
|---|
A-001 | 401 | 인증 실패 |
A-002 | 403 | 접근 권한 없음 |
A-003 | 401 | 유효하지 않은 API 키 |
A-004 | 409 | 이미 가입된 이메일 |
A-005 | 409 | API 키 최대 개수 초과 |
A-006 | 401 | 이메일 또는 비밀번호 오류 |
A-007 | 409 | 이미 사용 중인 전화번호 |
A-008 | 401 | Google 계정으로 로그인 필요 |
A-009 | 401 | Google 계정 이메일 미인증 |
A-010 | 401 | Google 인증 실패 |
A-011 | 400 | Google 계정은 비밀번호 재설정 불가 |
A-012 | 400 | Google 계정은 비밀번호 변경 불가 |
A-013 | 400 | 새 비밀번호는 현재 비밀번호와 달라야 함 |
A-014 | 400 | 비밀번호 재설정 링크 만료 또는 무효 |
A-015 | 503 | 인증 메일 발송 실패 |
A-016 | 401 | 세션 만료 |
A-017 | 401 | 유효하지 않은 세션 |
A-018 | 403 | 시스템 계정 필요 |
A-019 | 403 | System Manager 계정 변경 불가 |
A-020 | 401 | 비밀번호가 올바르지 않습니다 |
정책 엔진 (P)
| 코드 | HTTP | 설명 |
|---|
P-001 | 404 | 정책 그룹을 찾을 수 없습니다 |
P-002 | 404 | 정책 버전을 찾을 수 없습니다 |
P-003 | 400 | 정책 실행 중 오류 발생 |
P-004 | 400 | 승인되지 않은 정책 버전 |
P-005 | 404 | 정책 규칙을 찾을 수 없습니다 |
P-006 | 400 | 현재 상태에서 수정 불가 (DRAFT만 수정 가능) |
P-007 | 400 | 규칙 없이 발행 불가 |
P-008 | 400 | 현재 상태에서 수행할 수 없는 작업 |
P-009 | 403 | 정책 그룹이 비활성화(DISABLED) 상태 |
P-010 | 400 | 규칙 순서 변경 ID 불일치 |
P-011 | 400 | Activation 그룹 내 Mode/Strategy 불일치 |
P-012 | 400 | Mutex 그룹 내 Mode/Strategy 불일치 |
P-013 | 400 | 롤백할 이전 버전이 없음 |
P-014 | 404 | 배포 이력을 찾을 수 없습니다 |
P-015 | 400 | 실행 요청에 필수 팩트 누락 |
P-016 | 400 | 버전이 대상 정책 그룹에 속하지 않음 |
P-017 | 409 | 버전이 배포 중이거나 A/B 테스트 사용 중 |
P-018 | 400 | 유효 기간이 올바르지 않음 (시작일이 종료일보다 이후) |
P-019 | 400 | 그룹에 배포된 버전이 없음 |
P-020 | 409 | 운영 중인 배포가 있어 그룹 삭제 불가 |
P-021 | 409 | A/B 테스트 실행 중이라 그룹 삭제 불가 |
P-022 | 400 | SINGLE 조건의 필드는 필수 |
P-023 | 400 | SINGLE 조건의 연산자는 필수 |
P-024 | 400 | 조건 트리 깊이가 최대값 초과 |
멱등성 (I)
| 코드 | HTTP | 설명 |
|---|
I-001 | 409 | 이미 처리된 요청 (중복 멱등키) |
I-002 | 409 | 현재 처리 중인 요청 |
시스템 / 암호화 (S)
| 코드 | HTTP | 설명 |
|---|
S-001 | 500 | 데이터 암호화 실패 |
S-002 | 500 | 데이터 복호화 실패 |
결제 (B)
| 코드 | HTTP | 설명 |
|---|
B-001 | 404 | 요금제를 찾을 수 없습니다 |
B-002 | 404 | 구독 정보를 찾을 수 없습니다 |
B-003 | 409 | 이미 사용 중인 구독 존재 |
B-004 | 400 | 현재 상태에서 수행할 수 없는 작업 |
B-005 | 404 | 청구서를 찾을 수 없습니다 |
B-006 | 500 | 해당 통화를 지원하는 결제 프로세서 없음 |
B-007 | 502 | 결제 처리 실패 |
B-008 | 403 | 서비스 사용 한도 초과 |
B-009 | 400 | 무료 플랜은 해지 불가 |
B-010 | 400 | 유료 플랜 구독 전 결제 수단 등록 필요 |
B-011 | 400 | 유료 플랜 구독 전 사업자 정보 등록 필요 |
B-012 | 400 | 이미 결제 완료된 청구서 |
B-013 | 400 | 이미 해당 플랜 구독 중 |
B-014 | 400 | 통화 간 플랜 변경 미지원 |
B-015 | 400 | 무료 플랜으로 직접 다운그레이드 불가 — 먼저 해지 |
B-016 | 409 | 사용 중인 플랜 삭제 불가 |
B-017 | 400 | 유료 플랜 구독 중 통화 변경 불가 |
B-018 | 400 | 취소할 예약된 다운그레이드 없음 |
B-019 | 409 | 동일 등급/통화의 공개 플랜이 이미 존재 |
B-020 | 400 | 지원하지 않는 통화 코드 |
멤버 & 계정 (M)
| 코드 | HTTP | 설명 |
|---|
M-001 | 404 | 사용자 정보를 찾을 수 없습니다 |
M-002 | 403 | 이메일 인증 필요 |
M-003 | 403 | 정지된 계정 |
M-004 | 403 | 탈퇴한 계정 |
M-005 | 400 | 유효하지 않거나 만료된 인증 코드 |
M-006 | 400 | 이미 활성화된 계정 |
M-007 | 400 | 만료된 초대 |
M-008 | 400 | 유효하지 않은 초대 토큰 |
M-009 | 400 | 본인에게 수행 불가한 작업 |
M-010 | 400 | 마지막 관리자 삭제/강등 불가 |
M-011 | 409 | 이미 사용 중인 전화번호 |
M-012 | 403 | 정지된 계정 (사유 포함) |
M-013 | 400 | 초대로는 관리자 역할 부여 불가 |
분석 & 시뮬레이션 (AN)
| 코드 | HTTP | 설명 |
|---|
AN-001 | 500 | 시뮬레이션 처리 실패 |
AN-002 | 404 | 데이터셋을 찾을 수 없습니다 |
AN-003 | 400 | 데이터셋이 너무 큽니다 |
AN-004 | 400 | 데이터셋에 레코드 없음 |
AN-005 | 400 | 데이터셋 형식 오류 |
AN-006 | 400 | 지원하지 않는 데이터 소스 |
AN-007 | 500 | 데이터셋 스토리지 오류 |
AN-008 | 400 | 비교 대상 버전(Baseline)이 올바르지 않음 |
AN-009 | 404 | 시뮬레이션을 찾을 수 없습니다 |
AN-010 | 400 | PENDING 또는 RUNNING 시뮬레이션만 취소 가능 |
AN-011 | 400 | 완료된 시뮬레이션만 내보내기 가능 |
AN-012 | 500 | 시뮬레이션 내보내기 실패 |
AN-013 | 404 | 업로드된 데이터셋 파일을 찾을 수 없습니다 |
AN-014 | 400 | 데이터셋 파일 파싱 실패 |
AN-015 | 500 | 시뮬레이션 결과 데이터 형식 오류 |
AN-016 | 400 | 데이터셋 내 필수 팩트 누락 |
AN-017 | 400 | 데이터셋 내 팩트 타입 불일치 |
AN-018 | 400 | HISTORICAL 데이터셋에 기간(from/to) 필수 |
AN-019 | 400 | UPLOADED 데이터셋에 파일 경로 필수 |
AN-020 | 400 | 빈 파일 업로드 불가 |
AN-021 | 400 | 데이터셋 파일 크기 초과 |
AN-022 | 400 | 지원하지 않는 데이터셋 파일 형식 |
액션 & 계산 (ACT)
| 코드 | HTTP | 설명 |
|---|
ACT-001 | 400 | 액션 파라미터가 비어있습니다 |
ACT-002 | 400 | 참조 변수 refVar 필수 |
ACT-003 | 400 | 잘못된 계산 방식 (허용: PERCENTAGE, AMOUNT) |
ACT-004 | 400 | PERCENTAGE 방식에 rate 파라미터 필수 |
ACT-005 | 400 | AMOUNT 방식에 value 파라미터 필수 |
ACT-006 | 400 | 잘못된 액션 타입 |
ACT-009 | 400 | 외부 서비스 액션에 Integration ID 필수 |
ACT-013 | 400 | 웹훅 URL 또는 연동 설정 필수 |
ACT-014 | 400 | SET_FACT 액션에 팩트 키 필수 |
ACT-015 | 400 | ADD_TAG 액션에 태그 필수 |
ACT-016 | 400 | INCREMENT_FACT 액션에 targetVar 필수 |
ACT-017 | 400 | rounding 옵션은 객체여야 함 |
ACT-018 | 400 | rounding scale은 정수여야 함 |
ACT-019 | 400 | rounding scale 범위 초과 [0, 16] |
ACT-020 | 400 | 잘못된 rounding mode |
ACT-021 | 400 | MUTATE_FACT 액션에 operator 필수 |
ACT-022 | 400 | 잘못된 operator |
ACT-023 | 400 | 잘못된 operator-method 조합 (예: DIV + PERCENTAGE) |
ACT-024 | 400 | 0으로 나누기 불가 |
ACT-025 | 400 | refVar가 입력 facts에 없음 |
ACT-026 | 400 | targetVar가 입력 facts에 없음 |
ACT-027 | 400 | EMIT_EVENT는 비어있지 않은 eventPayload 필수 |
ACT-028 | 400 | EMIT_NOTIFICATION은 비어있지 않은 notificationPayload 필수 |
ACT-007, ACT-008, ACT-010, ACT-011, ACT-012 코드는 엔진이 도메인 중립 원시(primitive) 영역으로 전환되면서 폐기되었습니다. 해당 번호는 재사용되지 않습니다.
팩트 정의 (FD)
| 코드 | HTTP | 설명 |
|---|
FD-001 | 409 | 팩트 키가 이미 존재합니다 |
FD-002 | 404 | 팩트를 찾을 수 없습니다 |
FD-003 | 403 | 시스템 팩트는 수정/삭제 불가 |
FD-004 | 400 | 잘못된 팩트 키 형식 |
연동 (INT)
| 코드 | HTTP | 설명 |
|---|
INT-001 | 404 | 연동을 찾을 수 없습니다 |
INT-002 | 409 | 연동 이름 중복 |
INT-003 | 400 | 잘못된 연동 설정 |
INT-004 | 400 | 연동 타입은 변경 불가 |
INT-005 | 400 | 연동 설정에 필수 항목 누락 |
INT-006 | 400 | 연동에 사용할 수 없는 HTTP 메서드 |
INT-007 | 400 | 연동 설정의 필수 항목 누락 |
장애 로그 (FL)
| 코드 | HTTP | 설명 |
|---|
FL-001 | 404 | 장애 로그를 찾을 수 없습니다 |
FL-002 | 400 | 현재 상태의 장애 로그에 수행 불가한 작업 |
FL-003 | 400 | 해당 유형은 재시도를 지원하지 않음 |
웹훅 구독 (WH)
| 코드 | HTTP | 설명 |
|---|
WH-001 | 404 | 웹훅 구독을 찾을 수 없습니다 |
WH-002 | 409 | 웹훅 구독 이름 중복 |
WH-003 | 502 | 웹훅 테스트 발송 실패 |