내 오픈소스에 날개를!-(2)WPI를 위한 패키지 제작

안녕하세요. 김대우 입니다. 이번에 소개해 드릴 내용은 지난 글에 이어 WPI 패키지를 실제 구성하는 과정을 진행해 보도록 하겠습니다.
지난 포스트 : 오픈소스에 날개를! - (1)웹 플랫폼 설치 관리자(WPI)를 위한 나의 어플리케이션 패키지

웹 앱 갤러리에 어플리케이션을 올리기 위해서는 반드시 조건에 맞도록 구성된 “패키지” 형태로 제공이 되어야 합니다. 그 전에 이미 실제로 서비스되는 패키지를 가지고 보시면 감이 오실 거에요. 저는 WPI에 올려져 있는 XpressEngine 패키지 파일을 예로 들어 설명을 드리도록 하겠습니다.

샘플로 사용할 XpressEngine WPI Zip 패키지를 다운로드 받는 절차
- “웹 플랫폼 설치 관리자”를 실행합니다. WPI 설치는 앞의 포스트를 참고 하세요.

image
- 웹 응용프로그램에서 XpressEngine을 선택 후 “설치”를 진행합니다.

image
- 맨 위의 다운로드 원본 위치의 패키지 파일을 클릭해 다운로드 합니다.(파일 이름이나 경로는 지속적인 업데이트에 의해 위 화면과 다를 수 있습니다.) 다운로드 하셨으면 해당 Zip 파일을 풀어서 확인해 보세요.

WPI 패키지 파일 및 폴더 구성
자~ 이렇게 해서 XpressEngine이 이용하는 Zip 패키지 Zip 파일을 풀면 이런 폴더 및 파일 구조를 확인 가능하실 거에요.
(폴더)XE
---(파일)install.sql
---(파일)license.text
---(파일)manifest.xml
---(파일)parameters.xml

이 파일들 중에서 WPI 패키지에 이용되는 주요한 설정 파일은 세 개 - install.sql, manifest.xml, parameters.xml 파일입니다. 이어서 폴더는 반드시 이름과 함께 하위 폴더에 넣어 두시면 됩니다. 그럼, 필수 파일들을 열고 봐 보도록 하겠습니다.

참고로, 전체 패키지 파일 구성은 아래처럼 이루어져야 합니다.

MyApp.zip
\
+--MyApp root folder
+--Manifest.xml (필수)
+--Parameters.xml (필수)
+--Install.sql (DB를 이용하는 app일 경우 필수)
    \
     +--MyApp-admin sub folder
     |--MyApp-content sub folder
     |--MyApp-includes sub folder
     |--readme.txt
     |--license.text
     |--web.config (PHP app일 경우에도 IIS에서 기본 이용되기 때문에 필수 입니다.
     |--various other files

manifest.xml 파일 구성

 <MSDeploy.iisApp>
        <iisApp path="xe"/>   기본 어플리케이션 이름입니다.
   <dbmysql
     path="install.sql"        mysql의 sql구문 정보가 처리된 sql 구문입니다. DB생성 및 DB에 대한 사용자 생성 구문이 위치합니다.
     commandDelimiter="//"
     removeCommandDelimiter="true"
     />
   
        <setAcl path="xe" setAclAccess="Modify" setAclUser="anonymousAuthenticationUser" />    폴더의 Permission을 구성합니다
 </MSDeploy.iisApp>

이렇게 보시는 것처럼 구성 자체는 어렵지 않습니다. 라인별로 처리된 설명을 참조 하세요. 하나만 말씀 드릴 부분으로 “setACL”으로 권한을 부여하는 항목이 존재 하는데요. XE의 경우는 XE 설치 문서에서처럼 chmod 777 처리 = 즉, 전체 폴더에 대해서 익명 처리를 진행하게 됩니다. 따라서 XE의 경우는 이렇게 전체 퍼미션이 부여되나, 특정 폴더만 modify이고 다른 폴더는 read만 처리하고 싶을 경우에는 특정 폴더에만 대해서 처리 하는 것도 가능합니다. 참고 : Mambo의 manifest.xml 파일 예시 구성 정보  또는 Joomla의 manifest.xml 파일 예시 구성 정보

참고자료 :

Set ACLs Through the Manifest.xml File

Database Notes for packaging applications for use with the Windows Web App Gallery

install.sql 파일 구성

 USE PlaceholderForDbName;
  
 DROP PROCEDURE IF EXISTS add_user ;
  
 CREATE PROCEDURE add_user()
 BEGIN
 DECLARE EXIT HANDLER FOR 1044 BEGIN END;
 GRANT ALL PRIVILEGES ON PlaceholderForDbName.* to 'PlaceholderForDbUser'@'localhost' IDENTIFIED BY 'PlaceholderForDbPassword';
 FLUSH PRIVILEGES;
 END
 ;
  
 CALL add_user() ;
  
 DROP PROCEDURE IF EXISTS add_user ;

install.sql 파일은 이러한 구조 입니다. 단순히, 해당 DB에 대해 사용자를 생성하고 권한을 부여 한다고 보시면 됩니다. 즉, WPI 설치 과정에 DB가 없으면 생성 해야 할 필요가 있는데요.(DB생성 및 계정 생성 과정도 일반 사용자를 위해 자동화 하기 때문입니다.)

이 과정이 필요할 경우 자동화를 위한 스크립트로 보시면 됩니다.(기존 DB를 이용할 경우에는 필요 없겠지요.) 

혹은 꼭 필요한 다른 WPI상에서 수행 되어야 할 DB 절차가 있다면 여기에 기록 하셔도 되겠지요.

단순해 보이는 구문이지만 하나, 특이한 부분이 있는데요 바로, “PlaceholderForDbName”과 같은 녀석입니다. 보시면 “PlaceholderForXXX” 형태로 되어 있는데 눈치가 빠르신 분은 느끼셨겠지만, WPI 설치 도중에 받는 파라미터 값이 여기 파일의 “PlaceholderForXXX” 값과 치환된다고 보시면 됩니다. – 이게 사실 WPI 패키지 제작 과정 최대 비밀이 아닐까 합니다. ^_^;;;

image

이렇게 WPI 설치 화면에서 받는 파라미터가 parameter.xml 파일에 지정된 대로, 치환 됩니다. 그렇다면 parameter.xml 파일의 구조도 감이 잡히실 거에요. 전달받을 파라미터를 정의하고, 패키지의 특정 위치에 존재하는 파일의 문자열을 받은 파라미터로 치환하는 역할을 수행한다고 보시면 됩니다. 그럼 파라미터 파일도 까 보도록 하시지요.

parameter.xml 파일 구성

 <?xml version="1.0" encoding="utf-8"?>
 <parameters>
   <parameter
     name="AppPath"     기본어플리케이션 경로를 의미합니다.
     defaultValue="Default Web Site/xe"     기본적으로 IIS의 가상디렉토리 이름을 XE로 생성 시킵니다.
     tags="iisapp"
     >
     <parameterEntry
       type="ProviderPath"
       scope="iisapp"
       match="xe"
       />
   </parameter>
   <parameter      권한 부여 처리를 진행합니다.(숨은처리)
     name="SetAcl1"
     defaultValue="{AppPath}"
     tags="Hidden"
     >
     <parameterEntry
       type="ProviderPath"
       scope="setAcl"
       match="xe"
       />
   </parameter>
  
  
   <!-- Database Parameters
   The tags provided here tells the UI being used what type of parameter
   this is.  The UI can then construct an appropriate dialog for the
   database parameters, or fill them in if the user doesn't need to
   provide them
   -->
  
   <!-- This parameter prompts the user for the database server name.  
   Note that this parameter has only one parameterEntry element.
   This parameter is used with the configuration file and the
   connection string.  It is not used within the SQL script itself
   like the other paramters are.
   -->
   <parameter
     name="dbServer"       접속할 DB서버의 기본 값이 localhost이며 mysql 입니다. 이 서버 경로가 xe\config\install.config.php 파일의 
     defaultValue="localhost"           PlaceHolderForDbServer 값을 치환합니다. – 직접 파일을 열고 확인해 보세요.
     tags="MySQL, dbServer"
     >
     <parameterEntry
       type="TextFile"
       scope="xe\\config\\install.config.php"         
       match="PlaceHolderForDbServer"
       />
   </parameter>
  
  
   <!-- Prompts for the admin creds and uses it for the administrator
   connection string. This is used to create a login and assign
   permissions. The MySQL tag indicates it is a parameter required for
   MySQL.
   The DbAdminUsername tag indicates it should be used when the user
   is creating a new database. If they're not, it can be filled in
   with the DbUsername value.  The UI should be able to figure out
   whether or not the user needs to be prompted for this.
   -->
   <parameter
     name="dbAdminUsername"
     defaultValue="root"                     요건 좀 짧은데요. WPI에 미리 정의된 파라미터이기 때문입니다. admin user를 필요로 하는 경우에 처리됩니다.
     tags="MySQL, DbAdminUsername"
     >
   </parameter>
  
   <!-- Prompts for the admin password and uses it for the administrator
   connection string.
   -->
   <parameter
     name="dbAdminPassword"
     tags="Password, MySQL, DbAdminPassword"
     >
   </parameter>
  
   <!-- This parameter prompts the user for the database name.  
   -->
   <parameter
     name="dbName"          DB이름을 처리합니다. 기본값 XE이고, 문자열을 Regular Expresseion으로 일반 DB명이 가능한 문자만 처리 받습니다.
     defaultValue="xe"
     tags="MySQL, dbName"
     >
     <parameterValidation
       type="RegularExpression"
       validationString="^\w{1,16}$"
       />
     <parameterEntry
       type="TextFile"
       scope="install.sql"
       match="PlaceHolderForDbName"
       />
     <parameterEntry
       type="TextFile"
       scope="xe\\config\\install.config.php"                   마찬가지로, install.sql 파일과 config 파일의 문자열과 치환됩니다.
       match="PlaceHolderForDbName"
       />
   </parameter>
  
  
   <parameter
     name="DbUser"
     defaultValue="xeuser"
     tags="MySQL,DbUsername"
     >
     <parameterValidation
       type="RegularExpression"
       validationString="^\w{1,16}$"
       />
     <parameterEntry
       type="TextFile"
       scope="install.sql"
       match="PlaceholderForDbUser"
       />
  
     <parameterEntry
       type="TextFile"
       scope="xe\\config\\install.config.php"
       match="PlaceholderForDbUser"
       />
   </parameter>
  
   <parameter
     name="DbPassword"
     tags="Password,New,MySQL,DbUserPassword"
     >
     <parameterEntry
       type="TextFile"
       scope="install.sql"
       match="PlaceholderForDbPassword"
       />
  
     <parameterEntry
       type="TextFile"
       scope="xe\\config\\install.config.php"
       match="PlaceholderForDbPassword"
       />
   </parameter>
  
   <!-- This is the hidden admin connection string used to run the
   database scripts.  Note that this connection string is just used
   here, and will probably be different from the connection string that
   is used by the application itself.
   -->
   <parameter
     name="Connection String"         여기가 약간 특이하실텐데요. install.sql 파일을 실행하기 위해 숨은 처리가 진행되는 영역입니다.
     defaultValue="Server={dbServer};Database={dbName};uid={dbAdminUsername};Pwd={dbAdminPassword};"
     tags="MySQL,MySQLConnectionString,Validate,Hidden"
     >                                   install.sql 파일을 실행하기 위해 필요한 처리이니 참고 하시길 바랍니다.
     <parameterEntry
       type="ProviderPath"
       scope="dbmysql"
       match="install.sql"
       />
   </parameter>
  
   <!-- table prefix -->
   <parameter                  위의 파라미터들은 WPI가 인식하는 파라미터들이기에 모두 자동 다국어처리 및 제목, 설명이 포함되나 아래 값들은
     name="Database Table Prefix"       XE가 독자적으로 사용하는 값들이기에 모두 제목과 설명, 다국어 처리를 직접 지정해야 합니다.
     description="Set the table prefix."         XE설치시 한DB에서 테이블 프리픽스만 바꿔서 설치를 가능하게 하는 루틴이 있으며 이 처리 입니다.
     defaultValue="xe"
     tags="MySQL,TableName,Prefix"
     >
  
     <description culture="en">Set the table prefix for XE</description>
     <description culture="ko">XE 테이블 머릿말을 설정합니다.</description>
     <description culture="jp">XEのテーブルの接頭辞を決めます。</description>
     <description culture="cn">定数据库表的前綴</description>
  
     <parameterValidation
       type="RegularExpression"
       validationString="^[a-z]{1,10}$"
       />
     <parameterEntry
       type="TextFile"
       scope="xe\\config\\install.config.php"
       match="PlaceholderForDbTablePreFix"
       />
   </parameter>
  
   <!-- xe admin id -->
   <parameter
     name="Set XE Admin ID"
     description="Set the xe admin website manager id"
     defaultValue="admin"
     >
     <description culture="en">Set the ID for admin</description>
     <description culture="ko">XE 관리자의 아이디를 설정합니다.</description>
     <description culture="jp">管理者のIDを決めます。</description>
     <description culture="cn">丁管理者的帐号</description>
  
     <parameterValidation
       type="RegularExpression"
       validationString="^[a-z0-9_-]{2,40}$"
       />
     <parameterEntry
       type="TextFile"
       scope="xe\\config\\install.config.php"
       match="PlaceholderForXEAdminId"
       />
   </parameter>
  
   <!-- xe admin nickname -->
   <parameter
     name="Set XE Admin Name"
     description="Set the xe admin website manager name"
     defaultValue="admin"
     >
  
     <description culture="ko">XE 관리자의 이름을 설정합니다.</description>
     <description culture="en">Set the name for admin</description>
     <description culture="jp">管理者のお名前を決めます。</description>
     <description culture="cn">丁管理者的姓名</description>
  
     <parameterValidation
       type="RegularExpression"
       validationString="^\w{2,40}$"
       />
     <parameterEntry
       type="TextFile"
       scope="xe\\config\\install.config.php"
       match="PlaceholderForXEAdminUserName"
       />
   </parameter>
  
  
   <!-- xe admin nickname -->
   <parameter
     name="Set XE Admin Nickname"
     description="Set the xe admin website manager nickname"
     defaultValue="admin"
     >
  
     <description culture="ko">XE 관리자의 닉네임을 설정합니다.</description>
     <description culture="en">Set the nickname for admin</description>
     <description culture="jp">管理者のニックネームを決めます。</description>
     <description culture="cn">丁管理者的网名</description>
  
     <parameterValidation
       type="RegularExpression"
       validationString="^\w{2,40}$"
       />
     <parameterEntry
       type="TextFile"
       scope="xe\\config\\install.config.php"
       match="PlaceholderForXEAdminNickName"
       />
   </parameter>
  
   <!-- xe admin password -->
   <parameter
     name="Set XE Admin Password"
     description="Set the xe admin website manager password"
     defaultValue=""
     tags="Password, New"
     >
  
     <description culture="ko">XE 관리자의 암호를 설정합니다.</description>
     <description culture="en">Set the password for admin</description>
     <description culture="jp">管理者のパスワードを入力します。</description>
     <description culture="cn">丁管理者的密码</description>
  
     <!-- description culture="ko">XE 관리자의 암호를 다시 입력합니다.</description>
     <description culture="en">Password for admin, once again</description>
     <description culture="jp">パスワードをまた一度入力します。</description>
     <description culture="cn">再次输入密码</description -->
  
     <parameterEntry
       type="TextFile"
       scope="xe\\config\\install.config.php"
       match="PlaceholderForXEAdminPassword"
       />
   </parameter>
  
   <!-- xe admin emailaddress -->
   <parameter
     name="Set XE Admin Email address"
     description="Set the xe admin website manager email"
     defaultValue=""
     >
  
     <description culture="ko">XE 관리자의 이메일 주소를 설정합니다.</description>
     <description culture="en">Set the email for admin</description>
     <description culture="jp">管理者のメールを入力します。</description>
     <description culture="cn">丁管理者的邮箱</description>
  
     <!-- description culture="ko">XE 관리자의 이메일 주소를 다시 입력합니다.</description>
     <description culture="en">Email for admin, once again</description>
     <description culture="jp">メールをまた一度入力します。</description>
     <description culture="cn">再次输入邮箱</description -->
     <parameterValidation type="RegularExpression" validationString="^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$" />
     <parameterEntry
       type="TextFile"
       scope="xe\\config\\install.config.php"
       match="PlaceholderForXEAdminEmailaddress"
       />
   </parameter>
  
   <!-- xe use rewrite Y/N -->
   <parameter
     name="Use URL Rewrite"
     description="Using URL rewrite?"
     defaultValue="N"
     >
  
     <description culture="ko">URL Rewrite를 설정합니다. (Windows XP의 경우 N을 선택하세요.)</description>
     <description culture="en">Do you want to use URL Rewrite? (Choose N if you’re running Windows XP.)</description>
     <description culture="jp">URL Rewriteを使用します。 (Windows XPの場合、Nを選んで下さい。)</description>
     <description culture="cn">用 URL Rewrite (如果您使用的Windows XP, 选择N。)</description>
  
     <parameterValidation
       type="Enumeration"
       validationString="N,Y" 
       />
     <parameterEntry
       type="TextFile"
       scope="xe\\config\\install.config.php"
       match="PlaceholderForXEUseRewrite"
       />
   </parameter>
  
   <!-- xe time zone -->
   <parameter
     name="GMT Timezone"
     description="Set GMT timezone"
     defaultValue="+0900"
     >
  
     <description culture="ko">time zone을 설정합니다.</description>
     <description culture="en">Set the time zone</description>
     <description culture="jp">タイムゾーンを設定します。</description>
     <description culture="cn">定时区</description>
  
      <parameterValidation
       type="Enumeration"
       validationString="-1200,-1100,-1000,-0900,-0800,-0700,-0600,-0500,-0430,-0400,-0330,-0300,-0200,-0100,0000,+0100,+0200,+0300,+0330,+0400,+0430,+0500,+0530,+0545,+0600,+0630,+0700,+0800,+0900,+0930,+1000,+1100,+1200,+1300" 
       />
     <parameterEntry
       type="TextFile"
       scope="xe\\config\\install.config.php"
       match="PlaceholderForXETimeZone"
       />
   </parameter>
 </parameters>

아마도 다른 필요 파일 중에 가장 긴 파일일 것 같습니다. 길이만 길다 뿐이지 사실 크게 복잡하거나 어렵지는 않습니다. 그럼 차근차근 살펴 보시지요. 이렇게 WPI에서 진행되는 XE화면과 매칭 시키며 진행하시면 어렵지 않게 파라미터 값들에 대해서도 감이 오실 거에요.

패키지에 이용되는 파일들에 대한 상세한 레퍼런스 정보

여기서 하나 주의사항을 말씀 드리자면…

아파치의 mod_rewrite 기능처럼 Fancy URL을 수행하게 돕는 기능이 URL Rewrite 기능입니다. 보통 Blog 서비스에서 사용되지요. 이 URL Rewrite는 현재 Win7, Windows Server2008, Windows Vista에서만 이용 가능하니 주의 하시길 바랍니다. IIS7을 이용할 경우 얻을 수 있는 장점들이 IIS6에 비해 훨씬 더 많으니 가능하시면 꼭 Windows Server2008의 기본 웹서버인 IIS7을 이용하시길 바랍니다.

패키지로 Zip 하는 방법

주의 : Zip은 Winzip이나 알집으로 하지 마시고 반드시 “윈도우의 기본 Zip 압축기능”을 이용해야 합니다.

XE의 경우라면 intall.sql, manifest.xml, parameter.xml 파일과 xe 폴더가 보이는 폴더에서 전체 파일과 폴더를 선택 후 마우스 우측 버튼을 클릭하고 “보내기” 선택 하신 후 “압축(ZIP) 폴더”를 선택해 압축 하시면 됩니다.

만들어진 Zip 패키지를 테스트하는 방법

테스트는 명령프롬프트에서 수행하는 방법과 UI를 이용하는 방법 두가지가 있습니다. 저는 UI를 이용하는 “Web Deployment Tool”을 기준으로 설명 드리도록 하겠습니다. Web Deployment Tool 다운로드 경로에서 우측 맨 아래쪽을 보시면 한글버전과 X86, X64용을 모두 보실 수 있습니다. (한글 Windows Server2008의 경우에 WPI를 통해 설치할 경우 문제가 있다는 피드백이 있습니다. 한글일 경우 직접 링크로 다운로드 후 설치 하세요.)

설치하시고 관리도구-IIS(인터넷 정보 서비스) 관리자를 실행합니다. 기본 웹사이트를 이용하시거나 또는 아무 웹사이트나 생성 하시고 웹사이트를 선택 하신 후 우측 아래쪽의 “배포” 항목의 “응용프로그램 가져오기”를 선택합니다.

 
image

조금 전에 제작하신 패키지 Zip 파일을 선택 하시면 이런 화면이 뜨고 “다음”을 수행하면 파라미터를 받고 처리하게 됩니다.

image 

이렇게 수행하시면 파라미터들의 동작 여부를 테스트 할 수 있습니다.

 image

파라미터를 모두 넣으면 설치가 진행되고, 설치가 완료되면 웹사이트 테스트를 통해 우리의 웹 어플리케이션이 바로 열리는 것을 확인 가능합니다. – 테스트 과정도 어렵지 않습니다. 그리고 느끼시는 것처럼 웹 배포 툴의 UI가 WPI와 비슷하지요? 넵! 둘다 같은 API를 이용하고 있기 때문입니다. ^_^

Web Deployment Tool의 “명령프롬프트”를 이용해 테스트로 처리할 경우 아래의 방식으로 테스트가 가능하니 참고 하시길 바랍니다.

 "C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" ^
 erb:sync -source:Package="application.zip" ^
 est:auto ^
 etParam:dbAdminUsername="root" ^
 etParam:dbAdminPassword="<password>" ^
 etParam:dbUsername="appuser" ^
 etParam:dbUserPassword="<password>" ^
 etParam:dbServer="localhost" ^
 etParam:dbName="application"  ^
 etParam:AppPath="Default Web Site/application"

명령프롬프트로 패키지를 테스트할 경우 참고 사항

추가적으로 이건 옵션으로 파라미터 및 패키지 파일들에 대해서 테스트를 더 상세히 해 보실 수 있는데요. 이 과정을 아래 링크에서 확인 가능합니다.

참고자료 : Sniffer.Installer.Reporter (SIR) for Application Gallery

간단히, 명령프롬프트용 SIR command line tool을 받고 아래 명령을 수행하면 상세한 테스트가 진행 되며 패키지 검증을 진행해 주니 참고 하시길 바랍니다. – 상세한 파라미터 validation등에서 이용하면 유용합니다.(참고로, XP에서는 테스트 되지 않으며 Windows Server2008이나 Windows7에서만 정상 테스트 가능한 것으로 보고 되었습니다.)

실행명령 예시

C:\PFiles\SIR>SIRCommandLine.exe -s:C:\Temp\Test\SIR\XE_Test_Package\XE.1.4.0.5.WPI_2.zip -reportFileName:C:\Temp\Test\SIR\XE_Test_Package\report.xml > C:\Temp\Test\SIR\XE_Test_Package\output.txt

실행하고 끝나면 “C:\Temp\Test\SIR\XE_Test_Package\output.txt” 파일을 열어 console 출력 메시지 정보를 보실 수 있으며 “C:\Temp\Test\SIR\XE_Test_Package\report.xml” 리포트 파일로 결과물을 확인 가능합니다.

참고 사항 : 웹 앱 갤러리팀은 WPI 설치 과정에서 입력을 받으면 이후 웹 페이지에서 추가 설치 인터페이스 없이 설치가 완료 되는 것을 권장합니다.

사용자 편의성을 위해 - 즉, 기존에 설치 루틴이 있다면, WPI에서 모든 입력을 받아 하나의 파일에 저장하고(XE의 경우 config.php 파일) 웹어플리케이션 실행을 위해 초기 파일이 최초 WPI 실행 후 수행되면 이때 config.php 파일등의 값을 조사해 WPI에서 받은 값이 있을 경우 바로 설치 루틴 값에 매핑시켜 설치 완료 후 실행된 화면을 제공해 주시는것이 최선의 방법입니다.

경험적으로 볼때, WPI 외에서 추가로 값을 입력을 받는 것은 전혀 권장해 드리지 않습니다.(해당 웹 앱 갤러리 팀의 담당자가 웹 앱 갤러리에 등록을 반려 할 수도 있습니다.)

파일 보안을 위해 Checksum 파일 처리
이제 웹 앱 갤러리에 파일을 올릴 준비는 모두 마무리 되었습니다. 끝으로, 어플리케이션 패키지를 제출하기 전에 준비하셔야 하는 내용들이 있는데요. 그 중 첫번째가 파일 변조나 보안상의 문제를 막기 위해 SHA-1 해쉬 값으로 파일을 체크하는 값을 준비 해야 합니다.

다운로드 : Microsoft® File Checksum Integrity Verifier.

Checksum Integrity Verifier를 다운로드 하고 아래처럼 SHA-1 해쉬 값을 구합니다. 저는 c:\temp 폴더에서 테스트를 수행했습니다

 C:\Temp>fciv -sha1 XE.1.4.0.5.WPI_2.zip
 //
 // File Checksum Integrity Verifier version 2.05.
 //
 d68e260bb107f12bad89d80f87b5683d7ee1382a xe.1.4.0.5.wpi_2.zip

이렇게 보시는 것처럼 SHA-1으로 구한 해쉬 값을 나중에 패키지를 제출(submit)할 때 이용해야 합니다.(당연하지만 위의 제 테스트 값을 쓰시면 안됩니다.^_^;;;)

어플리케이션 패키지를 제출하는 방법
https://www.microsoft.com/web/gallery/developer.aspx 경로의 내용을 참조 하셔서 3번 “Submit your app”을 수행합니다. Windows Live ID로 로그인을 수행하고 필요한 정보를 넣으시면 됩니다.

간략히 넣으셔야 하는 정보들을 알려 드리자면

- 응용프로그램 정보(이름, 버전, 오픈소스프로젝트 URL, 질문과 답변 서비스 제공 URL. 제출일, 어플리케이션 범주)

-로고와 스크린샷(200*200크기의 로고와 스크린샷 5개 내외-가능한 잘 뽑은 스크린샷이 좋습니다.)

- 각각 영문과 한글(또는 다국어 가능)로 제공(이름, 50자 내외의 짧은 설명, 200자 내외의 설명)

- WPI 패키지 경로(Zip으로 위에서 묶은 파일을 직접 특정 경로에 올려 두셔야 하며 해쉬된 파일 Checksum 값만을 전달해 주셔야 합니다.)

- 시작파일 경로(예를 들면, index.php)

- SHA-1 해쉬 값(Checksum Integrity Verifier로 구한 값)

- 제출자의 영문 성명 및 영문 주소 정보와 Windows Live ID 값이 필요합니다.

참고로, 한번 App이 제출되어 승인되면 이후 수정(최신 버전으로 파일 수정) 있으실 경우에는 직접 Windows Live ID로 로그인 후 위의 Checksum Integrity Verifier로 SHA-1 값을 다시 구해 패키지 경로와 SHA-1 해쉬값 등만 업데이트 해 주시면 됩니다.

제출 후 웹 앱 갤러리 팀이 테스트와 검사를 수행하게 되며 이 과정은 3일에서 일주 정도 걸릴 수 있습니다.

이렇게 해서 어플리케이션 패키지를 구성하는 절차와 방법에 대해서 알아 보았습니다. 다음 포스트에서는 제가 생각하는 웹 앱 갤러리에 대해서 조금 더 풀어 보도록 하겠습니다.

감사합니다.

참고자료 :

Package an Application for the Windows Web Application Gallery

Reference for the Web Application Package

Sniffer.Installer.Reporter (SIR) for Application Gallery

Web App Gallery principles

Set ACLs Through the Manifest.xml File

Reference for the Web Application Package

Database Notes for packaging applications for use with the Windows Web App Gallery