BLUEPRINT
제9장 오류 처리
9.1 오류 처리 모델
DTP의 오류 처리는 "감지-통지-복구" 3단계 모델을 따른다:
- 감지: 이상 상황 식별
- 통지: 상대측 또는 상위 계층에 오류 정보 전송
- 복구: 오류 유형에 따라 복구 조치 수행
9.2 오류 코드 체계
DTP는 각 오류 유형에 대해 고유한 오류 코드를 정의하며, 기능 모듈별로 8개 범위로 구분한다:
| 오류 범주 | 오류 코드 범위 | 처리 전략 |
|---|---|---|
| 프레임 처리 오류 | 1xxx | 프레임 폐기 + 송신측 통지 + 로그 기록 |
| 암호화 오류 | 2xxx | 프레임 폐기 + 송신측 통지 + 키 재협상 트리거 가능 |
| 약정 오류 | 3xxx | Fragment 폐기 + 송신측 통지 + 재협상 트리거 가능 |
| DAG 오류 | 4xxx | Fragment 거부 + 송신측 통지 또는 캐시 대기 |
| 세션 오류 | 5xxx | 세션 복구 시도 + 실패 시 종료 및 상위 계층 통지 |
| 재전송 오류 | 6xxx | 전송 일시 중지 + 상위 애플리케이션 통지 |
| 버전 오류 | 7xxx | 버전 비호환 통지 전송 + 다운그레이드 처리 시도 |
| 권한 오류 | 8xxx | 작업 거부 + 요청측 통지 |
9.3 오류 코드 상세표
프레임 처리 오류 (1xxx)
| 오류 코드 | 명칭 | 설명 |
|---|---|---|
| 1001 | FRAME_DESERIALIZATION_FAILED | 프레임 역직렬화 실패 |
| 1002 | FRAME_INVALID_FORMAT | 프레임 형식 무효 |
암호화 오류 (2xxx)
| 오류 코드 | 명칭 | 설명 |
|---|---|---|
| 2001 | DECRYPTION_FAILED | 페이로드 복호화 실패 |
| 2002 | KEY_NOT_READY | 키 미준비(CAP 미완료) |
약정 오류 (3xxx)
| 오류 코드 | 명칭 | 설명 |
|---|---|---|
| 3001 | AGREEMENT_NOT_FOUND | 약정 없음 |
| 3002 | AGREEMENT_EXPIRED | 약정 만료 |
| 3003 | AGREEMENT_NEGOTIATION_FAILED | 약정 협상 실패 |
DAG 오류 (4xxx)
| 오류 코드 | 명칭 | 설명 |
|---|---|---|
| 4001 | DAG_CYCLE_DETECTED | DAG 순환 감지 |
| 4002 | DAG_DEPENDENCY_UNRESOLVED | DAG 의존 미해석 |
세션 오류 (5xxx)
| 오류 코드 | 명칭 | 설명 |
|---|---|---|
| 5001 | SESSION_NOT_FOUND | 세션 없음 |
| 5002 | SESSION_TIMEOUT | 세션 타임아웃 |
| 5003 | SESSION_RESTORE_FAILED | 세션 복구 실패 |
재전송 오류 (6xxx)
| 오류 코드 | 명칭 | 설명 |
|---|---|---|
| 6001 | BUFFER_FULL | 캐시 포화 |
| 6002 | RETRANSMISSION_TIMEOUT | 재전송 타임아웃 |
버전 오류 (7xxx)
| 오류 코드 | 명칭 | 설명 |
|---|---|---|
| 7001 | VERSION_INCOMPATIBLE | 버전 비호환 |
권한 오류 (8xxx)
| 오류 코드 | 명칭 | 설명 |
|---|---|---|
| 8001 | PERMISSION_DENIED | 권한 거부 |
| 8002 | OBSERVER_WRITE_DENIED | 관찰자 쓰기 작업 거부 |
9.4 오류 통지 메커니즘
오류 통지는 제어 프레임(Control Frame)을 통해 전달되며, 다음 정보를 포함한다:
| 필드 | 설명 |
|---|---|
| errorCode | 오류 코드 |
| errorMessage | 오류 설명 정보 |
| relatedFrameId | 오류를 트리거한 프레임 ID(선택) |
| relatedAgreementId | 관련 약정 ID(선택) |
| details | 추가 상세 정보(선택) |
9.5 주요 오류 시나리오
역직렬화 실패
수신된 Logical_Frame을 올바르게 역직렬화할 수 없는 경우:
- 해당 프레임을 폐기
- 송신측에 FRAME_DESERIALIZATION_FAILED (1001) 오류 통지 전송
복호화 실패
수신된 Logical_Frame의 페이로드를 올바르게 복호화할 수 없는 경우:
- 해당 프레임을 폐기
- 송신측에 DECRYPTION_FAILED (2001) 오류 통지 전송
- 연속 실패가 임계값을 초과하면, CAP 키 재교환 트리거
DAG 순환 감지
Fragment가 선언한 의존 관계가 DAG에서 순환을 형성하는 경우:
- 해당 Fragment를 거부
- DAG_CYCLE_DETECTED (4001) 오류 반환
알 수 없는 약정
Fragment가 수신측에 존재하지 않는 Agreement_ID를 참조하는 경우:
- 해당 Fragment를 폐기
- AGREEMENT_NOT_FOUND (3001) 오류 반환
키 미준비
데이터 전송을 시도하지만 CAP 키 교환이 아직 완료되지 않은 경우:
- 전송 거부
- 상위 호출자에게 KEY_NOT_READY (2002) 오류 반환
캐시 포화
송신측의 미확인 Fragment 캐시가 용량 상한에 도달한 경우:
- 새 Fragment 전송을 일시 중지
- 상위 애플리케이션에 BUFFER_FULL (6001) 통지 전송
관찰자 권한 초과
Observer가 요청을 발행하거나 약정을 수정하려고 시도하는 경우:
- 작업 거부
- OBSERVER_WRITE_DENIED (8002) 오류 반환
