6. 예외처리
6.1. 소개
이 문서는 백엔드 서비스의 예외처리 설명과 간단한 예제를 포함하고 있습니다.
6.2. 예외 종류
티쿤에서는 예외를 2가지로 분리합니다.
- 비관리된 예외: 외부 모듈에서 발생하는 예외나, 프로그램 버그로 인해 발생한 의도치 않은 예외
- 관리되는 예외: 의도적으로 발생시킨 관리되는 예외 (TqException)
이 중 관리되는 예외를 통해 클라이언트에서 적절히 처리됩니다.
예외는 TqoonException
객체를 통해 생성합니다
TqoonException.CreateBizException(string message, string title = "");
TqoonException.CreateParamException(string message, string title = "", string paramName = "");
TqoonException.CreateTransBizException(string category, string key, params string[] args);
예외의 종류
TqException | 설명 |
---|---|
TqoonBizException | 업무처리 중에 발생하는 크리티컬한 예외 입니다. |
TqoonTransBizException | BizException과 동일하며 클라이언트에 전달시 번역처리된 메세지를 전달할때 사용 됩니다. |
TqoonParamException | 전달된 파라메터에 의한 이유로 발생하는 예외 입니다 |
6.2.1. TqoonBizException
업무 처리 중 발생하는 크리티컬한 예외를 발생 시킬 때, 사용 합니다. 이 예외는 클라이언트에 자동으로 Alert 되며 필요한 경우, 유의미한 메시지로 전환하여 표시할 수 있습니다.
if(userPoint < currentHavingPoint)
{
// 고객포인트 부족
throw TqoonException.CreateBizException("ORDER_ERROR001", "ORDER_ERROR"); // 클라이언트에서는 오류 코드를 유의미한 메시지로 전환하여 표시할 수 있습니다.
}
6.2.2 TqoonTransBizException
TqoonBizException과 동일하게 업무 처리 중 발생하는 크리티컬한 예외를 발생 시킬때, 사용 합니다.
클라이언트에 자동으로 Alert되는 메세지를 번역 처리하여 넘길때 사용 합니다.
if(string.IsNullOrEmpty(userAddr))
{
// 고객주소 없음
throw TqoonException.CreateTransBizException("userAddr", L.T("고객 주소가 입력되지 않았습니다.")); // 입력한 내용에 메세지를 번역처리 하여 클리이언트에 자동으로 alert 표기 됩니다.
}
6.2.3. TqoonParamException
고객(클라이언트)가 입력(전달)한 파라메터가 원인이 되어 발생한 예외를 발생시킬 때, 사용합니다. 이 예외는 클라이언트에 자동으로 Alert 되지 않지만, 필요한 경우, Alert 시킬 수 있으며, 입력 양식의 Validation에 영향을 줄 수 있습니다.
if(string.IsNullOrEmpty(userName))
{
// 고객이름 없음
throw TqoonException.CreateParamException("SIGNIN_ERROR01", paramName = "UserName"); // 클라이언트에서는 오류 코드를 유의미한 메시지로 전환하여 표시할 수 있으며, 입력 양식의 Validation에 영향을 줄 수 있습니다.
}
6.2. 예외로깅과 트랜잭션처리
- 발생하는 모든 예외는 서비스 계층에서 Transaction 특성이 선언된 경우, AdoTemplate이 주입된 DAO들이 모두 롤백됩니다.
- 티쿤에서는 2개 이상의 Database에 접속하며 각각 명명된 AdoTemplate를 가지고 있으나 Transaction 처리는 AdoTemplate의 이름을 가지고 있는 접근에 한해서만 처리됩니다.
- TqoonBizException 예외는 TqoonLog.dbo.BizError에 자동으로 로깅됩니다.