피드로 돌아가기
Error Handling — Learning to Love `if err != nil`
Dev.toDev.to
Backend

Exception 제거와 Explicit Error Handling을 통한 제어 흐름 투명성 확보

Error Handling — Learning to Love `if err != nil`

mihir mohapatra2026년 6월 21일7intermediate

Context

Java의 try/catch 기반 Exception 모델이 유발하는 불투명한 제어 흐름과 RuntimeException의 예기치 못한 전파 문제 분석. 호출 스택 깊은 곳에서 발생한 에러가 중간 계층을 건너뛰어 발생하는 디버깅 난이도 상승 및 런타임 불안정성 해결 필요.

Technical Solution

  • Error를 값(Value)으로 취급하여 함수 시그니처의 마지막 반환값으로 명시하는 설계 채택
  • if err != nil 패턴을 통한 각 호출 지점에서의 즉각적인 에러 처리 강제
  • fmt.Errorf의 %w 동사를 활용하여 하위 에러를 Wrap함으로써 호출 스택의 문맥(Context)을 보존하는 구조 설계
  • errors.Is 및 errors.As 인터페이스를 통해 Wrap된 에러 내부의 Sentinel Value 또는 Custom Type을 식별하는 메커니즘 구현
  • Panic/Recover를 일반 Exception이 아닌 복구 불가능한 치명적 결함(Fatal Bug) 전용으로 분리하여 시스템 안정성 강화

1. 모든 실패 가능 함수는 (T, error) 형태로 반환값을 설계했는가

2. 에러 반환 시 단순 전달이 아닌 fmt.Errorf("context: %w", err)를 통해 추적 가능한 문맥을 추가했는가

3. Panic 사용을 반드시 'Must' 접두사가 붙은 치명적 초기화 단계로 제한했는가

4. 복잡한 Type Hierarchy 대신 Sentinel Error 값을 정의하여 errors.Is로 검증하고 있는가

원문 읽기