모든 에러 variant 에 Display, Error, From 을 손으로 쓰는 건 진짜 보일러플레이트야. 두 크레이트가 이 공간을 차지하고, 뭘 고르느냐가 네가 뭘 짓는지 말해줘.
thiserror — 라이브러리용
thiserror 는 구체적 에러 enum 의 보일러플레이트를 생성해. variant 를 쓰고 #[error("...")] 로 표기하면; 매크로가 Display, Error, 그리고 (#[from] 으로) From 변환을 derive 해. 결과는 정밀하고 match 가능한 에러 타입 — 호출자가 특정 실패에 반응하게 라이브러리가 노출해야 할 바로 그거.
anyhow — 애플리케이션용
anyhow 는 아무 에러나 변환되는 catch-all 타입 anyhow::Error 하나를 줘. 에러 타입 이름 짓기를 멈추고 그냥 모든 걸 ? 하면서, .context("설정 로딩 중") 으로 context 를 더해. 애플리케이션 코드 — CLI, 바이너리 — 에 딱이야, 호출자가 에러 종류에 match 할 필요 없고 좋은 메시지랑 backtrace 만 원할 때.
이건 네가 번 거야
이 크레이트가 뭔지 봐: 매크로 생성 trait 구현이야. thiserror 는 너 대신 From 이랑 Display 를 derive 하고; anyhow 는 네가 이미 이해하는 Box<dyn Error> 랑 ? 변환에 기대. 마법이 아니야 — 이 트랙의 패턴을 자동화한 거야. 그게 Rust 생태계의 축소판이야: 이미 아는 언어 기능 주변의 보일러플레이트를 없애는 작은 크레이트.