본문으로 건너뛰기
0
r/jeffnews HN 약 3분

에러의 두 가지 종류

backend

요약

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

기사 전체 정리

에러의 두 가지 종류

  • 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)과 거의 같은 이야기인데, 언어 불문하고 적용할 수 있는 사고 프레임워크로 정리한 거임

핵심 포인트

  • Expected error는 throw/panic 대신 Result 타입 등으로 반환하고, WARN/INFO 로그 사용
  • Unexpected error는 버그를 의미하므로 crash/panic 허용, ERROR/FATAL 로그 사용
  • 프로토타입이면 대부분 unexpected, 미션 크리티컬이면 대부분 expected로 분류
  • Rust/Zig는 엄격하게, JS/Python은 느슨하게 에러를 분류하는 경향

인사이트

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

댓글

댓글

댓글을 불러오는 중...

backend

Redis 8.0 출시 — I/O 스레딩 갈아엎고 처리량 3배, 2.1M ops/sec 달성

Redis 8.0이 I/O 스레딩 모델을 완전히 재설계해서 16코어 기준 2.1M ops/sec를 달성함 (7.4 대비 3배). Hash field expiration, Vector search HNSW, Client-side caching v2, Redis Functions 2.0 async 실행 등 굵직한 기능이 추가되고, jemalloc 통합으로 메모리 fragmentation도 25% 줄어듦.

backend

Coalton 0.2 프리뷰: 커링을 버리고, 키워드 인자와 실수 대수적 수를 품다

Common Lisp 안에 사는 정적 타입 함수형 언어 Coalton이 0.2에서 Haskell 스타일 커링을 버리고 고정 인자 함수로 전환. 키워드 인자, 다중 반환값, 컬렉션 리터럴, 짧은 람다, scoped 타입 변수, 실수 대수적 수(RealAlgebraic) 등 대규모 변경.

backend

5만 달러짜리 수작업 포렌식 감사를 결정론적 Python 엔진으로 대체한 사례

이혼 소송에서 공동 계좌 내 별도 재산을 증명하는 포렌식 회계 작업을 자동화한 Exit Protocol. LIBR(최저 중간 잔액 규칙)을 상태 머신으로 구현하고, Spatial-Grid OCR로 은행 PDF를 처리하며, Daubert 기준 충족을 위해 AI를 의도적으로 배제한 결정론적 파이프라인임.

backend

Sandia 국립연구소의 LAPIS: 희소 행렬 연산을 위한 MLIR 기반 컴파일러 프레임워크

Sandia 국립연구소에서 MLIR 위에 구축한 LAPIS 컴파일러 프레임워크 발표. Kokkos 방언으로 다양한 아키텍처 지원하며 희소 선형대수 연산을 GPU에서 효율적으로 최적화

backend

Cloudflare, API 한 번으로 웹사이트 전체를 크롤링하는 /crawl 엔드포인트 오픈 베타 출시

Cloudflare Browser Rendering에 /crawl 엔드포인트가 오픈 베타로 추가됨. 시작 URL 하나로 전체 사이트를 크롤링하고 HTML, Markdown, JSON으로 반환하며, robots.txt를 준수하는 비동기 크롤링 API.