산업 현장에는 수집 스크립트, 프로토콜 변환 데몬, 타사 바이너리 등 전통적인 방식으로 실행되는 프로그램이 많습니다. 과거에는 각각 수동으로 시작했으며 장애를 알아차리지 못하기도 했습니다. JelinaOS는 이를 **프로그램 집합(ProgramSet)**이라는 통합 선언형 관리 체계에 포함하여 “구성만으로 관리, 장애 시 자동 복구, 시스템 부팅 시 자동 시작”을 제공합니다.
ProgramSet이란?
섹션 제목: “ProgramSet이란?”ProgramSet은 비컨테이너 애플리케이션의 집합이며 각 애플리케이션은 선언형 구성으로 다음을 기술합니다.
- 시작 방식: 명령, 작업 디렉터리와 실행 계정.
- 프로그램 소스: Release 구성의 다운로드 주소에서 프로그램 패키지를 가져옵니다.
- 실행 정책: 재시작 정책, 환경 변수와 종료 신호.
- 의존 관계: 시작 순서, 상호 배타 관계와 강한/약한 의존성.
- 실행 감독 기능: 재시작 제한, 종료 후 상태 유지와 실행 전후 명령.
구성 후 시스템이 애플리케이션을 통합 관리하므로 시작 스크립트를 수동 작성할 필요가 없습니다.
구성 진입점
섹션 제목: “구성 진입점”ProgramSet은 클라우드 또는 로컬 관리 인터페이스에서 구성하고 장치 에이전트가 실행합니다.
| 진입점 | 적합한 시나리오 | 설명 |
|---|---|---|
| 클라우드 Release(권장) | JelinaCloud 연결 | Release 생성 시 ProgramSet을 선언하고 Release와 함께 장치에 일괄 전달 |
| 로컬 관리 인터페이스 | 로컬 / 격리 환경 | 장치 로컬 관리 인터페이스로 대상 구성 전달 |
빠른 시작
섹션 제목: “빠른 시작”다음은 클라우드 Release에서 ProgramSet을 선언하는 예제입니다. 프로그램 패키지는 다운로드 주소로 배포됩니다.
programs: collector: uri: http://files.example.com/collector/collector.tar.gz # 프로그램 패키지 다운로드 주소 command: collector --config /data/collector.conf running: true restart: always environment: SITE_ID: plant-01 working_directory: /opt/collector user: rootcommand: 시작 명령(필수).running: 실행 여부. 기본값은true.restart: 재시작 정책.always는 비정상 종료 후 자동 재시작을 의미합니다.environment: 환경 변수.working_directory: 작업 디렉터리.
자주 사용하는 구성
섹션 제목: “자주 사용하는 구성”| 구성 | 설명 |
|---|---|
uri |
프로그램 패키지 다운로드 주소 |
command |
시작 명령(필수) |
running |
실행 여부. 기본값 true |
restart |
재시작 정책: no / on-failure / always 등 |
environment |
환경 변수 |
working_directory |
작업 디렉터리 |
user / group |
실행 계정 |
after / before, wants / requires, conflicts |
의존성과 순서 |
start_limit_*, remain_after_exit, exec_start_* 등 |
실행 감독과 복구 동작 |
전체 필드 설명은 docker-compose 호환성과 확장을 참조하세요.
고급 구성: 부팅 시 자동 시작과 조건 검사
섹션 제목: “고급 구성: 부팅 시 자동 시작과 조건 검사”programs: myapp: command: run.sh restart: always Install: WantedBy: multi-user.target # 부팅 시 자동 시작 Unit: ConditionPathExists: /data/app/config.json # 조건 확인: 설정 파일이 있을 때만 시작관리 작업
섹션 제목: “관리 작업”ProgramSet 애플리케이션은 장치 에이전트가 통합 관리하며 시스템 서비스로 매핑되어 실행됩니다. 조회·조작 시 서비스 이름은 시스템 명명 규칙을 따릅니다. 실제 이름은 장치 상태 명령으로 확인할 수 있습니다.
systemctl status <ProgramSet_서비스_이름> # 상태 확인(서비스 이름은 장치에 표시된 이름 기준)systemctl restart <ProgramSet_서비스_이름> # 재시작systemctl stop <ProgramSet_서비스_이름> # 중지적합한 시나리오
섹션 제목: “적합한 시나리오”- 기존 산업용 프로그램: 수집, 제어와 통신 데몬의 현대적인 관리.
- 스크립트와 도구 체인: 임시 스크립트를 정식 관리에 포함하고 장애 시 자동 복구.
- 혼합 아키텍처: 컨테이너 애플리케이션과 같은 오케스트레이션 체계에서 협력.
컨테이너 애플리케이션과의 선택 기준
섹션 제목: “컨테이너 애플리케이션과의 선택 기준”| 시나리오 | 권장 방식 |
|---|---|
| 하드웨어를 직접 호출해야 하며 실시간 요구가 높음 | 네이티브 애플리케이션(ProgramSet) |
| 기존 프로그램 자산이 있으며 이전 비용에 민감함 | 네이티브 애플리케이션(ProgramSet) |
| 여러 언어·의존성을 사용하며 환경 격리가 필요함 | 컨테이너 애플리케이션 |
| 현대적인 마이크로서비스 아키텍처와 빠른 반복 개발 | 컨테이너 애플리케이션 |