CLI는 결과·진단·상태를 세 채널로 분리한다

화면에 함께 보여도 셸과 다음 프로그램은 각 채널을 따로 소비한다.

분류 질문“다음 프로그램이 읽을 값인가?”면 stdout, 사람이 볼 오류·진행 메시지면 stderr, 성공 여부는 종료 상태로 보낸다.

명령 실행 결과소비자가 누구인가?
stdout다음 프로그램이 읽을 데이터
stderr사람이 읽을 진단·진행
exit status셸·CI가 읽는 성공 여부
stdout
println!정상 결과·JSON·검색 행
파이프와 >다음 명령 또는 파일로 전달
계약진단 문구로 오염하지 않기
stderr
eprintln!오류·경고·진행 상태
터미널과 2>stdout과 별도 리디렉션
계약실패 원인을 사람이 읽게 하기
exit status
ExitCode / Result또는 명시적 process::exit
shell·CI 판단0은 성공, 비영은 실패
계약메시지와 성공 여부 분리
성공minigrep to poem.txt > out.txt
out.txt = 검색 결과

stderr는 비고 종료 상태는 0이다.

실패minigrep > out.txt
out.txt = 빈 결과

오류는 stderr, 종료 상태는 비영이다.