4.버전 관리

Edit

"4.1 버전 관리란?"에서는 버전관리의 개념과 필요성에 대해 설명합니다.

"4.2 MiUpdater에 의한 버전 관리"에서는 MiUpdater를 사용해 MiPlatform을 최신버전으로 유지하는 방법에 대해 설명합니다.

"4.3 MiPlatform에 의한 화면 버전 관리"에서는 MiPlatform에서 효율적인 버전관리를 위해 제공되는 Cache기능에 대한 설명과 사용법에 대해 설명합니다.

4.1버전 관리란?

이 문서에서 의미하는 버전이란 서비스(소프트웨어) 제공자(개발자)가 제공하는 특정시점을 표현한 것을 의미합니다.

이 문서에서 의미하는 버전 관리란 서비스 제공자(개발자)가 제공하는 모든 서비스가 제공자(개발자)가 의도한 버전으로 사용자에게 제공 되도록 관리 하는 것입니다. 따라서 버전 관리는 사용자에게 최신의 버전을 제공하는 것과 같은 의미로 해석 됩니다.

버전에는 제품 버전, 모듈의 파일 버전, 배포 버전, 화면 버전등 대상에 따라 다른 버전 값을 가지게 됩니다. 예를 들어 MiUpdater의 -V(Version)옵션으로 입력되는 값은 MiPlatform의 제품 버전이고, Update List File에 Version 태그의 값은 모듈의 파일 버전 또는 배포 버전이 됩니다.

버전 관리의 주체는 관리자(개발자)이며, MiUpdater 및 MiPlatform에서는 버전 관리를 위한 기능을 제공하게 됩니다.

버전 관리는 효율적으로 최신의 버전을 유지 하는 것이 목적이므로, 서비스 되는 버전과 현재 사용중인 버전을 알고 있어야 최소한의 동작을 통해 최신 버전으로 유지할 수 있습니다. "4.2 MiUpdater에 의한 버전 관리"와 "4.3 MiPlatform에 의한 화면 버전 관리"에서는 버전 관리를 위한 각각의 기능과 관리를 위한 정보에 대해 설명합니다.

4.2MiUpdater에 의한 버전 관리

MiUpdater는 버전 관리를 위해 MiPlatform과 함께 제공되는 소프트웨어 입니다.

MiUpdater의 역할은 MiPlatform에서 사용해야 되는 모듈을 MiPlatform을 사용하기 전에 사용자 장치에 설치 되어 있도록 하는 것 입니다. 다만, MiPlatform을 사용할 때마다 MiPlatform을 다시 설치하는 것은 비효율 적이므로 MiUpdater에는 MiPlatform의 버전을 관리 하기 위한 기능이 포함되어 있습니다.

MiUpdater는 MiPlatform의 Engine 및 Browser에 대해 당사(TOBESOFT)에서 제공하는 MSI(Microsoft Installer)패키지 단위로 관리해야 합니다. MiPlatform의 위한 Component나 Image Resource, 화면, StartXML에 대해서는 파일 단위로 관리를 해야 합니다.

MiPlatform에 삽입(embedding)하거나, MiPlatform을 사용하는 별도의 소프트웨어에 대해서는 당사(TOBESOFT)에서 배포에 대한 일체의 책임을 지지 않습니다. 다만, 배포를 보조하기 위한 기능을 MiUpdater에서 제공하며, 제공된 기능에 대한 기술적인 안내를 제공합니다.

MiUpdater는 배포를 보조하는 프로그램이며, 시스템 관리 목적의 권한 제한에 의한 배포의 실패에 대해서는 해당 사용자 장치의 관리자와 협의 되어야 합니다.

4.2.1MiUpdater의 버전 관리 동작

개요

그림 4-1MiUpdater의 동작 개요

효율적인 버전 관리가 이루어 지기 위해서는 제공될 파일의 버전 정보와, 설치된 파일의 버전 정보가 필요합니다. 따라서 MiUpdater는 서버에서 받아 설치한 모듈의 버전 정보(Update Info File과 Update List File의 형식으로 저장함)를 사용자 장치에 저장합니다.

사용자 장치와 서버의 정보가 일치 한다면 서버의 파일 및 정보가 갱신될 때 설치 작업 없이 MiPlatform을 실행 하게 됩니다.

설치 작업은 설치 대상파일(MSI, CAB, DLL, EXE등)을 서버에서 다운로드 받아 사용자 장치에 배치, 가공 하는 동작입니다. 설치 작업의 단계에 따라서 MiUpdater는 설치된 파일의 정보도 함께 갱신(저장)하게됩니다.

MSI 패키지단위 관리

그림 4-2MSI버전 관리 방식 개요

MSI란 Microsoft Installer의 약자로, Microsoft사에서 Windows 시스템에 응용 프로그램을 설치할 때 사용하도록 제작된 설치 관리자입니다. MSI는 MSP(Microsoft Patch)라는 형태의 업데이트 패키지를 지원합니다. MSP는 MSI로 설치된 패키지의 파일을 갱신하고 PC에 설치된 패키지의 Product Version도 갱신하게 됩니다.

MiUpdater에서 MSI를 설치하기 위해서는 Product Code와 Product Version이 필요합니다.

MiUpdater의 버전 정보에 MSI와 MSP의 페어로된 패키지에 대해서 MSP가 설치 가능한 Product Version을 OLD VERSION이라고 지칭합니다.

버전 정보에 Product Code를 <TARGET>태그의 값으로 입력하고, Product Version을 <VERSION>태크의 값으로 입력해 이를 활용하게 됩니다. <OLDVERSION>에는 OLD VERSION의 값이 입력해야 됩니다. ( <ACTION>태그에 "MSI"로 선택시, 입력값은 "3.2.4 Update List File"을 참고 하십시오. )

설치를 하는 경우 "정보 비교"동작에서 OLD VERSION을 활용해 MSP와 MSI중에 선택을 하게 됩니다. 이 동작에서 MiUpdater는 설치된 실제 버전과 비교를 하게 되며, 사용자 장치에 저장된 버전 정보의 <VERSION>태그의 값을 비교하지 않습니다.

모듈 파일 단위 관리

그림 4-3모듈 파일 단위 관리 방식 개요

MiUpdater는 모듈 파일 단위로 관리하는 기능이 제공 됩니다.

((<ACTION>태그에 값에 따른 입력값 및 동작 방식은 "3.2.4 Update List File"을 참고 하십시오.)

설치될 파일의 버전에 "System::"키워드가 앞에 있고 대상 파일이 DLL, EXE와 같이 FILEVERSION정보를 가지고 있다면 실제 파일에 기록된 파일 버전을 사용합니다. 일반적으로 파일 버전은 "a,b,c,d"(a,b,c,d는 모두 숫자)로 지정됩니다.

ex) "System::2009.7.1.1."

"System::"키워드가 없다면 버전 정보에 기록된 버전에 의존하여 처리하게 됩니다.

4.2.2버전 변경 작업

MiPlatform이 패치되는 경우 일반적으로 다음과 같은 작업 순서를 통해 버전정보를 변경하게 됩니다.

1

당사로부터 제공 받은 버전의 정보를 확인합니다.

당사(TOBESOFT)에서는 MiPlatform의 업데이트된 버전을 제공시 각 설치본 또는 파일에 대한 정보를 함께 제공합니다.(MSI의 Product Version, Product Code, File Version 등.) 일부 정보는 Windows의 시스템을 통해 확인 할 수 있으며, 일부 정보는 문서의 형태로 제공 됩니다.

2

제공 받은 버전에 맞도록 버전 정보파일(Update Info File 또는 Update List File)을 갱신 합니다.

3

테스트용 WebServer에 제공받은 버전과 갱신된 버전 정보 파일을 Upload하여 배포 테스트를 합니다.

Update List File 및 Update Info File이 정상적으로 작성되었는지 여부를 확인하기 위한 테스트입니다.

4

실제 운영중인 WebServer에 제공받은 버전과 갱신된 버전 정보 파일 Upload합니다.

5

배포 및 운영에 문제가 없는지 최종 확인을 합니다.

MiPlatform의 Engine및 Browser는 MSI또는 MSP의 형태로 패키징 되어 제공됩니다. 제공된 형태의 패키지를 사용하지 않고 MiPlatform을 설치 하는 경우 설치 과정에 문제가 발생할 수 있으며, 해당 문제에 대해서는 당사(TOBESOFT)에서 일체의 책입을 지지 않습니다.

MiPlatform과 연계하여 동작하는 소프트웨어의 설치에 대해서는 해당 소프트웨어 개발사의 안내에 따라 배포 방법을 선택해 주십시오.

MiUpdater에서는 cab과 msi형태로 제작된 패키지에 대해 설치를 진행하고, 관리할 수 있는 기능이 포함되어 있습니다.

ActiveX 또는 COM형태로 제작된 모듈에 대해 MiUpdater에서 설치 및 등록 기능을 사용할 수 있으나, Windows VISTA 및 관리자 권한이 없는 Windows XP SP3 등에서는 설치가 실패함으로 권장하지 않습니다.

MiUpdater에서 제공되는 일부 기능은 PC 또는 PDA에서만 정상 동작하며, 사용상의 제약 사항이 있을 수 있습니다.

버전 정보 파일인 Update Info File, Update List File에 대한 설정 방법은 "3.2.3 Update Info File", "3.2.4 Update List File" 을 참고하십시오.

버전 변경 예제 (Update List File) - MiPlatform Engine 및 Browser

이 예제는 최초로 Patch버전을 제공받은 경우를 가정으로 했으며, 일반적으로는 OLDVERSION및 VERSION정보 만을 설정하면 됩니다.

"기존의 Update List File의 예시"에서 확인할 수 있듯이 기존에 운영 중인 MiPlatform Engine의 버전은 3.30.10이며, "제공 받은 버전에 대한 정보의 예시"에서 새로이 제공된 버전이 동일한 버전인 3.30.10임을 확인합니다.

"제공 받은 버전에 대한 정보의 예시"에서 제공된 MiPlatform_InstallEngine330U.msi와 .msp는 3.30.10에서 3.30.20으로의 패치 버전임을 확인할 수 있습니다. 그러나 "제공 받은 버전에 대한 정보의 예시"에 보면 기존에 제공되던 버전이 3.30.10 임을 확인합니다.

MiPlatform_InstallEngine330U.msi가 업데이트가 필요 하기 때문에 "갱신후 Update List File의 예시"에서 PATCHFILENAME, OLDVERSION을 제공된 정보를 사용해 설정하고, VERSION의 값을 3.30.20으로 변경합니다.

당사로부터 제공 받은 파일의 목록

MiPlatform_InstallBase330.msi
MiPlatform_InstallEngine330U.msi 
MiPlatform_InstallEngine330U.msp
MiPlatform_BasicComponent330U-yyyymmdd.zip
 - [CyGrid.dll, CyTreeView.dll, ...]

제공 받은 버전에 대한 정보의 예시

MiPlatform_InstallBase330.msi
Product Code : {3964575C-D828-4587-AED1-E538EAAFC083}
Product Version : 3.30.10
MiPlatform_InstallEngine330U.msi
Product Code : {65673658-248C-49AC-9EC4-25682074A312}
Product Version : 3.30.20
Old Version : 3.30.10

기존의 Update List File의 예시

<?xml version='1.0' encoding='euc-kr'?>
<root>
    <params> <!--디폴트값설정-->
        <param id='DEVICE' type='string'>WIN32</param> 
        <param id='SOURCE' type='string'>/msi/ </param>
        <param id='ACTION' type='string'>MSI</param> 
    </params>
    <dataset id='output'>
        <colinfo id='DEVICE' type='string' size=255/>
        <colinfo id='ACTION' type='string' size=255/>
        <colinfo id='SOURCE' type='string' size=255/>
        <colinfo id='TARGET' type='string' size=255/>
        <colinfo id='FILENAME' type='string' size=255/>
        <colinfo id='PATCHFILENAME' type='string' size=255/>
        <colinfo id='VERSION' type='string' size=255/>
        <colinfo id='OLDVERSION' type='string' size=255/>
        <colinfo id='STATUS' type='string' size=2/>
        <colinfo id='ARGUMENT' type='string' size=255/>
        <record>
            <FILENAME>MiPlatform_InstallBase330.msi</FILENAME>
            <TARGET>{3964575C-D828-4587-AED1-E538EAAFC083}</TARGET>
            <VERSION>System::3.30.10</VERSION>
        </record>    
        <record>
            <FILENAME>MiPlatform_InstallBase330.msi</FILENAME>
            <TARGET>{3964575C-D828-4587-AED1-E538EAAFC083}</TARGET>
            <VERSION>System::3.30.10</VERSION>
        </record>    
    </dataset>
</root>

갱신후 Update List File의 예시

<?xml version='1.0' encoding='euc-kr'?>
<root>
    <params> <!--디폴트값설정-->
        <param id='DEVICE' type='string'>WIN32</param> 
        <param id='SOURCE' type='string'>/msi/ </param>
        <param id='ACTION' type='string'>MSI</param>
        <param id='ARGUMENT' type='string'>/qb</param>
    </params>
    <dataset id='output'>
        <colinfo id='DEVICE' type='string' size=255/>
        <colinfo id='ACTION' type='string' size=255/>
        <colinfo id='SOURCE' type='string' size=255/>
        <colinfo id='TARGET' type='string' size=255/>
        <colinfo id='FILENAME' type='string' size=255/>
        <colinfo id='PATCHFILENAME' type='string' size=255/>
        <colinfo id='VERSION' type='string' size=255/>
        <colinfo id='OLDVERSION' type='string' size=255/>
        <colinfo id='STATUS' type='string' size=2/>
        <colinfo id='ARGUMENT' type='string' size=255/>
        <record>
            <FILENAME>MiPlatform_InstallBase330.msi</FILENAME>
            <TARGET>{3964575C-D828-4587-AED1-E538EAAFC083}</TARGET>
            <VERSION>system::3.30.10</VERSION>
        </record>    
        <record>
            <FILENAME>MiPlatform_InstallBase330U.msi</FILENAME>
            <PATCHFILENAME>MiPlatform_InstallBase330U.msp</PATCHFILENAME>
            <TARGET>{3964575C-D828-4587-AED1-E538EAAFC083}</TARGET>
            <VERSION>system::3.30.20</VERSION>
            <OLDVERSION>3.30.10</OLDVERSION>
        </record>    
    </dataset>
</root>

버전 변경 예제 (Update List File) - 컴포넌트

이 예제는 최초로 Patch를 제공받은 경우를 가정으로 했으며, 일반적으로는 OLDVERSION및 VERSION정보 만을 설정하면 됩니다.

위의 예제인 "버전 변경 예제 (Update List File) - MiPlatform Engine 및 Browser"같은 관점에서 제공된 파일의 버전과 현재 서비스 중인 파일의 버전인 2007.3.9.1버전의 CyGrid.dll을 2007.4.1.1버전으로 갱신 하면 됩니다.( "갱신후 Update List File의 예시"에서 표시된 부분)

당사로부터 제공 받은 파일의 목록

MiPlatform_BasicComponent330U-yyyymmdd.zip
[
CyGrid.dll ( File Version : 2009.7.1.1 ),
CyTreeView.dll ( File Version : 2009.8.19.1),
...
]

기존의 Update List File의 예시

<?xml version='1.0' encoding='euc-kr'?>
<root>
    <params> <!--디폴트값설정-->
        <param id='DEVICE' type='string'>WIN32</param>
        <param id='SOURCE' type='string'>/component/ </param>
        <param id='ACTION' type='string'>DOWN</param>
        <param id='TARGET' type='string'>%COMPONENT%</param>
    </params>
    <dataset id='output'>
        <colinfo id='DEVICE' type='string' size=255/>
        <colinfo id='ACTION' type='string' size=255/>
        <colinfo id='SOURCE' type='string' size=255/>
        <colinfo id='TARGET' type='string' size=255/>
        <colinfo id='FILENAME' type='string' size=255/>
        <colinfo id='PATCHFILENAME' type='string' size=255/>
        <colinfo id='VERSION' type='string' size=255/>
        <colinfo id='OLDVERSION' type='string' size=255/>
        <colinfo id='STATUS' type='string' size=2/>
        <colinfo id='ARGUMENT' type='string' size=255/>
        <record>
            <FILENAME>CyGrid.dll</FILENAME>
            <VERSION>system::2009.3.9.1</VERSION>
        </record>    
        <record>
            <FILENAME>CyTreeView.dll</FILENAME>
            <VERSION>system::2009.3.19.1</VERSION>
        </record>    
    </dataset>
</root>

갱신후 Update List File의 예시

<?xml version='1.0' encoding='euc-kr'?>
<root>
    <params> <!--디폴트값설정-->
        <param id='DEVICE' type='string'>WIN32</param>
        <param id='SOURCE' type='string'>/component/ </param>
        <param id='ACTION' type='string'>DOWN</param>
        <param id='TARGET' type='string'>%COMPONENT%</param>
    </params>
    <dataset id='output'>
        <colinfo id='DEVICE' type='string' size=255/>
        <colinfo id='ACTION' type='string' size=255/>
        <colinfo id='SOURCE' type='string' size=255/>
        <colinfo id='TARGET' type='string' size=255/>
        <colinfo id='FILENAME' type='string' size=255/>
        <colinfo id='PATCHFILENAME' type='string' size=255/>
        <colinfo id='VERSION' type='string' size=255/>
        <colinfo id='OLDVERSION' type='string' size=255/>
        <colinfo id='STATUS' type='string' size=2/>
        <colinfo id='ARGUMENT' type='string' size=255/>
        <record>
            <FILENAME>CyGrid.dll</FILENAME>
            <VERSION>system::2007.4.1.1</VERSION>
        </record>    
        <record>
            <FILENAME>CyTreeView.dll</FILENAME>
            <VERSION>system::2007.3.19.1</VERSION>
        </record>    
    </dataset>
</root>

4.3MiPlatform에 의한 화면 버전 관리

MiPlatform을 실행하는 동안에 화면 및 서비스 로직 XML이 변경된 경우, 해당 파일을 다운로드하여 버전을 관리합니다.

그림 4-4MiPlatform에 의한 화면 버전 관리

MiPlatform은 Caching을 통해 화면 및 서비스 로직 XML의 버전을 관리합니다.

MiPlatform이 실행되면 Caching의 방법 중 Session을 이용하여 StartXML을 다운로드한 후 StartXML을 분석합니다. Application Group별 CacheLevel에 따라서 화면 및 서비스 로직 XML의 버전을 관리합니다.

Caching을 통해 MiPlatform의 통신 패킷양을 줄일 수 있습니다. 개발자는 사용자들에게 제공되는 서비스에 따라 적절한 Caching 방법을 선택해야 합니다. 사용자의 PC에 저장된 Cache 내용은 압축된 상태이므로 Data를 확인할 수 없습니다. 하지만 개발자들이 사용하는 MiSimulator를 사용하면 Cache 내용이 압축되지 않고 그대로 저장되어 Data 내용을 확인할 수 있습니다.

Caching 종류에는 Static, Dynamic, Session, None이 있으며, 사용자 환경에 맞는 Caching 방법을 선택하여 효율적으로 버전을 관리할 수 있습니다.

4.3.1Caching 종류

Version 정보가 바뀌어 Caching이 시작되면 AppGroup(DataGroup)의 Cache 파일이 모두 삭제됩니다.

Static Caching

Static Caching은 AppGroup의 Version 정보가 변경될 때마다 해당 Script를 다운로드하는 방법입니다.

화면 Script 또는 Data Script가 Cache에 존재하지 않으면 다운로드하여 Cache 폴더에 저장합니다. 하지만 Cache에 화면 Script 또는 Data script가 이미 있는 경우에는 화면 Script 또는 Data script를 요청하지 않습니다.

따라서 Static Cashing의 경우, Local Cache의 정보를 이용하므로 통신량이 없습니다.

Dynamic Caching

Dynamic Caching은 Script에서 호출할 때마다 매번 Web Server의 변경 사항을 체크한 후 변경된 사항이 있는 경우에 다운로드 합니다.

화면 Script 또는 Data Script 요청 시, 미리 저장된 cache 파일의 etag와 수정날짜를 Web Server에 보내 수정된 날짜를 비교합니다. 변경된 사항이 있으면 해당 화면 Script 또는 Data script를 Web Server에서 다운로드 합니다. 변경된 사항이 없으면 이전에 다운로드한 파일을 loading하여 사용합니다. Web server에 etag 또는 수정된 날짜 정보가 http header에서 제공되는 경우에만 Dynamic Caching을 사용할 수 있습니다.

개발자용 MiSimulator를 실행하는 경우, 수정된 소스를 바로 반영하기 위해 CacheLevel값과 상관없이 무조건 Dynamic 형태로 처리됩니다.

Dynamic은 Internet explorer의 cache 방법과 동일합니다.

Session Caching

Session Caching은 Script 호출 시 Web Server에 변경 사항을 체크한 후 변경된 사항이 있는 경우에만 다운로드하며, MiPlatform이 종료될 때까지 같은 Script에 대한 변경 사항을 체크하지 않는 방법입니다.

화면 Script 또는 Data Script 요청 시, 미리 저장된 cache 파일의 etag와 수정 날짜를 Web Server에 보내 수정된 날짜를 비교합니다. 변경된 사항이 있으면 해당 화면 Script 또는 Data script를 Web Server에서 다운로드 합니다. 변경된 사항이 없으면 이전에 다운로드한 파일을 loading하여 사용합니다. Web server에 etag 또는 수정된 날짜 정보가 http header에서 제공되는 경우에만 Session Caching을 사용할 수 있습니다.

Dynamic과 Session의 차이점은 Dynamic은 화면이 바뀌면 Script를 매번 요청하지만, Session은 같은 화면 Script 또는 같은 Data script에 대해서 요청한 후, 프로그램이 종료되기 전까지는 다시 Script를 요청하지 않습니다.

Session은 변경된 파일만 자동으로 다운로드하게 되므로 Dynamic 보다 통신량을 줄일 수 있습니다.

None Caching

None Caching은 Script를 Caching하지 않는 방법입니다.

화면 Script 또는 Data Script를 Cache 하지 않기 때문에 실행 시마다 매번 화면 Script 또는 Data script를 다시 다운로드 합니다. 업무 상 Cache 정보를 남기고 싶지 않은 경우에 사용합니다. 또한 Cache 정보를 남기지 않아서 파일 입출력이 없으므로 통신량을 줄일 수 있습니다.

Cache된 내용을 보호하려면 PID에서 화면 Script 또는 Data Script를 배포할 때, Compiled XML 형태로 변환시킨 후 서버에 올려놓습니다.

4.3.2Cache 설정 방법

StartXML의 AppGroup별로 CacheLevel 값을 설정합니다.

StartXML File의 예제

...
<AppGroups>
    <DataGroup Baseurl="http://10.46.123.26:8080/K4C/xerosware" CacheLevel="none" CodePage="euc-kr" Prefix="reportsvc" Type="JSP" Version="1000"/>
    <DataGroup Baseurl="http://localhost:8080/TestWeb/TestMi/service/" CacheLevel="dynamic" CodePage="euc-kr" Prefix="testdata" Type="JSP" Version="1000"/>
    <DataGroup Baseurl="http://10.46.123.27:8080/K4P/xerosware" CacheLevel="none" CodePage="euc-kr" Prefix="dbsrv" Type="JSP" Version="1000"/>

    <AppGroup CacheLevel="session" CodePage="euc-kr" Ext="xml" Prefix="pilot" Type="form" Version="1000">
        <script Baseurl="./pilot/Win32/" CacheLevel="session" Ext="xml" ScriptUrl="./pilot/Script/" version="1000"/>
    </AppGroup>
    <AppGroup CacheLevel="static" CodePage="euc-kr" Ext="xml" Prefix="Report" Type="file" Version="1000">
        <Script Baseurl="./Report/" CacheLevel="dynamic" Ext="xml"/>
    </AppGroup>
</AppGroups>
...

4.3.3Cache의 저장경로와 저장 형태

Caching된 정보는 MiPlatform 레지스트리의 CacheDir에 해당 AppGroup별로 압축되어 저장됩니다. 압축된 Cache 정보는 눈으로 소스를 확인할 수 없습니다.

그림 4-5cache 저장 경로와 저장 형태