제9장 오류 처리

9.1 오류 처리 모델

DTP의 오류 처리는 "감지-통지-복구" 3단계 모델을 따른다:

  1. 감지: 이상 상황 식별
  2. 통지: 상대측 또는 상위 계층에 오류 정보 전송
  3. 복구: 오류 유형에 따라 복구 조치 수행

9.2 오류 코드 체계

DTP는 각 오류 유형에 대해 고유한 오류 코드를 정의하며, 기능 모듈별로 8개 범위로 구분한다:

오류 범주오류 코드 범위처리 전략
프레임 처리 오류1xxx프레임 폐기 + 송신측 통지 + 로그 기록
암호화 오류2xxx프레임 폐기 + 송신측 통지 + 키 재협상 트리거 가능
약정 오류3xxxFragment 폐기 + 송신측 통지 + 재협상 트리거 가능
DAG 오류4xxxFragment 거부 + 송신측 통지 또는 캐시 대기
세션 오류5xxx세션 복구 시도 + 실패 시 종료 및 상위 계층 통지
재전송 오류6xxx전송 일시 중지 + 상위 애플리케이션 통지
버전 오류7xxx버전 비호환 통지 전송 + 다운그레이드 처리 시도
권한 오류8xxx작업 거부 + 요청측 통지

9.3 오류 코드 상세표

프레임 처리 오류 (1xxx)

오류 코드명칭설명
1001FRAME_DESERIALIZATION_FAILED프레임 역직렬화 실패
1002FRAME_INVALID_FORMAT프레임 형식 무효

암호화 오류 (2xxx)

오류 코드명칭설명
2001DECRYPTION_FAILED페이로드 복호화 실패
2002KEY_NOT_READY키 미준비(CAP 미완료)

약정 오류 (3xxx)

오류 코드명칭설명
3001AGREEMENT_NOT_FOUND약정 없음
3002AGREEMENT_EXPIRED약정 만료
3003AGREEMENT_NEGOTIATION_FAILED약정 협상 실패

DAG 오류 (4xxx)

오류 코드명칭설명
4001DAG_CYCLE_DETECTEDDAG 순환 감지
4002DAG_DEPENDENCY_UNRESOLVEDDAG 의존 미해석

세션 오류 (5xxx)

오류 코드명칭설명
5001SESSION_NOT_FOUND세션 없음
5002SESSION_TIMEOUT세션 타임아웃
5003SESSION_RESTORE_FAILED세션 복구 실패

재전송 오류 (6xxx)

오류 코드명칭설명
6001BUFFER_FULL캐시 포화
6002RETRANSMISSION_TIMEOUT재전송 타임아웃

버전 오류 (7xxx)

오류 코드명칭설명
7001VERSION_INCOMPATIBLE버전 비호환

권한 오류 (8xxx)

오류 코드명칭설명
8001PERMISSION_DENIED권한 거부
8002OBSERVER_WRITE_DENIED관찰자 쓰기 작업 거부

9.4 오류 통지 메커니즘

오류 통지는 제어 프레임(Control Frame)을 통해 전달되며, 다음 정보를 포함한다:

필드설명
errorCode오류 코드
errorMessage오류 설명 정보
relatedFrameId오류를 트리거한 프레임 ID(선택)
relatedAgreementId관련 약정 ID(선택)
details추가 상세 정보(선택)

9.5 주요 오류 시나리오

역직렬화 실패

수신된 Logical_Frame을 올바르게 역직렬화할 수 없는 경우:

  1. 해당 프레임을 폐기
  2. 송신측에 FRAME_DESERIALIZATION_FAILED (1001) 오류 통지 전송

복호화 실패

수신된 Logical_Frame의 페이로드를 올바르게 복호화할 수 없는 경우:

  1. 해당 프레임을 폐기
  2. 송신측에 DECRYPTION_FAILED (2001) 오류 통지 전송
  3. 연속 실패가 임계값을 초과하면, CAP 키 재교환 트리거

DAG 순환 감지

Fragment가 선언한 의존 관계가 DAG에서 순환을 형성하는 경우:

  1. 해당 Fragment를 거부
  2. DAG_CYCLE_DETECTED (4001) 오류 반환

알 수 없는 약정

Fragment가 수신측에 존재하지 않는 Agreement_ID를 참조하는 경우:

  1. 해당 Fragment를 폐기
  2. AGREEMENT_NOT_FOUND (3001) 오류 반환

키 미준비

데이터 전송을 시도하지만 CAP 키 교환이 아직 완료되지 않은 경우:

  1. 전송 거부
  2. 상위 호출자에게 KEY_NOT_READY (2002) 오류 반환

캐시 포화

송신측의 미확인 Fragment 캐시가 용량 상한에 도달한 경우:

  1. 새 Fragment 전송을 일시 중지
  2. 상위 애플리케이션에 BUFFER_FULL (6001) 통지 전송

관찰자 권한 초과

Observer가 요청을 발행하거나 약정을 수정하려고 시도하는 경우:

  1. 작업 거부
  2. OBSERVER_WRITE_DENIED (8002) 오류 반환