ThingWorx 응용 프로그램 패키징 및 배포 모범 사례
확장을 개발 및 배포하는 동안 다음 모범 사례를 사용하십시오.
깨끗한 플랫폼 인스턴스에서 개발
ThingWorx는 코드를 위한 안전 조치나 샌드박싱을 제공하지 않습니다. 따라서 때로 환경이 불안정해질 수 있습니다. 응용 프로그램이 불안정한 상태가 되지 않도록 하려면 다음을 수행합니다.
개발 프로세스 중 오류가 표시되면 Apache Tomcat 서버를 재시작합니다.
ThingworxStorage 디렉터리를 완전히 제거할지 묻는 메시지가 표시될 수 있습니다. ThingWorxStorage 디렉터리를 제거했을 때 작업이 손실되지 않도록 깨끗한 플랫폼 인스턴스에서 응용 프로그램을 개발하는 것이 좋습니다.
확장의 구조
확장의 아티팩트를 다음 폴더 구조에 ZIP 파일로 패키징해야 합니다.
/metadata.xml - 확장에 대한 정보 및 확장의 다양한 아티팩트에 대한 세부 정보
/Entities/ - 엔티티 유형별로 하위 폴더에 구성된 0개 이상의 엔티티 XML 파일
/lib/ - 확장 및 확장에 필요한 타사 JAR 파일에 대한 사용자 정의 Java 클래스가 포함된 JAR 파일
/ui/ - 매쉬업을 빌드하고 실행하는 데 사용되는 사용자 정의 위젯을 정의하는 파일
응용 프로그램에 대한 여러 개의 확장을 하나의 ZIP 파일에 번들
여러 개의 확장이 포함된 IoT 솔루션을 단일 ZIP 파일로 번들할 수 있습니다. 단일 ZIP 파일은 각 확장에 대한 개별 ZIP 파일을 포함합니다. 따라서 모든 확장이 독립적으로 구현됩니다. 개별 확장은 후속 릴리즈에서 업데이트하기가 더 쉽습니다.
확장 이름 및 버전 규약
확장과 확장 ZIP 파일의 이름을 지정하는 방법에 제한은 없습니다. 단, 확장의 이름을 지정한 후에는 이름을 변경할 수 없습니다. 그러나 ZIP 파일의 이름은 변경할 수 있습니다.
확장과 해당 ZIP 파일에 대해 서로 다른 이름을 지정할 수 있지만 동일한 이름을 지정하는 것이 좋습니다. ZIP 파일 이름에 버전 번호를 포함할 수도 있습니다.
ZIP 파일로 구성된 ZIP 파일로 번들된 여러 개의 확장이 포함된 IoT 솔루션을 만들 수 있습니다. 이 경우 모든 ZIP 파일에 동일한 릴리즈 번호를 지정하는 것이 좋습니다. 두 개의 확장을 포함하는 IoT 솔루션이 있다고 가정해 보겠습니다. 각 확장은 개별 릴리즈 번호를 가진 단일 ZIP 파일입니다. 두 확장의 이름에 동일한 릴리즈 번호를 지정하는 것이 좋습니다. 또한 ZIP 파일로 구성된 ZIP 파일 이름에도 동일한 릴리즈 번호를 지정합니다. 예를 들어, IoT 솔루션의 릴리즈 번호가 7.9이면 모든 ZIP 파일의 이름에서 릴리즈 번호로 7.9를 지정합니다.
metadata.xml 파일의 packageVersion 속성은 확장의 버전을 지정하는 데 사용됩니다. 이 속성은 필수 속성이며 값은 <major>.<minor>.<patch> 형식을 따릅니다. 여기서 버전의 각 부분은 숫자입니다. 확장은 의미 버전 지정 규칙을 따라야 합니다. 자세한 내용은 의미 버전 지정을 참조하십시오.
확장 종속성
이 단원에서는 확장 간의 종속성에 대해 설명합니다.
확장 간 종속성
확장에 다른 확장에 대한 종속성이 있는 경우 metadata.xml 파일의 dependsOn 속성을 사용하여 종속성을 지정하는 것이 좋습니다. 속성 값은 <name>:<major>.<minor>.<patch> 형식의 확장 이름 및 버전의 쉼표로 구분된 목록이고 여기서 버전은 숫자로만 지정됩니다. 예를 들어, dependsOn= "ExtensionOne:2.5.1,ExtensionTwo:1.2.0"입니다.
종속성은 너무 많이 사용하지 않는 것이 좋습니다. 확장에 대한 업그레이드가 있으면 종속된 확장도 영향을 받습니다.
다른 확장과의 긴밀한 연결 방지
확장이 다른 확장과 긴밀하게 연결되지 않도록 해야 합니다.
확장이 새 주 버전으로 업그레이드되어야 하는 다른 확장에 긴밀하게 연결된 경우, 업그레이드를 수행하기 전에 확장과 해당 종속성 체인 전체를 삭제할지 묻는 메시지가 표시됩니다.
긴밀한 연결을 방지하기 위한 가장 좋은 방법은 필요한 기능에 대한 사물과 사물 템플릿을 만드는 것입니다. 이러한 사물 및 사물 템플릿은 확장의 일부가 아니므로 확장 업그레이드에 포함되지 않습니다.
경우에 따라 확장 매쉬업의 다른 확장에 있는 위젯을 사용할 때는 긴밀한 연결을 피하는 것이 어려울 수 있습니다.
확장의 크기
크고 복잡한 확장은 유지 관리 및 업그레이드가 어려울 수 있습니다. 더 좋은 방법은 기능에 따라 확장을 더 작은 구성 요소로 분할하여 유지 관리 및 업그레이드를 용이하게 하는 것입니다. 단일 ZIP 파일에 여러 개의 확장을 번들할 수 있습니다. 자세한 내용은 응용 프로그램에 대한 여러 개의 확장을 하나의 ZIP 파일에 번들 단원을 참조하십시오.
확장에 외부 JAR 파일 사용
ThingWorx를 사용하면 사용자가 자신의 코드에 타사 라이브러리를 포함할 수 있습니다. 그러나 일반 JAR 파일은 사용하지 않는 것이 좋습니다. 대신 SDK와 함께 응용 프로그램에 패키지된 JAR 파일을 사용하십시오. 다음 사항을 고려하십시오.
확장의 /Thingworx/WEB-INF/lib 폴더에 있는 기존 JAR 파일을 사용할 수 있습니다. 그러나 확장에서 외부 JAR 파일을 사용하려는 경우 JAR 파일의 루트 이름이 /Thingworx/WEB-INF/lib 폴더에 있는 다른 JAR 파일과 동일하지 않아야 합니다.
JAR 파일의 루트 이름은 파일 이름에서 첫 번째 문자부터 첫 번째 숫자까지의 이름입니다. 테이블에는 /Thingworx/WEB-INF/lib 폴더에 있는 다음 JAR 파일의 루트 이름이 제공됩니다.
JAR 파일 이름
루트 이름
postgresql-42.2.5.jar
postgresql-
log4j-1.2.17.jar
log
metrics-core-3.1.2.jar
metrics-core-
ThingWorx Platform에서는 여러 소스에서 동일한 JAR 파일을 사용할 수 있습니다.
여러 소스가 동일한 JAR 파일을 사용할 경우 확장을 플랫폼에 업로드하거나 확장을 빌드하는 동안 올바르지 않은 JAR 버전이 사용될 때 충돌이 발생할 수 있습니다.
플랫폼의 이후 버전에서 확장이 계속 작동하려면 확장을 업데이트해야 할 수 있습니다.
고객은 동일한 JAR 파일이 필요한 두 개의 확장을 동시에 사용할 수 없습니다.
엔티티를 편집할 수 없게 설정
매쉬업, 스타일 정의 등의 엔티티를 만들 때 확장의 엔티티가 편집이 불가능한 상태인지 확인하십시오. 편집이 불가능한 엔티티만 즉시 업그레이드할 수 있습니다. 편집이 가능한 엔티티는 업그레이드할 수 없습니다. 기본적으로 새 엔티티는 편집이 불가능합니다.
일부 엔티티를 편집이 가능하게 설정하려면 해당 엔티티만 별도의 확장에 번들하여 확장의 다른 구성 요소를 쉽게 업그레이드할 수 있도록 하십시오.
편집 가능한 엔티티의 경우 매쉬업에서 편집이 가능한 위치를 최소화하는 것이 좋습니다. 편집이 가능한 위치를 최소화하려면 포함된 매쉬업을 사용하십시오.
확장을 사용자 정의할 수 있는 기능을 제공하려는 경우(예: 사용자 정의 로고 추가) 해당 방법이 작동할지 여부를 고려하십시오.
대신 사물의 구성을 사용할 수 있습니까? 편집이 불가능한 사물에도 구성 테이블 변경 내용이 적용될 수 있습니다.
미디어 엔티티 또는 포함된 매쉬업을 제공하기 위해 구성을 조회하는 데 서비스를 사용할 수 있습니까?
편집이 가능한 엔티티가 포함된 확장 업그레이드
편집이 가능한 엔티티가 포함된 확장을 업그레이드하는 동안 마이그레이션 테스트를 수행하여 업그레이드 프로세스 중 태그와 같은 정보가 손실되지 않는지 확인하십시오.
엔티티 구성
프로젝트와 모델 태그를 사용하여 엔티티를 그룹화하는 것이 좋습니다. 확장의 모든 엔티티에 대해 하나의 프로젝트를 사용해야 합니다. 확장의 모든 엔티티에 태그를 지정하는 데 사용할 수 있는 모델 태그를 하나 이상 만드십시오.
삭제하기 전에 스토리지 백업
삭제하기 전에 현재 ThingworxStorage 폴더를 백업하는 것이 좋습니다.
Eclipse 플러그인
Eclipse 플러그인을 사용하면 더 쉽게 확장을 개발하고 빌드할 수 있습니다. 이 플러그인은 소스 파일, 주석 및 메소드를 자동으로 생성하는 작업을 제공합니다. 또한 이 작업은 메타데이터 파일을 업데이트하여 확장의 적절한 구성을 보장합니다. 플러그인은 주석과 메타데이터 파일의 구문 및 형식이 올바르도록 보장합니다.