소개
모든 Linux 명령을 하나의 기계라고 생각해 보겠습니다. 한쪽으로 데이터가 들어오면 기계가 데이터를 처리합니다. 하지만 출력구가 하나뿐인 단순한 기계와 달리 Linux 명령에는 결과를 내보내는 통로가 두 개 있습니다.
- 표준 출력 (stdout): "정상 출력 통로"입니다. 기계가 정상적으로 작동하면 완성된 결과가 이 통로로 나옵니다.
- 표준 오류 (stderr): "오류 출력 통로"입니다. 문제가 발생하면 오류 메시지가 이 통로로 나옵니다.
기본적으로 두 통로의 내용은 모두 화면에 표시됩니다.
이러한 "스트림" 모델은 셸 작업에서 가장 중요한 개념 중 하나입니다. Linux 명령은 단순히 "텍스트를 출력"하는 것이 아니라 구조화된 데이터 흐름을 생성하는 경우가 많습니다. 이 흐름을 이해하면 리디렉션과 파이프라인이 마법처럼 느껴지지 않고 논리적으로 이해됩니다.
이 실습에서는 명령을 실행하면서 서로 다른 두 스트림이 실제로 어떻게 동작하는지 확인합니다.
표준 출력 (stdout)
"정상 출력 통로"가 어떻게 동작하는지 확인합니다.
파일을 나열하는 ls를 사용합니다. ls가 정상적으로 실행되면 파일 이름을 표준 출력으로 보냅니다.
다음 명령을 실행합니다.
ls -l
파일 목록이 표시됩니다.
무슨 일이 일어났나요?
명령이 정상적으로 실행되었으므로 ls 프로그램은 목록을 stdout 스트림으로 보냈습니다. 터미널은 이 스트림을 감시하다가 내용을 화면에 표시합니다.
핵심은 터미널이 기본 대상일 뿐이라는 점입니다. 표준 출력이 화면에 영구적으로 연결된 것은 아니므로, 곧 표준 출력을 다른 위치에 저장하거나 리디렉션할 수 있습니다.
표준 오류 (stderr)
이제 "오류 출력 통로"를 살펴봅니다. 표준 오류(stderr) 는 오류를 전달하는 데 사용됩니다.
존재하지 않는 디렉터리를 나열하도록 요청해 ls에서 오류가 발생하게 만들 수 있습니다.
다음 명령을 실행합니다.
ls -l /nonexistent_directory
오류 메시지가 표시됩니다.
무슨 일이 일어났나요?
명령이 실패했습니다. stdout 대신 메시지를 stderr 스트림으로 보냈습니다.
터미널은 기본적으로 두 스트림을 모두 감시하므로, 오류 메시지도 일반 텍스트와 같은 방식으로 화면에 표시합니다.
초보자가 성공 메시지와 오류 메시지를 "같은 종류의 출력"이라고 생각하는 이유가 여기에 있습니다. 화면에서는 비슷하게 보이지만 내부적으로는 서로 다른 채널을 통해 전달됩니다.
혼합 출력
이제 하나의 명령이 두 스트림을 모두 생성하면 어떻게 되는지 확인합니다.
ls에 다음 두 작업을 수행하도록 요청합니다.
- 현재 디렉터리
.를 나열합니다. 이 작업은 성공합니다. /fake를 나열합니다. 이 작업은 실패합니다.
다음 명령을 실행합니다.
ls -l . /fake
출력을 자세히 살펴봅니다. 두 부분이 표시됩니다.
/fake에 대한 오류 메시지.에 대한 성공적인 파일 목록
무슨 일이 일어났나요?
오류 메시지는 stderr 파이프를 통해 전달되었습니다. 파일 목록은 stdout 파이프를 통해 전달되었습니다. 터미널은 두 스트림을 모두 받아 화면에 표시했습니다.
이 구분은 매우 중요합니다. 다음 실습에서는 stderr는 무시하면서 stdout을 캡처하는 방법을 배웁니다.
이 분리는 단순한 이론이 아닙니다. 실제 자동화에서는 정상적인 결과를 저장하면서 오류는 계속 표시하거나, 오류를 로그에 기록하되 유용한 데이터와 섞지 않아야 하는 경우가 많습니다.
요약
이 실습에서는 두 개의 통로가 있는 기계에 비유해 "데이터 스트림"을 살펴보았습니다.
- 표준 출력: 정상적인 결과를 전달하는 채널입니다.
- 표준 오류: 오류 메시지를 전달하는 채널입니다.
기본적으로 Linux 는 두 스트림을 모두 화면에 표시합니다. 다음에는 두 스트림을 분리하는 방법을 배웁니다.



