본문으로 건너뛰기
피드

에러의 두 가지 종류

backend 약 3분

소프트웨어 에러를 expected(정상 운영 중 발생, 처리 필요)와 unexpected(버그, crash 허용)로 나누는 프레임워크를 제안하는 글. 맥락에 따라 선 긋는 위치가 달라지며, Rust의 에러 철학과 맥이 같음.

  • 1

    Expected error는 throw/panic 대신 Result 타입 등으로 반환하고, WARN/INFO 로그 사용

  • 2

    Unexpected error는 버그를 의미하므로 crash/panic 허용, ERROR/FATAL 로그 사용

  • 3

    프로토타입이면 대부분 unexpected, 미션 크리티컬이면 대부분 expected로 분류

  • 4

    Rust/Zig는 엄격하게, JS/Python은 느슨하게 에러를 분류하는 경향

  • Evan Hahn의 블로그 글로, 소프트웨어 에러를 딱 두 종류로 나눠서 생각하자는 제안임
  • 예상 가능한 에러(Expected errors): 유효성 검증 실패, 네트워크 장애, 권한 부족 같은 것들. 정상 운영 중에 당연히 발생할 수 있고, 개발자 잘못이 아님. Result 타입이나 null 유니온 같은 걸로 반환해서 처리해야 하고, throw/panic은 하면 안 됨. 로그 레벨은 WARN이나 INFO가 적절
  • 예상 못한 에러(Unexpected errors): assertion 위반, 로직 에러, 잘못된 데이터 같은 것들. 이건 버그라는 뜻이므로 crash/panic 해도 됨. 오히려 프로그램을 완전히 뻗게 만드는 게 장기적으로 더 안정적인 소프트웨어를 만든다는 입장. 로그는 ERROR/FATAL 레벨로
  • 어디에 선을 긋느냐는 맥락에 따라 다름. 프로토타입이면 모든 에러가 unexpected이고, 50년짜리 우주 탐사선이면 거의 모든 에러가 expected임. 실무에서는 신뢰성을 높일수록 expected로 분류하는 범위가 점점 넓어지게 됨
  • 언어별 철학도 다른데, Rust나 Zig 같은 엄격한 언어는 더 많은 에러를 expected로 취급하고, JavaScript나 Python은 unexpected 쪽으로 빠지는 경향이 있음. 본인은 프로덕션엔 엄격한 언어, 스크립트엔 느슨한 언어를 선호한다고
  • 결국 Rust의 에러 처리 철학(Result vs panic)과 거의 같은 이야기인데, 언어 불문하고 적용할 수 있는 사고 프레임워크로 정리한 거임

새로운 이야기는 아니지만, 언어 불문하고 에러 처리 전략을 정리하는 깔끔한 멘탈 모델. 특히 주니어 개발자에게 유용한 프레임워크임.

댓글

댓글

댓글을 불러오는 중...

backend

Cloudflare가 잡아낸 QUIC CUBIC 버그, ‘idle’ 한 줄 오판이 다운로드를 죽였다

Cloudflare의 QUIC 구현체 quiche에서 CUBIC 혼잡 제어가 최소 윈도우에 갇혀 회복하지 못하는 버그가 발견됐다. Linux 커널의 idle 최적화를 QUIC에 옮기는 과정에서 TCP와 QUIC의 이벤트 타이밍 차이를 놓쳤고, 결국 ACK 시점을 기준으로 idle 시간을 재도록 고쳐 100% 테스트 통과를 회복했다.

backend

삼성전자가 반도체 개발 조직에 오라클 자바를 공식 채택한 이유

삼성전자 DS 부문이 글로벌 반도체 개발 환경에 오라클 자바 SE 유니버설 서브스크립션을 공식 채택했다. 서로 다른 자바 배포판과 버전이 섞이면서 생길 수 있는 보안, 컴플라이언스, 라이선스 리스크를 줄이고 개발 환경을 표준화하려는 결정이다.

backend

네이버클라우드, 트래픽 따라 알아서 줄고 느는 서버리스 데이터베이스 출시

네이버클라우드가 사용량에 따라 CPU, 메모리, 스토리지를 자동 조절하는 완전관리형 서버리스 데이터베이스 서비스를 내놨다. 기존 가상머신 기반 관리형 데이터베이스처럼 피크 트래픽에 맞춰 서버를 과하게 잡아두는 방식에서 벗어나, 사용량 기반 과금과 오토스케일링으로 비용 낭비를 줄이겠다는 방향이다.

backend

네이버클라우드, 사용량 따라 늘고 줄어드는 서버리스 데이터베이스 출시

네이버클라우드가 완전관리형 서버리스 데이터베이스 서비스인 Cloud DB Serverless를 출시했다. VM 기반 관리형 데이터베이스의 고정 비용과 과잉 프로비저닝 문제를 줄이고, 트래픽에 따라 CPU·메모리·스토리지를 자동 조절하는 구조를 내세운다.

backend

네이버클라우드, 사용량 따라 자동 확장되는 서버리스 데이터베이스 출시

네이버클라우드가 사용량에 따라 컴퓨팅 자원을 자동 조절하는 서버리스 기반 클라우드 데이터베이스를 출시했음. 기존 가상머신 기반 관리형 데이터베이스의 고정 비용과 운영 부담을 줄이고, 국내 데이터 규제 요구까지 맞추겠다는 전략임.