티스토리 뷰

개발 노트/개발 가이드라인

C# 예외 처리 가이드라인

시뮬레이션 프로그래머 2025. 8. 21. 23:18
  • .NET은 전부 unchecked 예외
  • 대신 예외 타입을 세분화해서 상황별 catch로 처리하는 게 기본

C#(.NET)에서 자주 쓰는 예외/에러 클래스

구분 대표 클래스 하위/관련 예외 설명
입력/인자
문제
ArgumentException ArgumentNullException,
ArgumentOutOfRangeException,
FormatException
잘못된 인자·누락·범위·포맷 오류
상태/로직
문제
InvalidOperationException NotSupportedException,
ObjectDisposedException
잘못된 호출 시나리오/지원 안 함/폐기 후 사용
컬렉션/인덱스 IndexOutOfRangeException KeyNotFoundException 인덱스·키 범위 초과/부재
런타임 연산 DivideByZeroException OverflowException 수학 연산 오류/오버플로
참조/캐스팅 NullReferenceException InvalidCastException null 역참조/잘못된 캐스팅
I/O 전반 IOException FileNotFoundException,
DirectoryNotFoundException,
PathTooLongException,
EndOfStreamException,
InvalidCastException
파일/디렉터리/
스트림 I/O 문제
네트워크/소켓 SocketException HttpRequestException,
WebException(구)
연결 실패/타임아웃/
프로토콜, HTTP 호출 실패
쓰레딩/취소 TaskCanceledException OperationCanceledException,
ThreadAbortException
비동기 취소/스레드 강제 종료
보안/권한 UnauthorizedAccessException SecurityException 파일·OS 권한/보안 정책 위반
데이터/
직렬화
JsonException
(System.Text.Json)
SerializationException JSON 파싱/직렬화 오류
데이터베이스 (공통 표준 없음) SqlException
(System.Data.SqlClient),
DbUpdateException(EF Core)
DB 연결/쿼리/제약 위반/
업데이트 실패
환경/자원 OutOfMemoryException StackOverflowException 메모리 부족/스택 초과(치명적)
참고: .NET에서 ApplicationException을 쓰지 않는 게 권장된다(의미가 약함).

C# 예외 처리 가이드라인 (상황 → 전략 매핑)

상황 대표 예외(예시) 심각도/복구성 기본 처리 전략 외부
응답
(HTTP)
로그 레벨 메트릭/
알림
비고
파싱/
포맷 오류
JsonException,
FormatException
낮음 /
복구 가능
에러 위치·필드 제공 400 WARN 파싱 실패율 요청 바디 문제
인증 실패 (미들웨어) 낮음 /
복구 가능
재인증 유도 401 INFO~WARN 인증 실패율 민감정보 로그 금지
인가 실패 (미들웨어) 낮음 /
복구 가능
권한 오류 반환 403 INFO~WARN 권한 실패율  
비즈니스 규칙 위반 커스텀 BusinessException 보통 /
재시도 무의미
도메인 코드·메시지로 응답 409
또는
422
INFO~WARN 도메인 실패율 재고 없음/잔액 부족
네트워크 일시 장애 HttpRequestException,
SocketException
보통 /
재시도 가능
지수 백오프·회로차단기·폴백 502/
503/
504
WARN 외부 의존성 에러율·지연 Polly로 재시도/서킷
네트워크 영구 실패 지속 HttpRequestException(DNS), 4xx 보통 /
재시도 무의미
즉시 실패·설정 점검 502/
503
ERROR 연속 실패 알람 구성/시크릿 오류 가능
외부
Rate Limit
(HTTP 429) 낮~보통 /
재시도 가능
Retry-After 준수, 큐잉 429 WARN 429 비율  
DB
제약 위반
DbUpdateException
(EF Core 내부에
SqlException)
보통 /
재시도 무의미
도메인 오류로 변환 409/
422
INFO~WARN 제약 위반 카운트 중복/순서 이슈
DB
데드락/
타임아웃
SqlException
(deadlock)
보통 /
재시도 가능
짧은 백오프 재시도 503
(외부) /
200
(내부 재시도 성공)
WARN 데드락 건수 격리수준/인덱스 점검
커넥션 풀 고갈 SqlException 높음 /
조건부 복구
배압·상한·서킷 오픈 503 ERROR 즉시 알람 리크/풀 사이즈 점검
파일 I/O/
디스크 가득
IOException,
UnauthorizedAccessException
높음 /
조건부 복구
쓰기 중단·읽기 전용 전환 507/
500
ERROR 디스크 사용률 알람 로테이션/정리 필요
동시성/용량 TaskCanceledException,
RejectedByPolicy(Polly)
보통 /
설계 이슈
큐/스레드 제한, 배압 503 WARN~ERROR 거절률 용량 계획
버그/NRE NullReferenceException,
IndexOutOfRangeException
높음 /
비복구
Fail-fast, 에러 페이지, 알람 500 ERROR 즉시 알람 재현·패치
치명적 자원 OutOfMemoryException,
StackOverflowException
치명적 / 비복구 프로세스 재시작, 덤프 500 FATAL 즉시 알람 사전 부하 테스트
정책에 따라 달라질 수 있음.

 

처리 규칙 요약(한 줄씩)

  1. 입력·파싱은 400 + 구체 메시지
  2. 도메인 위반은 409/422 + 비즈니스 에러코드
  3. 네트워크/외부 장애는 Polly 재시도 + 서킷 + 폴백
  4. DB 데드락은 짧은 재시도, 제약 위반은 도메인 에러 변환
  5. 풀/디스크 고갈은 배압/상한 + 즉시 알람
  6. 버그/NRE는 Fail-fast + 스택트레이스 + 핫픽스
  7. 로그는 4xx=WARN, 5xx=ERROR, 치명적=FATAL, 민감정보 금지
  8. traceId를 전 구간에 붙여 한 요청을 끝까지 추적
  9. SLA 타임아웃은 P95/P99 지표로 관리
  10. 재시도 경로에는 멱등성 키(Idempotency) 필수

'개발 노트 > 개발 가이드라인' 카테고리의 다른 글

Java 예외 처리 가이드라인  (1) 2025.08.21