Scotty: 아름다운 SSH 태스크 러너

발행: (2026년 4월 1일 AM 01:12 GMT+9)
8 분 소요

Source: Hacker News

(번역할 텍스트를 제공해 주시면 한국어로 번역해 드리겠습니다.)

왜 우리는 Scotty를 만들었는가

Laravel Cloud와 같은 서비스가 서버를 전혀 신경 쓰지 않아도 되게 만들었지만, 일부 프로젝트에서는 여전히 직접 서버에 배포하는 것을 선호합니다. 서버 환경에 익숙하고, 원하는 서버 제공자를 선택할 수 있으며, 환경을 완전히 제어할 수 있기 때문입니다.

Laravel Forge와 같은 도구는 내장된 배포 기능을 제공하고 잘 동작합니다. 하지만 저는 터미널에서 배포 스크립트를 직접 실행하는 방식을 항상 더 선호했습니다. 실행되는 동안 정확히 무슨 일이 일어나고 있는지 보고 싶고, 문제가 발생했을 때는 웹 UI를 클릭해 로그를 찾는 대신 바로 출력 내용을 확인하고 싶었습니다.

수년간 저는 Laravel Envoy를 사용해 왔습니다. 작업을 수행하는 데는 충분했지만, 작업이 진행되는 동안 더 깔끔한 출력과 배포 중간에 실행을 일시 중지할 수 있는 기능을 원했습니다. Envoy는 Blade 기반 파일 형식을 사용합니다. 이는 우리에게는 괜찮았지만, 모든 사람이 배포 스크립트를 위해 Blade 문법을 쓰고 싶어 하는 것은 아닙니다. 그래서 Scotty는 Bash 형식도 제공하여 그런 사용자들을 배려했습니다.

Scotty는 AI의 도움을 받아 Envoy 코드베이스를 참고해 제작되었습니다. 비록 Scotty는 처음부터 새로 짜여진 것이지만, 정신적으로는 Envoy의 포크라고 볼 수 있습니다. 기반을 제공해 준 Laravel에 감사드립니다. 전체 감사 내용은 Scotty 레포지토리에서 확인할 수 있습니다.

Source:

Scotty 사용하기

작업 정의 및 배포

작업은 Scotty.sh 파일에 정의합니다. 이는 주석이 달린 일반 Bash 파일이며, 편집기에서 올바르게 하이라이트되고 기본적으로 전체 쉘 지원을 제공합니다. 예시는 다음과 같습니다:

deploy() {
    cd /var/www/my-app
    git pull origin main
    php artisan migrate --force
}

단일 명령으로 배포합니다:

scotty run deploy

Scotty가 서버에 연결해 각 작업을 순서대로 실행하고 실시간으로 진행 상황을 표시합니다. 각 작업은 이름, 단계 번호, 경과 시간, 현재 실행 중인 명령을 보여줍니다. 모든 작업이 끝나면 각 단계별 소요 시간을 포함한 요약 표가 표시됩니다.

작업이 실패하면 해당 출력이 표시되고 실행이 즉시 중단되어 문제를 조사할 수 있습니다.

Blade 대신 순수 Bash 사용

Envoy.blade.php 파일을 읽을 수 있을 뿐만 아니라, Scotty는 새로운 Scotty.sh 형식을 도입합니다. 모든 라인은 실제 Bash이며, 작업은 # @task 주석이 달린 Bash 함수로 정의됩니다. 매크로는 작업들을 순차적으로 묶어줍니다. 변수는 어디서든 사용할 수 있는 일반 Bash 변수입니다.

전체가 유효한 Bash이기 때문에 헬퍼 함수, $(date +%Y%m%d-%H%M%S) 같은 계산값, 그리고 일반적으로 사용하는 모든 쉘 구문을 활용할 수 있습니다. Blade 지시문, PHP @setup 블록, {{ $variable }} 같은 인터폴레이션은 필요 없습니다.

명령줄에서 변수를 전달할 수도 있습니다. scotty run deploy --branch=develop을 실행하면 $BRANCH 변수가 작업 내에서 사용 가능해지며, 키는 자동으로 대문자로 변환됩니다.

사용 가능한 모든 작업과 매크로를 보려면 scotty tasks를 실행합니다:

scotty tasks

일시 정지, 재개 및 프리턴드 모드

실행 중 언제든 p 키를 눌러 현재 작업이 끝난 뒤 일시 정지할 수 있습니다. Enter 키로 재개하거나 Ctrl+C 로 취소합니다. 이는 배포 중간에 서버에서 무언가를 확인하고 싶을 때 유용합니다.

Pause and resume

또한 프리턴드 모드(scotty run deploy --pretend)를 사용하면 실제로 명령을 실행하지 않고 어떤 SSH 명령이 실행될지 정확히 확인할 수 있으며, 요약 모드(scotty run deploy --summary)는 작업 출력을 숨기고 결과만 보여줍니다.

doctor 로 설정 검증하기

새 서버에 처음 배포하기 전에 scotty doctor를 실행해 설정을 검증합니다. 파일 구문을 확인하고 각 서버에 대한 SSH 연결을 검사하며, 원격 머신에 php, composer, node, git 같은 도구가 설치되어 있는지 확인합니다.

scotty doctor

Envoy에서 마이그레이션

이미 Laravel Envoy를 사용 중이라면 Scotty가 Envoy.blade.php 파일을 그대로 읽을 수 있으므로 별도 변경이 필요 없습니다. scotty run deploy만 실행하면 바로 동작합니다. 이후 필요에 따라 Scotty.sh 형식으로 점진적으로 마이그레이션하거나 Blade를 계속 사용할 수 있습니다.

이 모든 것이 처음이라면, 문서의 Your first deploy script 페이지에서 단계별로 자세히 안내합니다.

마무리

Scotty는 터미널에서 배포 스크립트와 기타 SSH 작업을 실행할 수 있는 깔끔하고 현대적인 방법을 제공합니다. 순수 Bash, 아름다운 출력, 그리고 모든 단계에 대한 완전한 제어를 제공합니다.

전체 문서는 우리 문서 사이트에서 확인할 수 있으며, 소스 코드는 GitHub에서 확인할 수 있습니다. 이는 우리가 Spatie에서 만든 많은 도구와 패키지 중 하나입니다. 우리의 오픈‑소스 작업을 지원하고 싶다면, 유료 제품 중 하나를 구매하는 것을 고려해 주세요.

0 조회
Back to Blog

관련 글

더 보기 »