AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

"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 스크립팅은 단순한 개발 도구가 아닌, 프로덕션 운영의 핵심 도구로 자리매김 가능