Korea Evangelist

Developer & Platform Evangelism, Microsoft Korea

April, 2010

  • Korea Evangelist

    [아키텍처 저널 번역] 21권 소프트웨어 + 서비스 및 클라우드 컴퓨팅을 위한 설계 고려 사항 #1/3

    • 0 Comments

    image

    지난 번에 올렸던 "엔터프라이즈 소셜 컴퓨팅"은 현재 MSDN 싸이트에 공식적으로 번역물로 기재되었고  PDF 버전의 번역물 다운로드 링크도 추가되었다.

    아키텍처 저널 19권의 한글 MSDN 싸이트는 아래와 같습니다.
    http://msdn.microsoft.com/ko-kr/aa699428.aspx
    "엔터프라이즈 소셜 컴퓨팅"의 한글 번역 MSDN 싸이트는 아래와 같습니다.
    http://msdn.microsoft.com/ko-kr/aa699425.aspx

    이번 포스트는 아키텍처 저널21권에 수록된 "소프트웨어 + 서비스 및 클라우드 컴퓨팅을 위한 설계 고려 사항"이라는 아티클 번역물에 대한 것으로 여러분의 피드백을 기다립니다. 조금 길어서 세번에 걸쳐 리뷰가 끝나는 대로 포스팅을 진행하도록 하겠습니다.

    ------------------------------------------------------------------------------

    요약

    이 문서는 S+S(Software plus Services), 클라우드 컴퓨팅 또는 하이브리드 컴퓨팅으로 일컬어 지는 차세대 애플리케이션의 설계 패턴에 대한 Microsoft의 생각을 공유하기 위해 작성되었다. 여기에는 기업, 소프트웨어, 인프라 아키텍처 등 일반 아키텍처 도메인에 영향을 주는 S+S 아키텍처의 고려 사항과 패턴에 대한 견해가 실려 있다.

    서론

    많은 기업들이 체계적인 마스터 플랜을 따르기 보다는 그때그때의 요구사항에 맞춰 몸집을 키우는 IT 인프라를 보유하는 쪽을 선택한다. 이런 방식으로 확장된 기업 시스템은 강력하게 서로 결합되거나 혹은 완벽하게 분리된 여러 하위 시스템["사일로(Silos)" 시스템으로도 불림]으로 구성된 대형 모놀리식(monolithic) 구조체로 변하는 경향이 있다. 일반적으로, 이러한 시스템은 난해하고 일관되지 못한 인터페이스를 가지고 있으며 복잡하고 효율성이 떨어지기 때문에 비즈니스 혁신 속도가 느려진다. 이로 인해, IT 관리자는 정보 기술을 통해 어떻게 하면 핵심 비즈니스를 지원할 수 있을까에 집중하기 보다는 운영 및 장애 제거 프로세스에 더 많은 시간을 보내게 된다. 게다가 일부 기업의 IT 시스템은 기능면에서 부분적으로 중복되기 때문에 비즈니스 정보에 대한 뷰 자체가 단편적이고 일관되지 못하게 되어, 결국 기업의 재정 지출에 대한 합리적인 의사 결정에 영향을 끼친다.

    S+S(Software plus Services)는 SaaS(Software as a Service)의 확장 형태로서 조직이 비즈니스를 영위하는데 필요한 기술의 개발, 관리, 배포 및 운영 측면에서 더 많은 아웃소싱 옵션을 제공한다. S+S는 서비스 지향 아키텍처(SOA)의 원칙을 따른다. S+S는 애플리케이션 소프트웨어 및 서비스의 소싱, 파이낸싱, 배포와 관련된 다양한 방법을 제공하기 때문에, SOA를 지원하는 기업에서는 기술 선택의 폭이 넓어졌다. 합리적인 의사 결정을 내리고 S+S 모델을 채택함으로써 얻을 수 있는 잠재 혜택을 극대화하기 위해서는, IT 아키텍트와 의사 결정권자는 사내외에 존재하는 경제적, 규제적, 정치적, 재정적인 요인보다는 비즈니스 동인과 기술적 요구 사항에 중점을 두어야 한다.

    이 문서는 Microsoft Worldwide Services 컨설팅 조직이 S+S와 클라우드 기반 애플리케이션을 설계, 이관하는 과정에서 경험한 실제 사례를 근간으로 하고 있다. 또한, 기업, 소프트웨어, 인프라 아키텍처 등 일반적인 아키텍처 도메인에 영향을 미치는 S+S 아키텍처의 고려 사항과 패턴에 대한 견해가 나타나 있다.

    SOA, S+S, 클라우드 컴퓨팅

    2000년대 중반, 복잡한 IT 인프라 구조가 넘쳐나던 기업에 분별력을 제공하기 위해 다양한 SOA 사례가 소개되었다. 그 이후, 업계에서 가장 큰 인기를 끌던 SOA는 점차 주류에서 밀려나고 최근에는 “SOA는 죽었다”는 말까지 나오고 있다. 하지만 SOA가 오늘날까지도 지속되고 있는 중요한 패러다임의 변화를 이끌었다는 사실에는 변함이 없다.

    기술적인 측면에서 SOA의 핵심적인 영향력은 바로 일련의 SOA 원칙, 패턴 그리고 분석 프로세스들이다. 이들을 활용하여 기업은 IT 포트폴리오에 대한 인벤토리를 작성하고 리팩터링을 진행하여 일상적인 비즈니스 운영 작업을 지원하는 모듈화되고 핵심적인 서비스 기능으로 변모시킬 수 있다. SOA의 주요 목표는 비즈니스 목표에 맞춰 기업의 IT를 재구성하고(align) 비즈니스 요구에 IT 부서가 보다 민첩하게 대응할 수 있도록 지원하는 것이다. IT 솔루션의 민첩성 강화를 위한 SOA의 몇 가지 주요 원칙으로는 느슨한 결합(loose coupling), 관심 분리(separation of concerns), 표준 기반 기술 및 대단위(coarse-grained) 서비스 설계가 있다.

    그림 1. SOA, S+S, 클라우드 컴퓨팅을 통한 IT 최적화

    aa699437_a1f1(en-us,MSDN_10)

    SOA는 기업이 주요 서비스 기능을 식별하고, 비즈니스와 IT간 연계를 구축해 민첩성을 유지하도록 지원하는 반면, S+S는 사내에 배포된 클라우드 컴퓨팅 및 솔루션을 통해 IT 투자를 최적화할 수 있는 컴퓨팅 모델을 제공한다. 그러나 S+S는 SOA의 필요성을 없애는 것이 아니라 SOA를 지원하는 기업이 애플리케이션 소프트웨어 및 서비스를 소싱, 파이낸싱, 배포할 수 있는 여러 모드를 구축함으로써 기술 선택을 최적화할 수 있도록 도와준다.

    그림 1은 SOA, S+S 및 클라우드 컴퓨팅 스택 관계를 나타낸다.

    일반적으로 모든 조직에 적용할 수 있는 단 하나의 올바른 IT 포트폴리오가 있는 것이 아니기 때문에, 조직에 무엇이 가장 적합한가는 현재의 비즈니스 목표와 요구 사항에 달려 있다. 따라서 S+S 컴퓨팅 모델은 비용, 핵심 업무와의 관련성, 사용자 경험 및 혁신 가치, 비즈니스 차별성 등의 의사 결정 필터에 따라 특정 기술을 선택해 기업이 IT 포트폴리오를 최적화할 수 있도록 지원한다. S+S는 사업장내 (on-premises) 소프트웨어의 장점(예: 짧은 대기시간 및 풍부한 기능)과 클라우드 컴퓨팅의 장점(예: 유연한 확장성 및 아웃소싱)을 결합시켜 효과적인 하이브리드 분산 아키텍처 설계를 위한 보다 다양한 선택옵션을 제공한다.

    클라우드 컴퓨팅은 제공되는 서비스를 집합적으로 지칭하는 말이다. 현재 클라우드 컴퓨팅은 아래와 같은 벤더의 솔루션을 포함한다.

    * IaaS(Infrastructure as a Service). IaaS는 일반적으로 동적 확장이 가능하고 가상화된 계산 및 저장소 리소스가 서비스 형태로 제공되는 컴퓨팅 환경이다. 이 서비스는 서버 및 저장소 장치와 같은 하위 수준의 하드웨어에 대한 투자 요구로부터 서비스 고객 수를 산정한다.

    * PaaS(Platform as a Service). PaaS는 서비스 고객에게 운영 체제와 애플리케이션 플랫폼 수준의 추상화를 제공한다. 또한, 단일 시스템 상의 다중 고객 지원 (multitenant) 환경에서 고객별 요청 처리 시간을 스케줄링하고, 메모리 공간을 할당하고, 시스템과 애플리케이션의 무결성을 보장할 수 있는 시스템 리소스 관리 기능을 제공한다. 서비스 고객은 PaaS 애플리케이션 개발 도구를 사용하여 호스팅 플랫폼에서 실행되는 클라우드 애플리케이션을 구축할 수 있다.

    * SaaS(Software as a Service). SaaS는 타사 서비스 공급자에 의해 호스팅되는 비즈니스 및 소비자 애플리케이션을 의미한다. 서비스 고객은 웹 브라우저 또는 데스크톱에 설치된 애플리케이션을 통해 호스팅된 애플리케이션을 사용할 수도 있다. 어떤 경우에는, 기업이 자사의 데이터 및 비즈니스 프로세스와 SaaS 애플리케이션을 통합할 수 있도록 SaaS 공급자가 UI가 없는(headless) 웹 서비스를 제공하기도 한다.

    클라우드 컴퓨팅 솔루션은 기업 관리 인프라를 보완하고 다음과 같은 다양한 이점을 제공한다.
    * 추가 컴퓨팅 및 저장소 용량 등과 같은 리소스를 동적으로 할당하는 기능을 사용해 비즈니스 수요에 따라 IT 지출을 유연하게 조정할 수 있다.
    * 트랜잭션 및 가입 기반 클라우드 플랫폼을 사용하여 막대한 IT 투자 없이도 새로운 비즈니스와 작업 모델을 신속하게 테스트할 수 있는 혁신적인 애플리케이션 솔루션을 개발할 수 있다.
    * 아웃소싱된 솔루션은 모든 IT 자산을 효과적으로 관리 및 운영하는데 소요되는 지속적인 IT 비용과 책임(즉, 기회 비용)을 줄여준다.

    설계 고려 사항

    이 섹션에서는 S+S 기반 솔루션 설계 또는 채택 시 고려해야 할 비즈니스 및 기술적인 이슈에 대한 간략한 개요를 제공한다. 그림 2는 이 문서 구성에 사용된 프레임을 나타낸다. 이 프레임은 특정 아키텍처 관점을 중심으로 구성되었으며 공통 관심사(crosscutting concern)를 식별하여 S+S 전략의 일부로 간주되는 시나리오 유형, 설계 고려 사항 및 패턴에 관한 포괄적인 관점을 제공한다.
    이 정보는 S+S 전략을 채택함에 있어서 전체적인 영향을 평가하는 기준이 된다.

    엔터프라이즈 아키텍처

    엔터프라이즈 아키텍트 역할 가운데 가장 까다로운 것 중 하나는 끊임없이 변하는 비즈니스 요구 사항과 이러한 요구 사항을 일관성있게 충족시킬 수 있는 IT 조직 능력 간에 균형을 유지하는 것이다.

    그림 2. 아키텍처 관점 프레임웍

    aa699437_a1f2(en-us,MSDN_10)

    S+S는 IT 플랫폼, 애플리케이션 또는 애플리케이션(비즈니스) 서비스를 통합하거나, 때로는 아웃소싱하여 운영 비용을 절감할 수 있는 새로운 기술 배포 패턴을 제공한다. 또한, 조직은 S+S를 통해 시스템 전사 통합시 발생하는 마찰을 줄일 수 있다. 때로는 기존 채널들을 결합시키는 것만으로도 기존 비즈니스 관계에 정보 서비스를 제공할 수도 있다.
    엔터프라이즈 아키텍트는 먼저 최상위 수준에서 조직의 핵심 역량을 판단할 수 있는 기준을 마련하고, 어떤 애플리케이션이 이러한 핵심 역량을 지원하고 있는지, 그래서 어떤 애플리케이션이 사내에서 계속 유지해야 하는지 혹은 외부에 아웃소싱 주어야 하는지를 결정할 수 있는 프로세스를 마련해야 한다.

    다음은 몇몇 대규모 조직에서 사용되는 모델이다.
    * 회사에 특화된(proprietary) 미션 크리티컬한 시스템— 회사에 특화된 시스템, 혹은 미션 크리티컬한 시스템, 혹은 경쟁 우위를 제공하는 시스템은 무척 중요하기 때문에 외부(off-premises) 서비스 공급자에게 아웃소싱하기에는 위험부담이 너무 크다고 여겨진다. 따라서 이러한 시스템은 주로 조직내 기존 IT 부서에서 설계, 개발, 운영 및 관리한다.
    * 회사에 특화되지 않은 미션 크리티컬 시스템— 회사에 특화되어 있는 시스템은 아니지만 미션 크리티컬한 시스템인 경우, 개발은 다른 회사에서 할 수 있지만 설계, 운영 및 관리는 조직 내 기존 IT 담당 부서에서 담당한다.
    * 회사에 특화되지 않은 시스템— 표준화된 기능 및 인터페이스를 제공하는 특정 회사에 특화되지 않은 시스템은 서비스 공급자와 적절한 SLA(서비스 수준 계약)을 설정할 수 있는 경우, 클라우드 서비스 공급자에게 아웃소싱하기에 아주 적당하다. 이러한 시스템의 예로는 전자 메일, 일정관리 및 콘텐츠 관리 도구 등이 있다.

    이 모델은 애플리케이션 및 시스템을 평가하는 출발점을 제공한다. 하지만 조직마다 차이점이 존재한다는 사실을 고려해야 한다. 예를 들어, 예산 또는 전문가의 부재로 조직 내에서 핵심 시스템을 효율적으로 관리할 수 없는 경우에는 아웃소싱을 고려할 수 있다. 마찬가지로, 일부 미션 크리티컬한 시스템을 클라우드에 두면 적은 비용으로도 추가 기능을 제공할 수 있어 단점이 상쇄된다. 일례로, 지점 또는 신뢰할 수 있는 파트너는 사내 전용 인프라를 구축하지 않고도 시스템에 접근할 수 있다.

    그림 3. IT 성숙도에 따른 S+S 영향

    aa699437_a1f3(en-us,MSDN_10)

    그러나 단순히 애플리케이션을 외부(off-premises)로 이동시킬 기회를 식별하는 것으로는 충분하지 않다. S+S 기회를 활용하려면 의사 결정권자가 조직의 IT 성숙도를 명확하게 이해하고 있어야 한다. 이러한 이해가 있어야만 IT 인프라와 프로세스를 어떻게 변경해야 S+S 채택으로 얻을 수 있는 비용 절감 또는 ROI(투자 수익률) 극대화와 같은 이점을 실현할 수 있는지 결정할 수 있다.

    그림 3은 IT 성숙도("Enterprise Architecture as Strategy"에 근거한 성숙도 모델1)에 따른 다양한 수준에서 S+S 채택의 용이성을 나타낸 것으로, 조직 성숙도를 판단하지 않으면 예측된 ROI가 부정확할 수도 있다는 것을 보여준다.

  • Korea Evangelist

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

    • 0 Comments

    안녕하세요. 김대우 입니다. 이번에 소개해 드릴 내용은 지난 글에 이어 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)할 때 이용해야 합니다.(당연하지만 위의 제 테스트 값을 쓰시면 안됩니다.^_^;;;)


    어플리케이션 패키지를 제출하는 방법
    http://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

  • Korea Evangelist

    10분만에 모바일과 PC 버전 Twitter 프로그램 만들기

    • 1 Comments

    Silverlight 4를 사용해서 PC버전의 Twitter 프로그램과 Windows Phone 7의 앱을 간단하게 복사, 붙여넣기 만으로 만드는 과정을 보여 드립니다.

    개발자를 위한 IT블로그 영욱닷컴(http://www.YoungWook.com)
  • Korea Evangelist

    Visual Studio 2010 완소가이드 VS2010 Training Kit

    • 0 Comments

    Visual Studio 2010 Training Kit을 아세요
    Visual Studio 2010과 관련된 Presentation, Hands on Lab과 각종 Demo 그리고 Source등이 함께 있습니다. 그리고 .NET 4.0과 새 버전의 MFC에 대한 정보도 함께 있어서 개발자들이라면 꼭 한번씩은 열어보셔야 할 내용들로 가득 차 있습니다.

    개발자를 위한 IT블로그 영욱닷컴(http://www.YoungWook.com)

  • Korea Evangelist

    미리 만나는 Internet Explorer 9

    • 0 Comments

    작년 11월 PDC09 행사에 이어서 올해 MIX10 행사에서도 다시 소개된 IE9은 HTML5, CSS3, SVG1.1등 다양한 표준적인 요소들을 지원하고 있으며 GPU와 Multi Core등을 사용한 효율적인 방식으로 HTML5, HTML5 Video, SVG등의 화면 랜더링 속도를 비약적으로 향상 시켰고 Java Script의 실행속도도 눈에 띄게 개선한 모습을 보여 주었습니다.
    위의 동영상은 IE9을 미리 볼 수 있는 Internet Explorer 9 platform preview 버전을 가지고 테스트하는 영상입니다.

Page 1 of 4 (17 items) 1234