티스토리 뷰

마지막 문장이 앞선 실패를 숨길 수 있습니다

점검 스크립트가 ‘완료’를 출력했지만 내부 조회가 실패한 경우가 있습니다. 화면에 마지막 메시지가 보이는 것과 필요한 단계가 성공한 것은 다릅니다. 각 단계의 결과를 확인하고 실패를 호출자에게 전달하는 종료 코드가 필요합니다.

이 글은 Bash에서 작은 입력 확인 스크립트를 설명합니다. 실제 서버의 서비스를 변경하지 않습니다. 종료 코드의 일반적인 관례는 0을 성공으로, 0이 아닌 값을 실패로 해석하는 것이며 각 도구의 구체적인 코드는 해당 문서를 확인합니다.

조회 실패를 바로 검사합니다

#!/usr/bin/env bash
input='./demo-input.txt'
if [ ! -r "$input" ]; then
  printf '%s\n' 'ERROR: demo input is not readable' >&2
  exit 2
fi
if ! wc -l -- "$input"; then
  printf '%s\n' 'ERROR: line count failed' >&2
  exit 3
fi
printf '%s\n' 'OK: demo check completed'
exit 0

예시는 파일을 읽을 수 없으면 2, 줄 수 조회가 실패하면 3으로 종료합니다. 이 값은 여기서 정한 교육용 규칙이며 모든 스크립트의 표준 오류 코드는 아닙니다. 프로그램의 성공 조건과 코드 의미를 문서에 함께 적습니다. Linux에서 직접 실행한 결과는 이 글에 포함하지 않았습니다.

실패 뒤에도 다음 명령을 실행하면 마지막 명령의 상태만 남을 수 있습니다. $?는 직전 명령의 코드이므로 확인하려면 다른 명령을 끼우기 전에 저장해야 합니다. 파이프라인과 조건문은 별도 동작 규칙이 있으므로 set -e만 추가하고 오류 처리가 완성됐다고 판단하지 않습니다.

호출자도 결과를 보존해야 합니다

bash ./demo-check.sh
result=$?
printf 'demo exit code=%s\n' "$result"
exit "$result"

로그에는 단계, 실제 시각, 실패 메시지와 종료 코드를 남깁니다. 입력 자료의 전체 내용이나 비밀번호를 출력하지 않습니다. 성공 메시지는 모든 필수 단계가 끝난 다음에 출력하고 부분 성공이 가능하면 어느 단계까지 완료됐는지 분리합니다.

예약 시스템이 종료 코드를 수집하는지 확인해야 합니다. 스크립트가 올바르게 실패해도 모니터링이 화면 문구만 보거나 반환 코드를 무시하면 실패 알림을 놓칩니다. 로그 파일이 생성되지 않은 경우도 성공으로 처리하지 말고 기록 실패로 남깁니다.

부분 성공을 어떻게 표시할까요

가상 점검에 자료 읽기, 집계, 결과 저장 세 단계가 있다면 저장 실패 후에도 ‘집계 완료’는 사실일 수 있습니다. 그러나 전체 업무 완료라고 표시하면 결과 파일을 받는 사람은 혼란을 겪습니다. 단계별 상태를 남기고 최종 종료 코드는 필수 단계의 실패를 반영하도록 설계합니다.

호출자가 다시 실행할 때 같은 자료가 중복 처리되는지도 검토합니다. 조회 전용 시험이라도 결과 파일을 덮어쓰면 이전 실패 근거를 잃을 수 있습니다. 고유 시험 번호와 로그 시각을 두고, 재실행 여부·이전 파일 보존·실패 후 정리 규칙을 문서에 적습니다.

정상·실패·미확인 세 경우를 시험합니다

입력 있음: 예상 코드 0
입력 없음: 예상 코드 2
조회 명령 실패: 예상 코드 3
실행 기록 없음: 미확인, 성공으로 대체하지 않음

실패 시험은 삭제가 아닌 존재하지 않는 연습 파일 경로로 수행할 수 있습니다. 실제 업무 자료를 지워 오류를 만들 필요는 없습니다. 시험 결과를 표에 남기고 반환 코드와 출력이 설계한 의미와 맞는지 비교합니다.

다음 행동은 본인이 관리하는 작은 스크립트 하나의 성공 조건과 오류 코드 표를 작성하는 것입니다. 예약 실행 여부와 업무 검증 여부도 별도로 표시하면 ‘프로세스 종료’를 ‘업무 완료’로 잘못 보고하는 일을 줄일 수 있습니다.

공식 자료와 확인 범위

기술 자료 확인일: 2026년 10월 12일. 교육용 자료는 실제 기관·고객의 기록이 아닙니다.

GNU Bash: Exit Status