콘텐츠로 이동

← 목차

13. 에러 처리

실패는 ZLinkFrameworkException(@zlink-systems/framework)으로 보고된다. kind (ZLinkFrameworkErrorKind)와 isRetriable을 노출한다.

error kind 매핑

상황 kind
구성/요청 검증 실패(base_url, path, single body source, proxy scheme, 0 timeout 등) requestProtocolError
status ≥ 400 (submit<T>) requestFailed
redirect 한도 초과 requestFailed
응답 JSON 디코드 실패 payloadDecodeFailed
압축 본문 손상 payloadDecodeFailed
압축 decoded 크기 초과 / 본문 크기 초과 requestFailed
transport 실패(연결 오류 등) requestFailed (isRetriable = true)

timeout

Node framework의 ZLinkFrameworkErrorKind에는 timeout 전용 kind가 없다. 따라서 Node에서는 timeout을 ZLinkFrameworkException(requestFailed, isRetriable: true)로 보고한다. retry가 설정돼 있으면 재시도된다.

retriable

isRetriabletrue인 실패(transport 오류, timeout)는 retry(attempts)가 설정돼 있을 때 재시도된다. status 코드 실패(4xx/5xx)는 retriable이 아니다. streaming 요청은 retry에서 제외된다(10장).

예외 경로 정리

try {
  const res = await client.post('/games').body(req).submit<CreateGameRes>();
} catch (error) {
  if (error instanceof ZLinkFrameworkException) {
    switch (error.kind) {
      case ZLinkFrameworkErrorKind.RequestFailed: /* 4xx/5xx 또는 transport/timeout */ break;
      case ZLinkFrameworkErrorKind.PayloadDecodeFailed: /* 응답 본문 디코드 실패 */ break;
      default: break;
    }
  }
}

← 목차