Bash
Bourne Again Shell
Unix/Linux 기본 셸. 스크립트 작성으로 자동화. DevOps의 필수 도구.
Bourne Again Shell
Unix/Linux 기본 셸. 스크립트 작성으로 자동화. DevOps의 필수 도구.
Bash(Bourne Again Shell)는 1989년 Brian Fox가 GNU 프로젝트를 위해 개발한 Unix 셸입니다. 원래 Bourne Shell(sh)의 자유 소프트웨어 대체품으로 시작했으나, 현재 Linux와 macOS의 기본 셸로 가장 널리 사용되는 셸이 되었습니다.
명령어 실행, 파이프라인, 변수, 조건문, 반복문 등 프로그래밍 기능을 제공합니다. 인터랙티브 셸로 사용하거나 스크립트 파일로 작성하여 자동화 작업에 활용합니다. Tab 자동완성, 히스토리, 에일리어스 등 편의 기능도 풍부합니다.
DevOps에서 Bash는 빌드 스크립트, 배포 자동화, 시스템 관리, CI/CD 파이프라인 작성에 필수입니다. Docker 컨테이너의 ENTRYPOINT, Kubernetes의 초기화 스크립트, GitHub Actions의 run 단계에서 주로 사용됩니다.
실무에서는 shellcheck로 스크립트 린팅, set -euo pipefail로 안전한 실행, 함수와 변수로 모듈화하는 것이 모범 사례입니다. 복잡한 로직은 Python 등으로 대체하되, 빠른 자동화에는 여전히 Bash가 효율적입니다.
#!/bin/bash
# deploy.sh - 안전한 배포 스크립트 예제
set -euo pipefail # 에러, 미정의 변수, 파이프 실패 시 종료
# 환경변수 검증
: "${APP_NAME:?APP_NAME 환경변수 필요}"
: "${VERSION:?VERSION 환경변수 필요}"
: "${ENV:=staging}" # 기본값 설정
# 함수 정의
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
}
rollback() {
log "ERROR: 배포 실패, 롤백 시작..."
kubectl rollout undo deployment/"${APP_NAME}" -n "${ENV}"
exit 1
}
trap rollback ERR
# 배포 실행
log "Deploying ${APP_NAME}:${VERSION} to ${ENV}"
kubectl set image deployment/"${APP_NAME}" \
app="${REGISTRY}/${APP_NAME}:${VERSION}" -n "${ENV}"
# 롤아웃 대기
kubectl rollout status deployment/"${APP_NAME}" -n "${ENV}" --timeout=300s
log "Deployment completed successfully!"
시니어: "CI 파이프라인 스크립트 작성할 때 꼭 set -e 넣어주세요. 안 그러면 중간에 명령어 실패해도 계속 진행돼요."
주니어: "pipefail도 필요하다고 들었는데요?"
시니어: "네, 파이프라인 중간 명령어 실패도 잡으려면 필요해요. set -euo pipefail이 표준 시작 패턴입니다."
면접관: "Bash 스크립트에서 변수 사용 시 큰따옴표를 쓰는 이유는?"
지원자: "공백이나 특수문자가 포함된 값을 안전하게 처리하기 위해서입니다. $var 대신 \"$var\"를 사용하면 단어 분리(word splitting)를 방지할 수 있습니다. 파일 경로나 사용자 입력 처리 시 특히 중요합니다."
리뷰어: "여기 cat file | grep pattern 대신 grep pattern file로 쓰면 프로세스 하나 줄일 수 있어요. UUOC(Useless Use of Cat)라고 하죠."
개발자: "아, 맞네요. 그리고 shellcheck 돌려보니 다른 경고도 있어서 수정하겠습니다."