본문으로 건너뛰기

개요

종속성 원칙은 애플리케이션이 필요로 하는 라이브러리, 런타임, 도구를 암묵적으로 기대하지 말고 명시적으로 관리해야 한다는 뜻입니다. 서버에 우연히 설치되어 있는 DLL, Node 패키지, CLI 도구에 기대면 신규 개발자 PC와 운영 서버에서 서로 다른 결과가 나옵니다.

HandStack은 ASP.NET Core, Node.js, 정적 웹 라이브러리, 모듈 DLL, CLI 도구, 운영 스크립트가 함께 동작합니다. 따라서 종속성은 NuGet 패키지나 npm 패키지만 의미하지 않습니다.

HandStack에서의 종속성

HandStack의 주요 종속성은 다음 범주로 나뉩니다.

  • 런타임: .NET SDK/Runtime, ASP.NET Core Hosting Bundle, Node.js
  • 패키지: NuGet, npm, 정적 웹 라이브러리
  • 모듈 산출물: 기본 모듈과 업무 모듈의 DLL, module.json, Contracts, wwwroot
  • 운영 도구: IIS, pm2, Docker, Jenkins 또는 동등한 자동화 도구
  • 파일 동기화 도구: Windows의 robocopy, Linux/macOS의 rsync
  • 관리 스크립트: .bat, .ps1, .sh

종속성은 실행 환경과 배포 방식에 따라 달라질 수 있습니다. 하지만 어떤 환경에서도 "무엇이 필요하고 어디에서 설치되는지"는 문서와 스크립트로 설명 가능해야 합니다.

신규 개발자가 알아야 할 점

HandStack은 루트에 OS별 스크립트를 제공합니다. Windows에서는 .bat 또는 .ps1, Linux/macOS에서는 .sh 또는 PowerShell Core 기반 .ps1을 사용할 수 있습니다. 팀에서는 한 가지 방식을 정해도 되지만, 저장소에는 운영체제별 대안이 함께 존재한다는 점을 이해해야 합니다.

종속성을 추가할 때는 다음 기준을 지킵니다.

  • 서버에 수동 복사한 DLL을 숨은 전제로 만들지 않습니다.
  • 업무 모듈에서 필요한 외부 라이브러리는 빌드와 배포 과정에 포함되도록 합니다.
  • 정적 라이브러리는 공용 wwwroot 모듈과 업무 모듈의 책임을 구분합니다.
  • 개발용 도구와 운영 필수 도구를 구분합니다.
  • 버전 차이가 장애 원인이 될 수 있는 도구는 설치 기준을 문서화합니다.

마치며

종속성 관리는 신규 개발자가 같은 환경을 재현할 수 있게 만드는 일입니다. HandStack에서는 코드뿐 아니라 모듈 파일, 계약 파일, 정적 자산, 운영 스크립트까지 종속성의 일부로 봐야 합니다.