콘텐츠로 이동
공식 웹사이트로 돌아가기

네이티브 애플리케이션과 ProgramSet

산업 현장에는 수집 스크립트, 프로토콜 변환 데몬, 타사 바이너리 등 전통적인 방식으로 실행되는 프로그램이 많습니다. 과거에는 각각 수동으로 시작했으며 장애를 알아차리지 못하기도 했습니다. JelinaOS는 이를 **프로그램 집합(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: root
  • command: 시작 명령(필수).
  • 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 애플리케이션은 장치 에이전트가 통합 관리하며 시스템 서비스로 매핑되어 실행됩니다. 조회·조작 시 서비스 이름은 시스템 명명 규칙을 따릅니다. 실제 이름은 장치 상태 명령으로 확인할 수 있습니다.

Terminal window
systemctl status <ProgramSet_서비스_이름> # 상태 확인(서비스 이름은 장치에 표시된 이름 기준)
systemctl restart <ProgramSet_서비스_이름> # 재시작
systemctl stop <ProgramSet_서비스_이름> # 중지
  • 기존 산업용 프로그램: 수집, 제어와 통신 데몬의 현대적인 관리.
  • 스크립트와 도구 체인: 임시 스크립트를 정식 관리에 포함하고 장애 시 자동 복구.
  • 혼합 아키텍처: 컨테이너 애플리케이션과 같은 오케스트레이션 체계에서 협력.

컨테이너 애플리케이션과의 선택 기준

섹션 제목: “컨테이너 애플리케이션과의 선택 기준”
시나리오 권장 방식
하드웨어를 직접 호출해야 하며 실시간 요구가 높음 네이티브 애플리케이션(ProgramSet)
기존 프로그램 자산이 있으며 이전 비용에 민감함 네이티브 애플리케이션(ProgramSet)
여러 언어·의존성을 사용하며 환경 격리가 필요함 컨테이너 애플리케이션
현대적인 마이크로서비스 아키텍처와 빠른 반복 개발 컨테이너 애플리케이션