Web Deploy를 이용한 웹 사이트 패키지화, 그리고 SCVMM을 이용하여 이를 템플릿으로 배포

아래와 같은 형태의 에러를 보신 적이 많으실 것으로 생각됩니다. 일반적으로 제공받은 웹 응용 프로그램의 경우, 단일 계층이 아닌, 별도의 데이터베이스와 연결되는 경우, 해당 데이터베이스 정보를 정확하게 입력해주지 않으면, SQL 서버와 같은 백엔드 데이터베이스에 연결되지 않아서 발생하는 에러입니다.

image

관련된 연결 정보는 일반적으로 웹 응용 프로그램의 파일들이 저장된 폴더내에 Web.Config내 XML 형태로 저장되어져 있습니다.

image

ConnectionString이라는 형태로 설정되어져 있는 값을 인프라 상태에 맞게 데이터베이스 서버 정보, 인스턴스 이름, 접속하는 계정, 암호, 그리고 나아가 사용할 데이터베이스의 이름을 정확하게 입력해주어야 하죠. 물론 해당 소스를 개발시에 별도의 자동화 코드를 내장해서, 테스트 환경/실제 환경등을 구분해서 접속하게 만들 수도 있지만, 일반적인 형태가 아닌 경우도 있죠.

결국 엔지니어가 개입하여, Web.Config에 대한 부분을 수정해주어야 할 필요가 있게 되고, 관련된 웹 응용 프로그램이 서비스 형태로 배포할 경우, 이러한 사용자 입력 부분이 수동으로 처리된다면, 빠른 배포(Agile Deploy)에 부담으로 작용할 수 있습니다. 이러한 부분에 대해서 Microsoft는 어떠한 형태로 접근하고 있을까요?

System Center 2012 Virtual Machine Manager(이하 SCVMM)에 대한 데모를 보신적이 있으시다면, 단순히 하드웨어 설정과 운영 체제 가상 하드 디스크 배포가 아닌, 상위 서비스용 응용 프로그램에 대한 설정이 가능하다는 것을 보신 적이 있을 것입니다.

image

일반적인 가상화 벤더의 경우에는 가상화 환경의 하드웨어 설정(예를 들어, CPU, 메모리, 네트워크등), 그리고 이후 가상 하드 디스크 파일(VHD, VHDX, VMDK)를 배포하여, 가상 컴퓨터(VM)을 만들어주고, 이후 설정에 대한 분은 관리자나 고객의 접속을 통해 수동으로 설정해줘야 하지만, Microsoft의 경우에는 이 상위 부분에 대한 설정까지도 표준화를 하고 템플릿화시킬 수 있는 부분을 제공합니다. 단순한 하드웨어 집중 방식이 아니라, 실제 비즈니스가 가능한 서비스에 집중한 부분까지 제공한다는 의미이죠.

템플릿내 OS 설정에는 설치 후, Windows Server내 제공되어야 할 역할/기능을 미리 설정할 수 있는 부분이 있습니다.

image

이렇게 구성된 운영 체제위에 제공되어야 할 부분에 대해서도 설정이 가능하다는 의미죠.

image

3가지의 표준 형태, 그리고 관리자가 만들어서 반영할 수 있는 형태의 스크립트를 제공합니다. 간단히 정리하면 아래와 같습니다.

  1. Web Application : Web Deploy 도구를 이용해서 IIS 관리 도구내에 구성된 특정 웹 사이트를 하나의 파일 형태로 만들고 이를 다른 서버에서 가져올 수 있습니다.
  2. Virtual Application : Server Application Virtualization (SAV) 도구를 통해 웹 사이트가 아니거나, 웹 사이트이더라도 시스템의 주요 설정 및 파일을 수정하거나 구성해야 할 경우, 이를 하나의 패키지 형태로 만들 수 있게 하여, 다른 서버에서 이를 가져와 실제 설치된 형태로 운영할 수 있고, 불필요해졌을 경우, 손쉽게 제거할 수 있습니다.
  3. SQL Server Data-Tier Application (DACPAC) : SQL Server내 데이터베이스 및 테이블등의 정보를 하나의 패키지(DACPAC 확장자)로 만들어 다른 서버에 가져와 동일한 형태의 데이터베이스를 구성하는 기술입니다. T-SQL 구문과 연계하여, 데이터베이스에 저장되어야 할 기본 콘텐츠도 넣을 수 있습니다.
  4. Script : 말 그대로 스크립트입니다. 관리자가 사전에 구성되거나 설치되어야 할 부분들을 스크립트로 만들어 템플릿 배포시 구동되게 만들 수 있습니다. 해당 스크립트는 순서를 지정할 수 있어, 특정 기술이 반영되기 전, 반영된 후.. 이런식의 지정이 가능합니다.

오늘은 이중에서 Web Deploy에 대한 부분을 살펴보려고 합니다. 차후 포스팅에서 SAV와 DACPAC까지 살펴볼 예정이며, 이를 전부 연계했을 경우, SCVMM에서 제공하는 서비스 템플릿을 만들고 제공하실 수 있게 됩니다. 관련된 샘플 웹 사이트는 Microsoft의 .NET 4 기반으로 제작된 PetShop을 이용하려고 합니다. 관련된 파일은 여기에서 다운로드받으실 수 있습니다.

이를 설치하시게 되면, 지정된 폴더에 설치되게 되고, 최초의 구성 파일들을 얻기 위해서는 Build.bat를 한번 구동시켜야 합니다.

image

이후, Web 폴더를 IIS 역할이 설치된 서버에 복사하시고, 웹 사이트 혹은 응용 프로그램 추가를 통해 하위 사이트 형태로 생성할 수 있습니다. 데이터베이스에 대한 부분은 DatabaseScripts 폴더내 파일을 이용하시면, SQL 서버가 설치된 곳에 4개(MSPetshop으로 시작하는)의 데이터베이스를 구성할 수 있습니다.

image

자 이제 수동으로 한번 구성해보죠. PetShop의 웹 소스를 복사한 IIS 서버에 가서, Web.Config을 메모장으로 열어봅니다

image

5개의 항목을 수정해줘야 합니다. SQL로 시작하는 5개 부분이 이에 해당됩니다. 더불어 XML에 대한 정보를 일반 방식으로 변경하기 위해 <?xml로 시작하는 부분을 위의 그림과 같이 수정합니다.

SQLProfile…, SQLMembership.., SQLConnString1,2,3이 5개 부분내 connectionString을 데이터베이스 정보에 맞게 수정합니다. 만약 SQL 서버의 이름이 KOALRA-DB, SQL 인스턴스 이름이 DB01 이라면, server 항목에 KOALRA-DB\DB01이라고 입력하고, SQL 인증 방식을 사용하므로, PetShop 샘플 데이터베이스들에 권한이 있는 계정을 User ID 항목에 암호를 Password 항목에 입력합니다.

image

만약 응용 프로그램 풀 에러가 발생한다면, 응용 프로그램 풀 고급 속성에서 관련 사항을 수정해주면 쉽게 해결할 수 있습니다. 잘 접속이 되죠? 이제 이렇게 만들어진 웹 사이트를 어떻게 패키지화시켜 서비스로 제공할 수 있을까요? 바로 Web Deploy가 여기서 사용되게 됩니다.

image

Web Deploy는 Microsoft의 IIS 사이트에서 다운로드받으실 수 있습니다. (https://www.iis.net/downloads/category/deploy-and-migrate) 또는 SCVMM 설치시 기본적으로 만들어지는 라이브러리내 저장되어져 있습니다.

image

설치한 Windows Server의 아키텍쳐에 맞게 32비트 64비트를 선택해서 설치한 후, IIS 관리자를 다시 엽니다.

image

작업 패널에 응용 프로그램 내보내기, 응용 프로그램 가져오기가 있습니다. 이 항목이 Web Deploy 작업입니다. 응용 프로그램 내보내기를 클릭합니다.

image

해당 사이트에 필요한 콘텐츠와 웹 사이트 정보를 지정하고 다음을 클릭합니다. 매개 변수 항목에서는 그냥 다음을 클릭합니다. (매개 변수 항목이 패키지에 중요합니다만, 일단 여기서는 먼저 추출부터 해보겠습니다.) 이후 패키지 저장 정보를 선택하시면, PetShop 사이트가 하나의 ZIP 파일 형태로 만들어집니다. 해당 ZIP 파일을 다른 IIS 서버에 가져가, Web Deploy 도구를 통해 반대로 가져오기를 하게 되면, 해당 사이트가 손쉽게 다른 서버로 이전할 수 있는 형태가 됩니다. 손쉽게 웹 사이트를 이전하거나 가져올 수 있겠죠?

오늘 이야기의 시작이었고, 가장 중요한 부분을 이야기해보겠습니다. 바로 Web.Config에 들어가는 항목이 변한다는 것입니다. 데이터베이스 정보가 틀리거나, 사용자 계정/암호가 틀린 경우에는 이를 가져올 때 확인해야 하는 프로세스가 필요합니다. 웹 정보를 잘 모르는 사용자의 경우에는 Web.Config을 수정한다는 자체를 모를 수 있기에, 웹 사이트를 가져올 때 관련된 정보를 입력할 수 있게 한다면, 간편할 수도 있고, 이러한 입력 정보를 변수화시켜 SCVMM에서는 템플릿으로 만들 수도 있습니다.

Web Deploy로 다시 내보내기를 해보겠습니다. 그런 후 매개 변수 항목에 대한 부분으로 갑니다.

image

기본 매개 변수로 지정된 매개 변수 1은 해당 사이트를 가져올 때, 하위 사이트 주소를 묻는 항목입니다. 선택 후 편집을 클릭하면 관련된 정보를 수정하거나 입력해줄 수 있습니다. 이 데이터가 가져올 때, 사용자에게 묻는 대화 상자 형태로 등장하는 것이죠.

image

매개 변수 1의 항목을 사용할 주소.. 이런식의 이름으로 이해 가능한 형태로 변경해줘야겠죠? 이정도는 매우 쉽다고 생각하실 수 있습니다. 이제 Web.Config을 살펴보죠.

매개 변수 추가 버튼을 클릭합니다.

image

Web.Config의 수정해야 할 5개 항목중 첫번째 항목에 대한 매개 변수를 지정해줍니다. 꼭 XML 파일내 이름을 넣어주지 않아도 됩니다. 이해를 돕기 위해 Web.Config과 동일한 형태로 SQLProfileConnString을 입력하였으며, 여기서 사용되는 기본값을 넣었습니다. 기본값에 입력된 정보는 비워둘 수도 있으며, 사용자가 차후 수정할 수도 있습니다. 설명까지 넣어주면 좋겠죠. 사용자나 관리자가 해당 항목을 가져올 때 입력을 하면, 이제 Web.Config에 넣어주는 작업을 지정해야 합니다. 이를 위해 매개 변수 항목 추가 버튼을 클릭합니다.

image

매개 변수 항목 추가 부분은 입력한 데이터를 어디다 넣겠냐는 의미입니다. 유형은 다양한 형태로 제공합니다. Web.Config은 XML이기에 XML 파일을 선택하고, 범위는 해당 파일의 이름이라고 생각하면 됩니다. \\Web.config$는 웹 소스와 동일한 위치라는 것입니다. 세번째 일치가 매우 중요합니다. 해당 부분이 어디냐는 것입니다.

//connectionStrings/add[@name='SQLProfileConnString']/@connectionString 이 입력되어져 있습니다. Web.Config 파일을 보면.. (XML 파일은 대소문자를 구분합니다.)

image

계층 구조입니다. configuration 밑에 connectionStrings가 있고, add가 있습니다. //connectionStrings의 의미는 항목중에 connectionStrings라는 항목을 찾아달라는 것입니다. 정확하게 표현했다면, /configuration/connectionStrings가 되어야 하나, //를 이용해 쉽게 처리하였습니다. add[@name=’SQLProfileConnString’]의 의미는 add name=’SQLProfileConnString’을 찾아달라는 것입니다. add 항목에 name이.. 이런뜻입니다. 그러고 나오는 @connectionString은 해당 add name내 connectionString 값이라는 의미죠. 이해가 되셨나요? 이를 XML Parameterization이라고 칭하며, 자세한 정보가 IIS 사이트에 잘 정리되어 있습니다.

위와 같은 방법으로 5개 항목에 대한 매개 변수와 매개 변수 항목 추가를 구성합니다. 샘플이 있기 때문에 어렵지 않으실 수 있습니다. 완성된 WebDeploy 패키지를 https://video.koalra.com/webdeploy.zip에 파일로 만들어놓았습니다. 해당 ZIP 파일내 parameters.xml 파일을 열어보시면 다 내용이 들어있습니다.

image

이렇게 추출된 Web Deploy 패키지를 다른 곳에서 가져오기를 하면 관련된 정보를 묻게 됩니다. XML Parameterization을 잘 하셨다면, 가져온 후 세부 정보에서 변경이 발생했다는 것을 확인할 수 있습니다.

image

SCVMM을 통해 이를 배포하고자 하는 경우에는 해당 파일을 SCVMM 라이브러리 폴더에 복사합니다. 이후 VM 템플릿내 응용 프로그램 구성 항목에서 Web Application을 추가하면, ZIP 파일이 보입니다. 이를 추가합니다.

image

Web Deploy 패키지에서 만들어준 매개 변수 목록과 기본 값들이 나옵니다. 해당 값을 템플릿 배포시 사용자에게 입력받게 한다면, Value내 변수값을 선언해줘야 합니다. SCVMM에서 변수는 앞뒤로 @표시를 붙여주면 됩니다. @SQLServer@ 이런식으로..

image

변수를 3개 선언하게 되면, 변수 선언에 대한 부분 3가지를 입력해야 템플릿 배포가 시작되게 됩니다.

또한 Web Deploy를 위해서는 사전에 IIS와 Web Deploy 패키지가 VM에 설치되어야 합니다. IIS는 OS 구성에서 체크 박스로 구성하시면 되며, Web Deploy 패키지는 SCVMM 라이브러리에 있기 때문에 아래 그림과 같이 구성하면 됩니다.

image

스크립트로 추가하는 형태이며, Pre-Install이라는 Script Command Type은 언제 설치를 할 것이냐는 것입니다. Pre-Install : 패키지 설치 전, Post-Install : 패키지 설치 후이며, 사전 설치가 필요하므로, Pre-Install을 선택하고, 명령어 프롬프트로 설치합니다. /q는 사용자에게 묻지 않고 지정하라는 것이며, /c는 설치 후 창을 닫으라는 것입니다. Web Deploy 패키지는 이미 SCVMM 설치시 제공되며, 설치 권한을 가진 계정을 Run As Account에 지정합니다.(시스템이 직접 설치하라는 NT Authority\System)

매우 긴 포스팅이 되었네요. 차후 이어질 SAV와 DACPAC을 모두 살펴보면, SCVMM의 서비스 템플릿을 사용중인 인프라를 대상으로 만들 수 있으실 것입니다.

image

시간이 되실 때, 해당 포스팅을 열어놓으시고, 차근차근 실습해보시면 좋을 것 같습니다. Microsoft의 클라우드는 하드웨어, 운영 체제는 당연한 형태이고 이 위에서 구동되는 서비스까지 템플릿화시킬 수 있는 방법론을 제공합니다. 다음 SAV 포스팅에서 또 살펴보시도록 하겠습니다. 미소