서버 폭주에 대한 해결책 Windows Azure

(2010년 월간 웹 8월호 How to 테크닉 북에 기고 했던 원고입니다. 개발자 분들이 윈도우 애저로 개발하는 것을 이해하는데 조그만 도움이 되었으면 하는 바램에 올립니다.)

어떤 기술이 많이 이야기가 될 때에는 기존의 문제들을 그 기술로 인해서 해결할 가능성이 있기 때문에 그런 경우가 있다고 봅니다. 몇 년 사이에 많이 이야기 되고 있는 클라우드 컴퓨팅 역시 마찬가지로, 빠른 속도로 IT가 발달하면서 서비스 인프라에 대한 관리 부담은 심각한 문제가 되고 있습니다. 또한, 예측 하기 힘든 상황에서 사용자들이 늘어남으로 인해서 서버가 폭주하고, 서비스가 중단되는 사례를 주변에서 어렵지 않게 볼 수가 있습니다. 비즈니스 적인 측면으로 보자면 이와 같은 서비스 중단은 공급자에게 신뢰의 손상과 큰 이익 손실을 불러 일으킬 수 있으며, 서비스 이용자들에게는 큰 불편을 주게 됩니다.

여기에서는 이 같은 서버 폭주에 대한 해결책으로 마이크로소프트의 클라우드 플랫폼인 Windows Azure에 대해서 간단히 알아보고 이를 이용해서 개발 환경의 구축 및 간단한 애플리케이션을 제작해 하는 과정을 알아 보겠습니다.

글. 박중석(한국마이크로소프트 개발자 전도사)

목차

01. Windows Azure 알아보기
02. Windows Azure개발 환경 구축하기
03. Windows Azure로 개발 하기
04. Windows Azure로 클라우드에 배포 하기
05. 마치며

01. Windows Azure 알아보기

 

Windows Azure는 마이크로소프트에서 서비스 하고 있는 클라우드 플랫폼입니다. 클라우드라고 하면 흔히들 퍼블릭 클라우드나 프라이빗 클라우드로 구분을 지어서 이야기를 하곤 하는 데, 이를 클라우드 제공자가 어떤 서비스를 하기 위한 목적 인지로 나누어 생각해보면 Windows Azure는 마이크로소프트가 구축한 퍼블릭 클라우드 서비스라고 할 수 있습니다.

즉, Windows Azure 플랫폼을 이용하면 기존에 특정 서비스가 동작하기 위해서 개별적으로 서버를 구축하고, 관리 했던 번거로움 없이 단지 개발 하려고 하는 서비스 자체에만 집중해서 개발하고 클라우드 에는 완성된 애플리케이션을 올리고 서비스 할 수 있습니다. 클라우드 플랫폼이 지향하는 확장 성을 전세계에 있는 마이크로소프트 데이터 센터를 통해서 가능하게 하고, 또한 기존에 개발자들이 애플리케이션을 개발하던 경험(언어, 도구, 디버깅 등)을 그대로 활용할 수 있도록 했다는 장점이 있습니다.

<그림1> Windows Azure Platform 구성 요소

이를 위해 클라우드 운영체제 인 Windows Azure 를 비롯, 데이터베이스인 SQL Azure와 기존 On-Premises 와 Cloud 를 연동해주는 AppFabric 까지가 Windows Azure를 이루는 구성요소입니다. 그러면, 지금부터 Windows Azure 개발 환경을 구축하고 매우 간단히 애플리케이션을 만들고 이를 클라우드에 배포하는 과정을 진행해 보려고 합니다.

 

02. Windows Azure 개발 환경 구축하기

Windows Azure 개발 환경을 구축하기 위해서는 필요한 운영체제는 Windows Vista SP1, Windows Server 2008, Windows 7 중에 하나가 PC에 설치되어 있으면 됩니다. 그리고 Windows Azure 개발을 하기 위해서는 Visual Studio 2008 SP1이나 2010을 설치하고 최신 버전의 Windows Azure Tools 을 설치하면 됩니다.

해당 개발 툴의 라이선스가 없다면 Visual Studio 2010 시험 판 이나 무료로 사용할 수 있는 Visual Studio Web Developer Express 2010를 설치해도 Windows Azure 개발을 할 수 있습니다. Visual Web Developer Express 2010과 최신 버전의 Windows Azure Tools 은 마이크로소프트의 웹 플랫폼 인스톨러(Web Platform Installer)를 이용하면 한번에 쉽게 설치할 수 있습니다. (https://www.microsoft.com/express/Web)

<그림 2> 웹 플랫폼 인스톨러 설치한 후 개발자 도구에서 Visual Studio 2010을 선택한 화면

웹 플랫폼 인스톨러는 현재 사용자의 PC에 해당하는 애플리케이션이나 개발도구가 설치되어 있는지를 확인할 수 있으며, 특정 애플리케이션이 동작하기 위해서 미리 설치되어야 하는 프로그램도 자동으로 확인하고 설치를 해주기 때문에, 설치를 매우 편리하게 합니다. 또한, 설치한 프로그램의 업데이트가 있을 경우에도 웹 플랫폼 인스톨러를 통해서 쉽게 다운로드 후 최신 버전을 설치할 수 있습니다.

<그림 3> 웹 플랫폼 인스톨러를 통한 Visual Studio 2010 및 Windows Azure Tools 설치 화면

03. Windows Azure로 개발 하기

편의 상 개발 툴은 Visual Studio 2010을 이용해서 진행하도록 하겠습니다. 먼저 Windows Azure 애플리케이션을 작성하고 구동하기 위해서는 개발 툴을 관리자 모드로 실행을 합니다.

<그림 4> Visual Studio 2010을 관리자 권한으로 실행

File – New – Project 에서 Visual C# - Cloud – Windows Azure Cloud Service 를 선택하고 Name 에 편의 상 'HelloAzure' 라고 입력하고, OK 버튼을 누릅니다. Windows Azure Tools 을 설치하지 않았다면, OK 버튼을 누르면 Windows Azure Tools 의 설치 안내 화면이 나오게 됩니다.

<그림 5> Visual Studio 에서 Cloud 서비스 프로젝트를 선택

이제 원하는 클라우드 서비스 프로젝트를 추가해야 하는데, 클라우드에서 동작하는 프로젝트는 크게 Web Role과 Worker 롤로 나누어 집니다. Web Role은 서비스가 웹 상에 노출되어서 서비스 되며, Worker 롤은 시스템 서비스와 같이 내부 프로세스로 동작을 하게 됩니다. 여기에서는 간단한 서비스를 만들기 위해서 아무것도 추가하지 않은 상태로 OK 버튼을 누릅니다.

<그림 6> 클라우드 서비스 프로젝트에 추가할 프로젝트 선택하는 화면

Visual Studio의 우측 Solution Explorer 를 보면 HelloAzure 라는 프로젝트가 생긴 것을 볼 수 있으며 그 아래 Role 이라는 폴더와 ServiceConfiguration.cscfg 파일과 ServiceDefinition.csdef 라는 파일을 볼 수 있습니다. HelloAzure는 클라우드에 올릴 프로젝트가 패키징 될 프로젝트 이며, 각각의 서비스 파일들은 설정을 정의하고 구성하는데 쓰이게 됩니다.

<그림 7> Solution Explorer 에서 Windows Azure 프로젝트 구성 화면

이 솔루션에 Add – New Project를 통해서 Visual C# - Web – ASP.NET Empty Web Application을 선택 하고 이름은 HelloWebRole 정한 후에 OK 버튼을 클릭합니다.

<그림 8> Windows Azure 에 올릴 ASP.NET Empty 웹 애플리케이션 선택

HelloWebRole이라고 하는 빈 ASP.NET 웹 프로젝트가 추가가 되었고, 여기에 Add – New Item을 통해서 Web Form을 선택하고, 파일 이름은 기본으로 로딩되도록 Default.aspx로 정한 뒤, Add 버튼을 누릅니다.

<그림 9> Default.aspx 라는 이름의 Web Form 페이지 추가

Default.aspx 파일의 <div> 태그 안에 'Hello Azure!' 라고 입력을 하고, 잘 작동하는지 Default.aspx 파일 위에서 마우스 오른쪽 클릭을 한 후에 View in Browser로 실행해 봅니다. 잠시 후 Visual Studio에 내장된 가상 웹 서버가 동작하면서 Hello Azure! 가 localhost위에서 나오는 것을 보실 수 있습니다.

<그림 10> 웹 페이지에 Hello Azure 문구 입력

이제 이 애플리케이션을 클라우드로 올려보도록 하겠습니다. HelloAzure 프로젝트의 Role 폴더에서 마우스 오른쪽 버튼을 누른 후 Add – Web Role Project in Solution 을 선택 합니다. 조금 전에 작성한 HelloWebRole 프로젝트를 확인할 수 있으며 OK 버튼을 눌러서 이 프로젝트를 추가 합니다.

<그림 11> 같은 솔루션의 프로젝트 중에 클라우드에 올릴 것 선택

Role 폴더에 HelloWebRole 프로젝트가 추가된 것을 확인 할 수 있으며, 이제 추가된 HelloWebRole위에서 마우스 오른쪽 버튼을 눌러서 Property 를 선택 합니다. 해당 웹 애플리케이션이 클라우드에 올라가서 동작하기 위한 설정을 할 수 있으며, 보시면 이중에 서비스 될 Instance count 와 VM size가 각각 1과 Small로 되어 있고 이를 변경할 수 있는 것을 확인 합니다.

<그림 12> 클라우드에서 구동될 서비스의 환경 설정

클라우드에서 서버 사용량이 늘어날 때 이와 같이 설정 값을 변경하는 것으로 서비스를 하는 Instance 의 개수를 늘릴 수 있고, 서비스가 진행되는 머신의 성능(CPU, RAM, HDD)도 변경할 수 있게 됩니다. 테스트를 위해서 Instance 의 개수를 2로 변경을 하고서, HelloAzure 프로젝트 위에서 마우스 오른쪽 클릭 후 Debug – Start New Instance를 선택 하면, Debugging 모드로 HelloAzure 페이지가 Cloud 가상(Simulation) 환경에서 시작 됩니다.

<그림 13> 가상 클라우드 환경에서 구동되는 Hello Azure 서비스

작업 표시줄의 트레이에서 파란색 윈도우 아이콘으로 표시된 Development Fabric위에서 마우스 우측 버튼을 누르면 가상 클라우드에서 해당 애플리케이션이 어떻게 동작을 하는지를 확인 할 수 있습니다. 여기에서 Show Development Storage UI 및 Show Development Fabric UI를 각각 선택하면 로컬 PC의 가상 환경에서 동작하는 클라우드 애플리케이션의 상태를 확인 할 수 있습니다. 이 중 Development Storage 는 클라우드에서 파일이나 메시지등을 저장하는 용도로 사용되는 공간을 클라우드에 올리기 전에 로컬 환경에서 테스트를 동일하게 테스트 해볼 수 있습니다.

<그림 14> 가상 클라우드 환경의 Development Storage UI 화면

Development Fabric의 경우는 Role 설정에서 적용한 개수 대로 Instance가 떠서 각각의 서비스가 시작되고 동작하는 것을 확인할 수 있기 때문에, 개발의 편리성을 크게 높여준다고 할 수 있습니다. 또한 가상 클라우드 환경에서도 물론 기존 애플리케이션 개발처럼 코드 사이에 중단 점을 설정하고, 해당하는 부분의 디버깅을 할 수 있습니다.

<그림 15> 가상 클라우드 환경의 Development Fabric UI 화면

04. Windows Azure로 클라우드에 배포 하기

1) Windows Azure 계정 만들기

작성한 애플리케이션을 Windows Azure 에 업로드 하기 위해서는 먼저 Windows Azure를 사용할 수 있도록 구매를 해야 합니다. 자신에게 맞는 각각의 시나리오 별로 구매를 할 수 있지만, 여기에서는 무료로 사용할 수 있는 Introductory Special 의 사용권을 구매 하겠습니다. (MSDN 계정이 있으신 분은 MSDN 계정 사용자 혜택으로 일정기간 무료로 사용할 수 있는 옵션을 확인 하시길 바랍니다.) 브라우저로 Microsoft Online Service Customer Portal로 갑니다. (https://mocp.microsoftonline.com)

국가 설정을 하는 화면에서는 현재 한국에는 Windows Azure가 출시가 되지 않았기 때문에, 국가를 미국 등 현재 Windows Azure가 출시된 국가를 선택하고 Continue 버튼을 누른 후에, Windows Azure Platform 중에 View service details를 선택 한 후에 Windows Azure Platform Introductory Special에서 Buy Now버튼을 클릭합니다.

<그림 16> Windows Azure 구매를 할 수 있는 Microsoft Online Service Customer Portal

이후에 사용할 수 있는 Live ID 를 입력하시면, 사용자 정보를 입력 하는 화면이 나오게 되며, 알고 계시는 해당 지역의 주소를 입력 하시면, Windows Azure를 이용할 회사의 정보를 입력 하고 구매 화면이 나오게 됩니다. 체크 박스를 선택한 후에 Checkout 버튼을 누르면 신용 카드(Credit card) 번호 및 구매 요청서 번호(Purchase Order No.)를 입력 할 수 있습니다.

<그림 17> Windows Azure 계정의 사용자 정보 입력

처음에 선택한 국가에서 결제가 가능한 신용 카드 정보를 입력하면 해당 계정으로 Windows Azure를 이용할 준비가 끝나게 됩니다. 결제 전에 반드시 주의하실 점은 해외 결제 시에 1$ 정도의 수수료가 있을 수도 있으며, 실제 사용 시에는 무료로 제공하는 서비스 범위 안에서만 비용이 청구 되지 않습니다. (주소지가 신용카드의 Billing Address와 일치하지 않으면 등록 진행이 되지 않을 수 있습니다.)

Windows Azure Introductory Special의 경우는 한정된 Resource로 한 달에 25시간 동안 한 개의 Instance를 Windows Azure 상에 올리는 것이 가능하므로, 실제 서비스 운영의 목적으로 사용하기 보다는 구현한 클라우드 애플리케이션을 테스트 하는 용도로서 활용을 하시는 것이 적절 합니다. 사용 시간 및 허용 범위를 초과하면 등록 시 사용한 신용카드로 비용이 청구되므로 매우 주의가 필요합니다.

2) Windows Azure 패키지 만들기

계정을 만들고 난 후에는 클라우드에 배포를 하기 위해서는 HelloAzure 프로젝트 위에서 마우스 오른쪽 버튼을 클릭하시고, Publish를 선택 합니다. 이중 Create Service Package Only는 배포할 패키지만 생성하는 것이고, Deploy your Cloud Service to Windows Azure는 생성한 패기지를 Visual Studio 내에서 자동으로 배포까지 진행 하는 것 입니다.

배포를 자동하화 하기 위해서는 인증서을 만들고 진행을 하면 되며, 여기에서는 패키지만 만들도록 하겠습니다. Create Service Package Only를 선택 후 OK 버튼을 클릭합니다.

<그림 18> 클라우드 서비스를 배포 하기 위한 패키지 작성 화면

배포를 하기 위한 패키지(HelloAzure)가 만들어지고 자동으로 해당 패키지가 생성된 폴더가 팝업으로 뜨게 됩니다. 여기에서 HelloAzure 패키지 파일은 클라우드에서 올라가서 동작을 하게 될 서비스 파일이며, ServiceConfiguration은 이것이 어떻게 동작을 할지에 대한 XML로 된 설정 파일 입니다. 이 설정 파일을 이용하면 서버의 사용량에 따라서 클라우드에 올라간 서비스 개수를 쉽게 변경해서 사용량에 맞도록 조정이 가능 합니다.

<그림 19> 클라우드에 올릴 수 있는 패키지 파일과 설정 파일

3) 클라우드에 배포하기

클라우드에 서비스를 올리기 위해서는 패키지된 파일을 Windows Azure 포털 사이트에 업로드를 해야 합니다. Visual Studio 에서 한번에 올라가도록 자동화를 할 수도 있지만 여기에서는 웹 사이트에서 접속해서 수동으로 업로드 하겠습니다. 먼저 Windows Azure 포털 사이트(https://windows.azure.com) 에 접속하고, 조금 전에 등록한 Live ID로 사이트에 로그인 합니다. 그러면 자신이 등록한 계정이 화면에 보이게 됩니다.

<그림 20> Windows Azure를 사용할 수 있도록 등록 된 계정 목록

등록한 계정을 선택하면 서비스를 올릴 수 있는 페이지가 나오게 되며, 새로운 서비스를 등록 하기 위해서 New Service 를 클릭하면, Storage Account와 Hosted Service가 나오게 됩니다. 전자는 클라우드 서비스에서 사용할 저장소를 위한 계정이며, 후자는 실제 클라우드 서비스가 올라갈 공간 입니다. 이번에 올릴 서비스는 특별히 저장소를 사용하지 않기 때문에 Hosted Services를 선택합니다.

<그림 21> Windows Azure 용 Storage Account와 Hosted Services

Service Label과 Service Description 을 구분할 수 있는 대로 입력하고 나면, 실제 Windows Azure에 올린 서비스를 접근할 수 있는 고유한 URL을 넣어주어야 합니다. 하단의 Hosted Service Affinity Group 설정은 서비스를 전세계의 어느 지역을 대상으로 할 것인지를 선택 하는 것이며, 이전에 올린 서비스와 같이 연동된다면 이를 그룹화 하면 됩니다. 이제 Create 버튼을 눌러서 서비스를 올릴 공간을 생성 합니다.

<그림 22> 클라우드 서비스를 접근할 수 있는 URL과 배포할 위치 설정

이제 클라우드에 서비스를 배포 할 수 있고, 해당 서비스가 어떤 상태인지 확인할 수 있는 화면이 나오게 됩니다. Production 공간에 있는 Deploy 버튼을 클릭한 후에 나오는 페이지에 패키징 된 파일과 설정 파일을 각각 업로드 하고, 서비스를 개시할 수 있습니다. Run 버튼을 누르면 해당 서비스가 Deploy 되는 과정을 실시간으로 볼 수 있으며, Deploy 된 상태에 따라서 Initializing – Busy 단계를 거친 후에 완료인 Ready 단계가 됩니다.

<그림 23> 클라우드 서비스의 배포 및 상태 확인을 위한 페이지

모니터링 API를 통해서 서버가 폭주가 되는지 여부를 확인 후 필요하다면 서비스 개수를 늘리기 위해서는 실 시간으로Hosted Service 페이지의 Configure 메뉴나 Windows Azure개발용 API를 이용해서 쉽게 해당 서비스의 설정을 변경할 수 있습니다. 그리고 설정의 변경 시에 서비스가 중단 되는 일 없이 진행을 할 수 있도록 Production 공간 외에 Staging 공간이 있어서 Staging에 배포를 한 후에 문제가 없는 것을 확인 후 손쉽게 이를 교체할 수 있도록 되어 있습니다.

<그림 24> 실시간으로 클라우드 서비스의 설정을 변경

05. 마치며

지금까지 서버 폭주에 대한 해결책으로서의 마이크로소프트 클라우드 플랫폼 Windows Azure에 대해서 살펴 보았습니다. Windows Azure를 이용한 클라우드 서비스는 유연한 인프라 관리를 가능하게 함으로서, 투자를 줄일 수 있어 비즈니스의 위험성을 줄여주며, 나아가 비즈니스 자체에 더욱 집중할 수 있습니다. 또한 Windows Azure는 기존의 개발자들의 경험을 그대로 활용할 수 있고, 이는 상황에 따라서 클라우드와 On-Premise 간의 이동을 쉽게 할 수 있습니다. 아직 Windows Azure가 국내에 정식으로 출시가 되지 않아서 국내 대상의 서비스로 활용 하기에는 어려움이 있지만, 글로벌 비즈니스를 고려하는 업체라면 강력한 클라우드 플랫폼으로서 좋은 선택이 될 것으로 생각 합니다.