Real-World Windows Azure Development Guide – 원격 데스크톱

Cloud 2011. 7. 25. 13:00 Posted by 알 수 없는 사용자

Windows Azure Platform에서 최근 들어 가장 좋아진 기능을 꼽으라 한다면 바로 원격 데스크톱의 지원일 것입니다. 검증된 형태의 템플릿을 사용하는 경우에는 문제가 될 일이 거의 없지만, 여러분이 직접 Web Role이나 Worker Role을 만들거나, 혹은 이러한 템플릿 위에서 무언가 여러분만의 고유한 기능을 추가하려고 하면 실제로 배포하고 난 이후 전혀 예상치 못한 문제에 봉착하는 경우가 상당히 많습니다. 여러 가지 이슈들이 있을 수 있고, 그 때 마다 적절한 해결법은 모두 다릅니다. 이 경우 원격 데스크톱은 여러분에게 큰 보탬이 되어줄 것입니다.

보편적인 원격 데스크톱과 다른 점

같은 기술을 사용하지만, 서버에서 지원하는 원격 데스크톱과는 사실 많이 다릅니다. 일상적으로 우리는 원격 데스크톱을 관리 목적으로 사용하거나, 개발 목적으로 구축한 서버의 경우 한 발 더 나아가서 원격 데스크톱 위에서 프로그램을 긴급히 디버깅하거나 작성하는 일도 많이 합니다. 하지만 Windows Azure가 제공하는 원격 데스크톱은 어디까지나 문제 해결의 용도로만 사용해야 합니다.

이렇게 해야만 하는 가장 큰 이유는, Windows Azure는 처음부터 탄력성을 중시하는 시스템 운영 정책을 사용하기 때문에 예고 없이 개별 Virtual Machine이 업그레이드되거나, 순환되거나, 교체될 수 있고 또한 같은 일을 하는 Virtual Machine이 늘거나 줄어들 수도 있습니다. 이러한 과정에서 원격 데스크톱으로 재정의하거나 변경한 환경은 임의로 초기화되므로 원격 데스크톱으로 해결한 문제가 다시 원래 상태로 돌아오는 문제가 발생할 수 있습니다. 원격 데스크톱으로 해결할 수 있는 문제의 성격을 정확히 파악하고, 수행했던 작업을 여러분의 프로젝트에 다시 반영하는 과정이 이 때문에 반드시 필요합니다.

Windows Azure에서는 각각의 Virtual Machine이 우리가 생각하는 하나의 완벽한 서버의 개념이 아닌, 마치 응용프로그램이 사용하는 임시 자원과 비슷한 Scope에 놓여있기 때문에 전통적으로 우리가 잘 따르던 제한된 수의 서버를 이용한 서비스 프로그래밍 개념과는 많이 다른 것입니다.  원격 데스크톱 말고도 프로그래밍 방법에 관해서도 이 때문에 많은 도전을 받게 되어있습니다.

원격 데스크톱 지원을 Windows Azure 프로젝트에 추가하는 법

원격 데스크톱을 기존 Web Role Worker Role에 추가하기 위해서는 Windows Azure Tools for Visual Studio 1.3 버전 이상의 도구가 설치되어있고 이 버전의 SDK를 기반으로 프로젝트가 새로 만들어지거나 업그레이드되어야 합니다. 준비가 끝나면 다음의 단계를 따릅니다.

참고로 Windows Azure 프로젝트에 원격 데스크톱 지원을 추가할 수 있는 것은 프로젝트 속성 단계에서가 아니라 배포 직전에서의 단계입니다. 이 부분에 대한 혼동이 없도록 합니다.

Step 1: Windows Azure 프로젝트를 솔루션 탐색기에서 찾아 오른쪽 버튼으로 클릭한 후 나타나는 팝업 메뉴에서 게시 메뉴를 클릭합니다.


Step 2: 패키지만 만들 것인지, 또는 Visual Studio 안에서 배포와 함께 서비스 시작까지 자동으로 진행시킬 것인지를 묻는 대화 상자가 나타나는데, 라디오 버튼들의 상태와 관계없이 아래쪽의 Configure Remote Desktop connections 링크를 클릭할 수 있으므로 이 링크를 클릭합니다.

Step 3: 도구를 이용하여 생성한 적이 있었던 인증서와 시스템에 미리 설치된 인증서들이 열거되는 드롭 다운 박스를 클릭하면 아래와 같이 새 인증서를 생성할 수 있는 항목이 나타나는데 이 항목을 클릭합니다.


Step 4: 인증서의 Friendly Name을 입력하고 OK 버튼을 클릭합니다. 앞으로 이런 식으로 인증서를 만들어 활용할 일이 많을 것이므로, 서비스를 실행하려는 Windows Azure 계정의 이름과 프로젝트의 이름을 지정하여 Friendly Name을 지정해두면 인증서를 알아보기 쉽습니다. 이에 관해서는 여러분 나름의 규칙을 정해두기를 권장합니다.

Step 5: 새로 만든 인증서를 선택하고 View 버튼을 클릭합니다.



Step 6: 임시로 만든 인증서이므로 인증서가 유효하지 않다는 경고가 보이지만 Windows Azure에서 관리자 인증을 목적으로 사용하기 위한 인증서의 조건에는 부족하지 않습니다. 자세히 탭을 클릭하고 하단의 파일에 복사 버튼을 클릭합니다.


Step 7: 인증서 내보내기 마법사가 나타납니다. 다음 버튼을 클릭합니다.

Step 8: Windows Azure에 제공해야 하는 인증서는 개인 키 값을 포함하는 PFX 형식의 인증서이므로 아래 대화 상자에서 개인 키를 내보내도록 선택하고 다음 버튼을 클릭합니다.


Step 9: 개인 정보 교환 (PKCS-12) 형식을 사용하도록 지정하고, 추가 옵션 없이 다음 버튼을 클릭합니다.


Step 10: 개인 키에 포함할 비밀 번호를 지정합니다. 보안을 위하여 가능한 고유하면서도 유추가 어려운 여러분 만의 강력한 암호를 지정할 것을 권장합니다. 확인 암호까지 한 번 더 입력하고 다음 버튼을 클릭합니다.


Step 11: 내보낼 파일 경로를 지정하고 다음 버튼을 클릭합니다.

Step 12: 모든 사항을 확인하고 완료 버튼을 클릭하면 인증서 내보내기가 마무리 됩니다.


Step 13: 모든 설정을 저장하고 Step 3의 대화 상자로 다시 되돌아 와서, 아래와 같이 필요한 정보들을 입력합니다. 사용자 이름, 비밀 번호, 계정 만료 기간을 지정합니다. 계정 만료 기간은 여러분의 편의에 맞추어 입력합니다. 보안을 위해서는 계정 만료 기간을 짧게 설정하고, 관리자 포털 사이트에서 직접 기간 연장을 하는 것이 좋습니다. 모든 설정이 끝나면 OK 버튼을 클릭합니다.


Step 14: 이제 이 설정을 사용하기 위해서는 http://windows.azure.com/ 에 접속해서 방금 우리가 내보낸 PFX 인증서 파일을 Windows Azure Portal에 직접 등록해야 합니다. 사이트에 로그인 한 다음 Hosted Services, Storage Accounts & CDN 메뉴를 클릭하고, Hosted Services 메뉴를 클릭합니다. 이렇게 하면 아래와 같은 화면이 나타날 것입니다.

Step 15: 여러분의 Cloud Service를 호스팅할 Hosted Service 항목을 찾아, 하단의 Certificates 폴더를 클릭하면 상단의 리본 메뉴가 Add Certificate / Delete Certificate 버튼만 나타나도록 변경됩니다. 여기서 Add Certificate 버튼을 클릭하면 아래와 같이 Modal 대화 상자가 나타납니다. PFX 파일을 지정하고, 내보내기 때 지정한 비밀 번호를 입력 후 Create 버튼을 클릭합니다.

Step 16: 이제 해당 Cloud Service Production이나 Staging에 배포하고 나면 원격 데스크톱 연결을 테스트해볼 수 있습니다. 정상적으로 적용되었다면 도구 모음의 배열이 여러분이 접속하려는 해당 인스턴스를 클릭했을 때 다음과 같이 바뀌어 나타납니다.

Step 17: 아래는 실제로 접속한 화면의 예시입니다.

인증서에 대하여

원격 데스크톱을 적용해보고 잘 동작한다면 이제 좀 더 자신감을 가지고 디버깅을 시작할 수 있을 것입니다. 그러나 몇 가지 막연한 것도 있을 것인데, 특히 인증서에 관해서는 더더욱 그럴 것입니다. 만약 실수로 여러분이 내보낸 인증서가 사라지게 된다면 패키지를 만들어서 Azure에 게시할 수 있을까요? 일단은 가능합니다. 하지만 여러분의 마음이 놓일 수 있는 상황을 만들기 위해서는 이전에 언급했던 절차를 다시 진행해야 하는 번거로움이 따르므로 인증서 관리는 항상 신중히 해야 합니다.

그리고 관리자 권한으로 로그인할 수 있도록 지정한 계정의 만료일이 넘었을 때, 서비스를 다시 업그레이드하지 않고도 만료일이나 비밀 번호를 바꿀 수도 있으므로 이 부분에 대해서도 안심해도 되겠습니다.

Azure RDP 파일이 보통의 RDP 파일과 다른 점

Windows Azure의 경우 Load Balancer가 있기 때문에 각각의 개별 Virtual Machine이 직접 IP 주소를 노출하는 일이 없습니다. 그런데 어떻게 Windows Azure Management Portal에서 제공하는 RDP 파일을 통해서 정확히 해당 Instance에 접속할 수 있는 것일까요? 의문을 풀기 위해, Azure에서 사용하는 RDP 파일 형식에 대해서 잠시 살펴보기로 하겠습니다. 이 파일 형식을 정확히 이해하고 활용하실 수 있다면 관리 포털 사이트까지 들어가는 수고 없이 곧바로 여러분이 원하는 원격 데스크톱 세션을 만들 수도 있습니다.

full address:s:qrcode.cloudapp.net
username:s:********
LoadBalanceInfo:s:Cookie: mstshash=<Role Name>#<Instance Name>#Microsoft.WindowsAzure.Plugins.RemoteAccess.Rdp

RDP 파일 자체의 내용은 매우 단순합니다. Full address username은 여러분이 알고 있는 것과 같습니다. 하지만 LoadBalanceInfo 부분이 실제로 연결을 성립하는데 꼭 필요한 정보들이 담겨있는 부분입니다. <Role Name> Windows Azure Portal에서 접속하려는 Role의 이름으로, Windows Azure 프로젝트 내 Role 프로젝트의 이름과 일치하는 부분입니다. 그리고 Instance 이름은 현재 실행 중인 인스턴스의 이름을 의미하며, 보통 Role Name 뒤에 _IN_[n] 형태의 접미사가 붙고, n 값은 0부터 시작합니다. 그리고 #Microsoft.WindowsAzure.Plugins.RemoteAccess.Rdp 문자열을 지정하여 Windows Azure Load Balancer와 상호작용해야 함을 명시하고 있습니다.