개요
프로세스 원칙은 애플리케이션을 하나 이상의 독립 실행 프로세스로 실행하고, 프로세스 내부 상태에 장기 데이터를 의존하지 말라는 뜻입니다.
HandStack의 중심 프로세스는 ack입니다. ack는 ASP.NET Core 호스트로 실행되며, 설정에 따라 모듈을 로드하고 정적 파일, 계약 기반 거래, 서버 기능, 로그, 파일 저장소 같은 기능을 제공합니다.
HandStack 프로세스 구조
HandStack 실행 환경에서는 다음 프로세스가 등장할 수 있습니다.
ack: 메인 애플리케이션 호스트agent,deploy,forbes: 목적별 보조 호스트updater: 배포 패키지 확인과 업데이트 적용- CLI 도구:
handstack,bundling,ports,publish-package등 - 외부 프로세스 매니저: IIS, pm2, Docker, systemd 등
프로세스는 언제든 중지되고 다시 시작될 수 있다고 가정합니다. 따라서 중요한 업무 데이터는 프로세스 메모리가 아니라 DB, 파일 저장소, 캐시, 로그, 계약 파일처럼 재구성 가능한 위치에 있어야 합니다.
실행 인자와 모듈 로딩
ack는 실행 인자로 포트, 모듈 목록, 설정 파일을 받을 수 있습니다. 운영 환경에서는 어떤 모듈을 로드하는지, 어떤 설정 파일을 쓰는지 명확해야 합니다.
ack --port=<포트> --modules=<모듈 목록> --appsettings=<설정 파일>
프로세스가 시작될 때 모듈 DLL과 module.json이 함께 읽힙니다. 특정 모듈이 빠지거나 설정이 잘못되면 호스트가 떠도 기능이 정상 동작하지 않을 수 있습니다.
마치며
HandStack에서 프로세스는 모듈을 실행하는 컨테이너입니다. 신규 개발자는 기능 장애를 볼 때 코드만 보지 말고 어떤 프로세스가 어떤 설정과 모듈로 실행 중인지 먼저 확인해야 합니다.