셸 스크립팅 · 견고한 스크립트 · 퀴즈
퀴즈: 견고한 스크립트
문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
set -e 만 켠 스크립트에서 curl URL | jq . | wc -l 의 curl 이 실패했습니다. 스크립트는?
- 즉시 종료된다
- jq 가 오류를 내며 종료된다
- 계속 진행된다. 파이프라인 상태는 마지막 명령의 것이기 때문
- curl 이 자동으로 재시도한다
trap cleanup EXIT 를 쓸 때 핸들러 첫 줄에서 rc=$? 를 저장해야 하는 이유는?
- 핸들러 안에서 $? 를 쓰면 문법 오류가 나기 때문
- EXIT 트랩은 종료 코드를 받을 수 없기 때문
- set -e 와 충돌하기 때문
- 핸들러 안의 명령들이 $? 를 덮어써 원래 종료 코드가 사라지기 때문
임시 파일을 mktemp 로 만들어야 하는 이유로 가장 정확한 것은?
- 파일 이름이 짧아 성능이 좋기 때문
- trap 없이도 자동으로 지워지기 때문
- 동시 실행 충돌과 예측 가능한 이름을 노린 공격을 막기 때문
- /tmp 밖에는 임시 파일을 만들 수 없기 때문
5분마다 도는 크론 작업이 6분 걸리기 시작했습니다. 잠금을 걸면서 함께 해야 할 일은?
- '이미 실행 중이라 건너뜀'을 실패와 구분되는 종료 코드로 알린다
- 실행 주기를 1분으로 줄인다
- 잠금 파일을 /tmp 대신 홈 디렉터리에 만든다
- 두 번째 실행이 첫 번째를 종료시키게 한다
재시도 로직에서 반드시 확인해야 할 전제는?
- 명령이 충분히 빠른가
- 그 작업이 여러 번 실행돼도 안전한가(멱등한가)
- 네트워크를 쓰는 작업인가
- 종료 코드가 1인가
set -u 가 막아 주는 대표적인 사고는?
- 변수 이름 오타로 빈 문자열이 넘어가 rm -rf "$DIR"/ 같은 명령이 엉뚱하게 동작하는 것
- 파이프라인 중간 명령이 실패해도 전체가 성공으로 지나가는 것
- 스크립트가 죽을 때 임시 파일이 남는 것
- 같은 스크립트가 동시에 돌아 충돌하는 것