"It Works on My Machine"에서 프로덕션 영웅으로의 여정: Bash 스크립팅의 진화
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
- 초보 개발자 및 DevOps 엔지니어
- 환경별 호환성과 안정성 확보가 필요한 스크립팅 작업자
- 로컬에서 프로덕션으로의 이식성 향상이 필요한 팀원
- 난이도: 중간 (기초 Bash 지식 보유자 대상)
핵심 요약
- "환경에 종속된 스크립트" -> "환경에 독립적인 스크립트" 전환
get_project_dir()
함수로 경로 자동 탐색,check_dependencies()
로 의존성 검증safe_deploy()
및rollback()
함수로 안정적인 배포 및 롤백 구현- 에러 처리 강화 및 로깅 최적화
set -euo pipefail
플래그로 스크립트 실패 시 즉시 종료log()
,info()
,error()
함수로 실시간 상태 추적- 프로덕션 환경에 맞춘 프레임워크 구축
validate_environment()
,create_backup()
,health_check()
등 5단계 핵심 함수 포함
섹션별 세부 요약
1. 문제의 시작: "로컬에서만 작동하는 스크립트"
- 경로 하드코딩 문제:
cp -r build/* /var/www/html/
같은 경로가 로컬과 프로덕션에서 다름 - 에러 처리 누락:
git pull
실패 시도 없이 진행 → 파괴적 배포 발생 - OS 및 버전 의존성: CentOS, Ubuntu 등 OS 차이로 인한 호환성 문제
2. 프로덕션 실패 사례: 3시간의 서버 다운
- 프로덕션 배포 실패:
npm install
실패 후sudo systemctl restart nginx
수행 없음 - 사후 조치: 관리자와의 대화로 스크립트 개선 필요성 인식
3. 스크립트 개선 전략
- 프로젝트 경로 탐색:
get_project_dir()
함수로 다중 경로 검색 (예:"$HOME/projects/myapp"
,"/opt/myapp"
) - 의존성 검증:
check_dependencies()
로node
,npm
,git
존재 여부 및 버전 체크 - 권한 관리:
safe_deploy()
함수로sudo
사용 여부 및 작성 권한 확인
4. 프로덕션용 프레임워크 구축
- 스크립트 기본 설정:
```bash
set -euo pipefail # 스크립트 실패 시 즉시 종료
readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
```
- 환경 검증:
validate_environment()
로 OS, 명령어, Node.js 버전 검증 - 백업 및 롤백:
create_backup()
함수로 7일간 백업 보존,rollback()
으로 롤백 가능 - 건강 상태 확인:
health_check()
로curl
을 통한 서버 상태 검증
5. 개선 후의 변화: 신뢰를 얻는 스크립트
- 팀 내 신뢰도 상승: "스크립트가 실패하지 않는다"는 평가
- 자동화 확장: "이 프로세스도 자동화할 수 있을까?" 질문 유발
- 프로덕션 운영 책임 강화: 관리자에게 "미션 크리티컬 작업" 신뢰 부여
결론
- 실무 적용 팁: 스크립트 내
set -euo pipefail
,readonly
변수 사용,health_check()
통합 - 핵심 원칙: "로컬에서만 작동하는 스크립트"가 아닌 "프로덕션에 적응하는 스크립트" 개발
- 예제:
safe_deploy()
함수를 사용해sudo
권한 확인 및cp
복사 수행 - 결론: Bash 스크립팅은 단순한 개발 도구가 아닌, 프로덕션 운영의 핵심 도구로 자리매김 가능