분산 시스템에서의 예외 처리 패턴 변화
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
Java 개발자 및 분산 시스템 아키텍처 설계자
난이도: 중간 이상 (체계적인 예외 처리 구조 이해 필요)
핵심 요약
- 체크드 예외(checked exceptions)는 분산 시스템에서 런타임 예외(runtime exceptions)로 대체되어 컴파일러 검증이 불가능해짐
- IDL 정의 및 RPC/REST API는 체크드 예외 기능을 활용하지 못함
- Golang은 체크드 예외를 제거한 이유로 마이크로서비스 환경에서 체크드 예외의 한계를 강조
섹션별 세부 요약
1. 분산 시스템으로의 전환 시 발생하는 문제
- 단일 프로세스(monolith)에서 분산 서비스로 이동 시, 체크드 예외의 컴파일러 검증 기능이 사라짐
- 체크드 예외는 메서드 호출 전후에 예외 처리가 강제되었지만, 분산 환경에서는 RPC 실패 시 오직 에러 코드만 전달 가능
2. 런타임 예외의 남용과 대응
- 프레임워크 내부 라이브러리는 체크드 예외 대신 런타임 예외만 사용하여 컴파일러 검증을 우회
- 런타임 예외는 상위 레벨 예외 처리 코드에 집중되어, 일관된 에러 코드 전달 가능
3. 마이크로서비스 환경에서의 변화
- Spring → Quarkus 이전 과정에서 런타임 예외의 스택 트레이스 전달 가능성이 확인됨
- Golang은 체크드 예외 제거로 마이크로서비스 환경에서의 유연성을 강조
결론
- 체크드 예외는 분산 시스템에서 기술적 한계로 인해 런타임 예외로 대체된다는 점을 인지해야 하며, 예외 처리 전략은 상위 레벨 집중이 효과적임
- Golang의 체크드 예외 제거 결정은 마이크로서비스 아키텍처에서의 실용성을 반영한 사례로, 예외 처리 패턴의 진화를 보여줌