출력 스트림 계약

성공 결과는 표준 출력, 실패 설명은 표준 에러로 보낸다

셸의 `>` 리디렉션은 표준 출력만 파일로 보내므로, 에러 메시지는 `eprintln!`으로 분리해야 사용자가 화면에서 바로 볼 수 있다.

정상 검색 결과

println!("{line}")

검색에 성공한 라인은 데이터이므로 표준 출력에 남긴다. 사용자는 `cargo run -- to poem.txt > output.txt`로 결과만 저장할 수 있다.

인수 파싱과 실행 에러

eprintln!("Problem parsing arguments: {err}")

실패 설명은 표준 에러에 남긴다. 표준 출력이 파일로 향해도 에러는 터미널에 표시되고 파일에는 섞이지 않는다.

인수 없음

화면에 에러 표시

`cargo run > output.txt`에서 파싱 에러는 파일이 아니라 화면에 보인다.

정상 실행

파일에 결과 저장

`to` 검색 결과 두 줄은 `output.txt`로 이동하고 터미널은 조용하다.

사용자 경험

데이터와 진단 분리

파일을 후속 도구에 넘겨도 에러 문장이 데이터처럼 섞이지 않는다.