PART 11. 견고한 스크립트 작성
스크립트가 작동한다는 것과 믿을 수 있다는 것은 다른 이야기입니다.
작동하는 스크립트는 정상 입력, 정상 환경에서 원하는 결과를 내놓습니다. 하지만 견고한 스크립트는 파일이 없어도, 명령어가 실패해도, 예상치 못한 입력이 들어와도 예측 가능하게 동작합니다. 문제가 생기면 어디서 왜 실패했는지 알려주고, 자신이 만들어놓은 임시 자원을 스스로 정리하고 종료합니다.
실제 서버에서 새벽 3시에 혼자 돌아가는 배치 스크립트를 생각해보세요. 그 스크립트가 조용히 실패하고 아무 흔적도 남기지 않으면 아무도 모릅니다. 반면 오류를 감지하고, 로그를 남기고, 알림을 보내고, 깔끔하게 종료하는 스크립트라면 다음날 아침에 출근해서 무슨 일이 있었는지 파악할 수 있습니다.
이 PART는 독자 패널 5명 전원이 "꼭 배우고 싶다"고 꼽은 주제입니다. PART 08에서 배운 trap과 클린업 패턴을 기반으로, 에러 처리와 디버깅을 체계적으로 다룹니다.
학습 목표
- exit code의 의미를 이해하고, 자체 종료 코드를 정의해 사용할 수 있습니다.
set -euo pipefail이 왜 방어적 스크립트의 첫 줄이 되어야 하는지 설명할 수 있습니다.trap ERR과 배열 변수(BASH_LINENO,FUNCNAME,BASH_SOURCE)로 스택 트레이스를 출력할 수 있습니다.- 로그 레벨, 타임스탬프, 색상을 갖춘 로깅 라이브러리를 직접 작성할 수 있습니다.
set -x와 커스텀 PS4로 스크립트 실행 흐름을 추적하고 버그를 찾을 수 있습니다.- ShellCheck로 정적 분석을 수행하고 주요 경고를 해결할 수 있습니다.
- 성능 측정 기법과 자주 쓰이는 최적화 패턴을 적용할 수 있습니다.
- 입력 검증, eval 회피, mktemp 보안 등 쉘 스크립트 보안 원칙을 실천할 수 있습니다.
구성
| 장 | 제목 | 주요 내용 |
|---|---|---|
| 01장 | 에러 처리 | exit code, set 옵션, trap ERR, 로깅 |
| 02장 | 디버깅과 품질 | set -x, ShellCheck, 성능 측정, 보안 |