본문으로 건너뛰기

개요

빌드, 릴리즈, 실행 원칙은 세 단계를 분리하라는 뜻입니다. 빌드는 소스를 실행 가능한 산출물로 만들고, 릴리즈는 산출물과 환경 설정을 결합하며, 실행은 특정 환경에서 프로세스를 시작합니다.

HandStack에서는 이 구분이 특히 중요합니다. ack 호스트, 기본 모듈, CLI 도구, 계약 파일, 정적 자산이 함께 배포되기 때문에 빌드와 실행을 섞으면 어떤 파일이 운영에 반영되었는지 추적하기 어렵습니다.

HandStack의 단계​

HandStack 메인 저장소는 단계별 스크립트를 제공합니다.

  • install: 개발과 실행에 필요한 패키지와 기본 파일 준비
  • build: 솔루션과 모듈을 Debug 기준으로 빌드
  • publish: OS와 아키텍처 기준의 배포 산출물 생성
  • assemblies: 공통 어셈블리 정리
  • 모듈별 task: 계약 파일 복사, 실행, 정리, 인증서, 프로세스 제어 등

각 작업은 .bat, .ps1, .sh 형태로 제공될 수 있습니다. Windows만 운영하더라도 PowerShell 스크립트를 기준으로 자동화하면 운영체제 차이를 줄이기 쉽습니다.

산출물 기준​

배포 산출물은 보통 다음 구조를 가집니다.

handstack/
├─ app/
├─ assemblies/
├─ modules/
├─ tools/
└─ contracts/

현재 publish.bat, publish.ps1, publish.sh은 ack를 app/으로, 모듈을 modules/로, CLI 도구를 tools/로, 공통 인프라 DLL을 assemblies/로 게시합니다. publish 모드에서는 대상 RID의 framework-dependent 단일 파일 ack(ack.exe 또는 ack)을 만들므로 별도 ack.dll은 만들지 않으며, 실행 서버에는 해당 .NET 런타임이 필요합니다. ACK의 계약 정리 경로도 실행 파일의 존재 여부와 무관하게 app/의 부모인 HANDSTACK_HOME에서 계산합니다. agent/deploy/forbes를 별도 hosts/ 디렉터리로 게시하는 구문은 현재 주석 처리되어 있어 기본 산출물에는 포함되지 않습니다. 운영 서버에서는 이 산출물과 환경 설정을 결합하여 실행합니다. 서버에서 소스를 직접 빌드할 수도 있지만, 운영 원칙상 재현 가능한 산출물을 만들고 그 산출물을 배포하는 흐름이 더 안전합니다.

마치며​

빌드, 릴리즈, 실행을 분리하면 장애 분석이 쉬워집니다. 신규 개발자는 "어떤 소스를 빌드했는지", "어떤 설정과 결합했는지", "어떤 프로세스로 실행했는지"를 항상 구분해서 기록해야 합니다.