'Windows Azure'에 해당되는 글 125건

  1. 2013.10.12 ASP.NET을 이용한 이식성 높은 클라우드 서비스 개발하기
  2. 2013.09.14 Microsoft TechDays 2013 Korea
  3. 2013.09.13 2013년 9월 Windows Azure 커뮤니티 캠프
  4. 2013.07.11 Windows Azure 커뮤니티 온라인 캠프 (2013년 7월)
  5. 2013.04.16 Windows Azure Lounge - Global Windows Azure Bootcamp in Korea
  6. 2013.04.01 Windows Azure Virtual Machine을 위한 FileZilla Server 방화벽 설정법
  7. 2013.03.31 Windows Azure를 통한 클라우드 서비스 확장성 포스터
  8. 2013.03.08 Azure 테이블 저장소 레시피 - StartsWith 구현하기
  9. 2013.03.07 Cloud Service 레시피 - Windows Azure Cloud Service 프로젝트 안에서 실행 환경을 구분하는 방법
  10. 2013.02.26 Windows Azure Worker Role에 여러 진입점 클래스가 있는 경우
  11. 2013.02.03 Azure BLOB 저장소 레시피 - 모바일 홈페이지 만들기
  12. 2013.02.03 Azure 가상 컴퓨터 레시피 - 지역 설정 업데이트하기
  13. 2013.02.01 Windows Azure 사용 후기도 올리고 경품도 가져가세요!
  14. 2012.12.06 Azure Camp @ 인하대 - 리눅스, Windows Azure를 만나다
  15. 2012.12.03 Windows Azure Virtual Machine에 Apache 2 + PHP 5 + Cubrid + XE 설치하기
  16. 2012.11.21 Management Portal에서 미디어 서비스 관리하기
  17. 2012.11.01 2012년 11월 Windows Azure 관련 소식 종합
  18. 2012.10.21 David Chappell의 Windows Azure Platform 강연회에 초대합니다.
  19. 2012.09.26 Windows Azure 웹 캐스트 (2)
  20. 2012.08.18 같은 데이터센터 내의 서로 다른 Storage 계정을 빠르게 동기화하는 방법
  21. 2012.08.06 클라우드 시대의 피아식별: Access Control #3
  22. 2012.08.02 Windows Azure 관리자 포탈 사이트에 대하여
  23. 2012.07.17 Windows 8에서 Hyper-V를 시작할 수 없는 경우
  24. 2012.07.13 Windows Azure Media Service 활용하기
  25. 2012.06.25 Windows Azure에서 XE 설치하고 실행하기 (2)
  26. 2012.06.10 Windows Azure Web Site로 블로그 만들기 (2)
  27. 2012.06.07 Windows Azure 국내 출시 및 IaaS 지원 추가
  28. 2012.05.15 공동 관리자 기능 활용하기
  29. 2012.05.14 VM Role 생성을 위한 가상 하드 디스크 템플릿 파일
  30. 2012.04.17 ASP.NET Universal Provider 소개
PaaS2013. 10. 12. 21:00

요즈음은 Infrastructure as a Service를 이용하여 VM의 Mobility를 통한 클라우드 서비스 사업자 간 이동 및 이전이 요즈음 주목 받고 있습니다. 익히 잘 알려진대로, Windows Azure의 경우 사설 혹은 기업 데이터센터 구축을 위하여 사용하는 Hyper-V 환경의 가상 PC를 Windows Azure로 진출시키거나 역으로 가져오는 등의 기능은 상당히 잘 알려져 있어서 많이들 이용하고 계실 것 같습니다.

그런데 Platform as a Service는 이런 부분에서 확실한 이동성을 보장하기 많이 어렵다는 것이 문제가 됩니다. 특히 비즈니스 로직을 내부에 많이 포함하고 있는 클라우드 응용프로그램일 수록 해당 클라우드 서비스에 종속적이기 때문에 클라우드 사업자간 이동이 훨씬 더 어렵습니다. 물론, 이를 극복하기 위하여 Dependency Injection이나 Inversion of Control을 이용하여 클라우드 사업자들이 제공하는 SDK의 공통 분모를 추출하여 그 대상으로 삼는 것도 가능한 전략이기는 하겠습니다만 사실 쉽지 않습니다.

좀 더 현실적이고 직관적인 방법이 없을까 많이들 고민하시는 데에 어느정도 도움이 될까 하여 한 가지 방안을 제시해 보겠습니다. 바로 ASP.NET과 Web Deploy를 이용한 개발입니다.

왜 ASP.NET과 Web Deploy를 사용하는가 - ASP.NET을 사용할 수 있는 환경의 다양성

PHP, Node.js, Ruby on Rails 등 웹 세계에서 유명한 프레임워크나 개발 환경이 많이 있습니다만 상대적으로 ASP.NET은 늘 저평가되어있습니다. 특히 ASP.NET을 버전 1.0~2.0 시절의 Web Form과 연결하여 선입견을 가지는 경우가 무척 많습니다. 그렇지만 이전부터 필자가 계속 강조해왔던 NuGet, Web Developer Express 등 다양한 OSS에 친화적인 기술들과의 결합과 ASP.NET MVC의 등장은 이 선입견에 묻혀서 거의 알려지지 않은 경우가 많습니다. (특히 국내에서는 더욱 그렇지요.)

그러나 이런 와중에 생각보다 ASP.NET의 입지는 넓습니다. Microsoft 기술과 가장 친화적이지 않을 것 같은 Amazon의 BeansTalk가 ASP.NET Web Deploy 패키지를 사용한 PaaS 배포 기법을 전면에서 지원하고 있으며, 사용 중인 환경이 Linux인 경우 다양한 방법으로 Mono ASP.NET 런타임과 결합하여 ASP.NET 웹 사이트를 호스팅할 수 있습니다. 그리고 Windows Azure는 Web Site와 Cloud Service를 이용하여 각각 웹 사이트를 호스팅할 수 있는 방법을 제공합니다. 멀리 가지 않아도 시중에 나와있는 웹 호스팅 서비스는 모두 FTP를 통한 ASP.NET 웹 사이트 배포까지 지원합니다. 수단은 얼마든지 많고, 남는 것은 전략의 수립에 관한 부분만이 남는 셈입니다.

왜 ASP.NET과 Web Deploy를 사용하는가 - 단일 코드 베이스 유지

ASP.NET을 이용하여 독립적으로 실행할 수 있는 Web Application Project를 만들어두면, Public Cloud만을 이용해서 서비스를 구축하였을 때 간간히 문제가 발생하는 특정 데이터센터, 혹은 특정 클라우드 서비스의 장애로 인해서 전체 서비스가 중단되는 사고로부터 좀 더 자유로워질 수 있습니다.

여러 위치에 분산된 응용프로그램을 배포하는 것은 기본적으로 매우 어려운 작업입니다. 그리고 이 어려운 작업의 난해함을 지수승으로 더 복잡하게 만드는 것은 바로 클라우드 서비스 사업자 간의 고유한 기능 집합 때문입니다. 이 문제를 해결하기 위해서는 사업자 간 이해 관계가 비교적 덜 연결되어있으면서도 구성의 차이가 거의 없는 기술을 택하는 것이 바람직한데, 여기에 들 수 있는 후보로는 ASP.NET을 포함하여 다수의 기술들이 있습니다. 그 중에서도 오늘 소개하려는 ASP.NET은 수준 높은 IDE 지원과 다양한 OSS 프로젝트와의 연계가 가능하기 때문에 유용한 점이 많습니다.

왜 ASP.NET과 Web Deploy를 사용하는가 - 배포 시의 문제점을 최소화

기능 상의 유용함 이외에도, 스스로 스케줄링을 해야 하는 Daemon Type의 서비스 프로세스가 아닌 RPC나 REST 형태의 시스템일 경우 ASP.NET을 사용하여 프로그래밍하고 Visual Studio의 지원을 받을 때의 큰 이점이 하나 더 있습니다. 바로 배포 시의 문제점을 최소화할 수 있다는 것입니다.

ASP.NET Web Deploy 및 관련 프로세스들은 패키지로 만들 때, 종속성에 관련된 모든 문제를 예방할 수 있도록, 웹 프로젝트와 연관성이 있는 모든 종속성 관계 상의 파일을 자동으로 복사하여 패키지에 포함시키는 정책을 사용합니다. 이러한 특징 때문에, ASP.NET MVC나 Razor의 최신 버전이 처음 .NET Framework가 배포된 이후에 바뀌더라도 최신 기능을 사용하면서도 배포 상의 DLL 버전 차로 인한 문제가 발생할 가능성이 높지 않습니다.

클라우드 서비스 별 배포 방법 - Amazon BeansTalk

우선 Amazon BeansTalk의 경우를 예로 들어보도록 하겠습니다. Amazon BeansTalk는 Visual Studio에 추가 기능으로 설치할 수 있는 Toolkit을 통한 배포/모니터링과 Management Console (Web)를 통한 패키지 파일 업로드 방식의 배포를 모두 지원합니다.

웹 프로젝트를 만들고, 아래 화면과 같이 배포 프로필을 Web Deploy 패키지로 만드는 것으로 설정한 다음, 지정된 위치에 패키지 파일을 만들도록 합니다. 패키지 파일은 ZIP 파일입니다.

만들어진 파일을 AWS Management Console로 이동하여 다음과 같이 업로드를 시작합니다.

업로드 완료 후 배포 프로세스가 시작되면 다음과 같이 진행 상황이 표시됩니다.

잠시 기다리면 다음과 같이 정상 배포가 완료되었음을 알리는 화면이 표시됩니다.

그리고 로드 밸런서 앞으로 부여된 FQDN 앞으로 접속하면 다음과 같이 로컬 개발 환경에서 개발할 때와 비슷한 응용프로그램이 실제 클라우드 서비스에서 실행 중인 것을 볼 수 있습니다.

BeansTalk의 멤버 노드로 참여하는 VM 인스턴스들이 있다면 여느 PaaS 플랫폼들과 마찬가지로 모든 배포를 자동화하여 처리하므로 배포 프로세스의 상당 부분을 쉽게 완료할 수 있습니다.

클라우드 서비스 별 배포 방법 - Azure Web Site

이번에는 Azure Web Site를 위한 배포 방법을 살펴보도록 하겠습니다. Visual Studio에서 앞의 경우와 마찬가지로 웹 게시 대화 상자를 띄운 다음, 가져오기 버튼을 클릭합니다.

 

처음 이 기능을 실행하면 배포 프로필을 한 번도 사용한 적이 없으므로 아래와 같이 빈 목록이 나타나게 됩니다. Windows Azure 구독 추가 링크 (드롭 다운 상자 아래)를 클릭합니다.

 

Windows Azure 구독 가져오기 대화 상자가 나타나면 구독 파일 다운로드 링크를 클릭합니다.

 

로그인 페이지에서 로그인을 완료하면 로그인한 Microsoft ID와 연결된 모든 Windows Azure Web Site 프로필 정보를 취합한 통합 프로필 파일의 다운로드를 시작하게 됩니다.

 

앞의 대화 상자로 되돌아와서, publishsettings 파일을 다시 지정하고, 가져오기 버튼을 클릭합니다. 잠시 기다리면 지정한 Live ID로 만든 여러 가입 상의 여러 Azure Web Site에 대한 정보가 한번에 나타납니다. 관리자 권한만을 가지고 있었다고 할지라도 여기에 한번에 나타나므로 손쉽게 배포를 진행할 수 있고, 이 과정 이후에 따로 웹 사이트를 새로 만들더라도 다시 이 대화 상자만 띄우면 목록이 새로 업데이트됩니다.

 

이와 같이 설정을 마무리하고 연결에 이상이 없는지 유효성 검사 버튼을 클릭하여 녹색 체크 마크가 나타나면 배포를 위한 연결이 성립된 것으로, 계속 진행해도 좋습니다.

 

클라우드 서비스 별 배포 방법 - Azure Cloud Service / Web Role

기존에 만들어진 ASP.NET 웹 사이트 프로젝트를 Web Role로 변환하여 내보내는 작업은 생각보다 어렵지 않습니다. 기술적인 고려 사항을 제외하면, Web Role용 프로젝트는 Beans Talk의 경우와 마찬가지로 Azure Cloud Service만을 위해서 무언가 꼭 추가해야 하거나 심각하게 변경해야 할 것이 전혀 없습니다.

Windows Azure Tools 최신 버전을 설치한 다음, 클라우드 서비스 프로젝트를 생성할 때 아래와 같이 아무것도 추가하지 않은 상태로 확인 버튼을 클릭합니다. 기존 프로젝트를 가져오기 위해서입니다.

 

그러면 멤버 역할이 없는 상태의 빈 클라우드 서비스 프로젝트가 만들어지게 됩니다. 이제 솔루션 탐색기의 역할 폴더를 오른쪽 버튼으로 클릭하고 아래 그림과 같은 순서로 팝업 메뉴를 접근합니다.

 

그러면 아직 지금 클라우드 서비스와 연결된 적이 없는 프로젝트의 목록이 나타나게 됩니다. 항목을 선택하여 클라우드 서비스 프로젝트로 가져옵니다.

 

정상적으로 가져오게 되면 다음과 같이 솔루션 탐색기의 클라우드 서비스 프로젝트 아래의 역할 폴더에 프로젝트 이름이 나타나면서 클라우드 서비스의 웹 역할로 등록됩니다.

 

이제 Azure Cloud Service로 배포하기 위하여 패키지를 만들 차례입니다. 패키지를 만들어서 Azure Management Portal을 이용하여 업로드를 해도 좋고, 사전에 인증서 및 계정 연동을 미리 구성하여 Visual Studio에서 진행해도 상관 없습니다. 여기서는 패키지 만들기 기능으로 배포를 해보겠습니다. 클라우드 서비스 프로젝트를 오른쪽 버튼으로 클릭한 다음 패키지 메뉴를 클릭합니다.

 

그러면 배포 대화 상자가 나타나게 됩니다. 각각의 드롭 다운 상자의 의미는 어렵지 않습니다. 서비스 구성이란 클라우드 서비스의 구성을 의미하는 것이고, 빌드 구성은 각 역할과 연결된 C#이나 VB.NET 프로젝트들의 빌드 구성을 의미하는 것으로 양쪽은 서로 독립적인 관계이므로 적절한 옵션을 선택합니다. 설정을 확인한 다음 패키지 버튼을 클릭합니다.

 

빌드 상의 오류가 없으면 탐색기 창이 열리면서 .CSCFG 파일과 .CSPKG 파일이 표시됩니다. 이 파일을 다루기 쉬운 위치로 이동시켜 Windows Azure Management Portal에서 클라우드 서비스를 만든 다음 게시합니다.

 

 

고려할 사항들

전통적인 웹 응용프로그램들과는 달리 클라우드 서비스들은 단일 인스턴스에서 실행하는 것 보다는 로드 밸런싱을 전제로 여러 인스턴스에서 실행하는 것을 기준으로 생각합니다. 그렇기 때문에, 전통적인 웹 기반 응용프로그램을 그대로 전환하는 것은 생각보다 쉽지 않습니다. 특히, 컴퓨터 자체적으로 업로드한 파일을 보관하거나, 서버 컴퓨터의 상태에 의존적인 웹 응용프로그램은 클라우드 기반의 서비스로 이동하기 전에 적절한 보완이 반드시 필요합니다.

그리고 여러 위치에 클라우드 서비스를 배포하고 관리하기 위해서는 자동화된 빌드, 배포, 모니터링 도구가 필요합니다. 각각의 개별 클라우드 서비스들이 제공하는 REST API를 이용하는 도구를 직접 만들 수도 있지만, 재미있는 것은 대다수의 클라우드 서비스 공급자들이 Windows에서는 PowerShell에 대응하는 모듈을 개발하여 배포하고 있다는 것이고, Unix나 Linux에서는 node.js의 클라이언트 기반 런타임을 개발하여 배포하는 일이 많다는 점입니다.

이러한 특징들을 이용하여, 여러 클라우드 서비스를 손쉽게 관리할 수 있는 노하우를 개발하여 여러분의 개발 및 운영 프로세스에 자연스럽게 통합시킬 수 있을 것으로 기대합니다.

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

이벤트2013. 9. 14. 14:27

클라우드 서비스 (PaaS)를 이용한 확장성있는 서비스 개발

http://channel9.msdn.com/Events/TechDays/TechDays-2013-Korea/Paas-1-2-

http://channel9.msdn.com/Events/TechDays/TechDays-2013-Korea/pass-2-2-


Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

이벤트2013. 9. 13. 01:00
top.jpg
Windows Azure 클라우드 서비스를 무료로 체험하실 수 있는 절호의 기회!
온라인 캠프 참여 후, 후기만 작성하면 Microsoft 무선 마우스!! 최우수 후기로 선정되면 XBOX360 Kinect!!!
온라인으로 언제 어디서나 Azure를 만나는 Windows Azure 커뮤니티 온라인 캠프, 지금 바로 참여하세요!
but01.jpg
Windows Azure 커뮤니티 온라인 캠프
참가대상 Windows Azure 체험을 원하시는 커뮤니티 회원
(선착순 40명 마감, 이전 캠프 참여자의 중복 참여 가능)
신청방법 Onoffmix에서 참석 신청 이용
참여자발표 온오프믹스 웹 페이지 공지 후 개별 참석 메일 전달
캠프기간 2013년 9월 25일(수) 오후 6시 ~ 2013년 9월 27일(금) 오전 9시
캠프미션 [3기 9차] Windows Azure 가상머신과 Active Directory 서비스
Azure 포털에 만들어진 가상머신과 Active Directory 서비스를 이용해 체험(참석자 대상 메일 전달)
후기응모기간 2013년 9월 29일(일) 24:00까지 후기를 적어 주셔야 합니다.
후기응모방법 Azure 커뮤니티에서 지정한 게시판에 후기를 작성해 주시면 됩니다(블로그에도 올리시면 가산점!)
- 9차 캠프 후기 작성 위치 - SQLER.com Windows Azure 게시판
온라인 캠프 진행 형식
메일을 통해
전달된 Microsoft
계정으로
Windows Azure
관리 포털에
로그인
bullet01.jpg
Azure 포털에
기 생성된
다양한
클라우드
서비스
체험
bullet01.jpg
캠프
기간 내에
Windows Azure
서비스를
체험하고
후기 작성!
bullet01.jpg
Microsoft
무선 마우스
받고,
XBOX360 Kinect
최우수 후기
선정 기다리기
gift.jpg
title01.jpg
Windows Azure 동영상 강좌 및 관련 Q&A 게시판을 참고하시면 더 다양하고 즐거운 캠프를 즐기실 수 있습니다.
Windows Azure
동영상 강좌
arrow01.png
 
Taeyo.NET
커뮤니티
arrow01.png
 
네이버 Windows Azure Cafe
arrow01.png
 
SQLER.com
Azure 커뮤니티
arrow01.png
 
Windows Azure
공식웹사이트
arrow01.png
 
 

 

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

이벤트2013. 7. 11. 18:26
top.jpg
Windows Azure 클라우드 서비스를 무료로 체험하실 수 있는 절호의 기회!
온라인 캠프 참여 후, 후기만 작성하면 Microsoft 무선 마우스!! 최우수 후기로 선정되면 XBOX360 Kinect!!!
온라인으로 언제 어디서나 Azure를 만나는 Windows Azure 커뮤니티 온라인 캠프, 지금 바로 참여하세요!
but01.jpg
Windows Azure 커뮤니티 온라인 캠프
참가대상 Windows Azure 체험을 원하시는 커뮤니티 회원
(선착순 40명 마감, 이전 캠프 참여자의 중복 참여 가능)
신청방법 Onoffmix에서 참석 신청 이용
참여자발표 온오프믹스 웹 페이지 공지 후 개별 참석 메일 전달
캠프기간 2013년 7월 17일(수) 오후 6시 ~ 2013년 7월 19일(금) 오전 9시
캠프미션 [3기 7차] Windows Azure 가상머신과 가상네트워크
Azure 포털에 만들어진 가상머신과 가상 네트워크를 이용해 체험(참석자 대상 메일 전달)
후기응모기간 2013년 7월 21일(일) 24:00까지 후기를 적어 주셔야 합니다.
후기응모방법 Azure 커뮤니티에서 지정한 게시판에 후기를 작성해 주시면 됩니다(블로그에도 올리시면 가산점!)
- 7차 캠프 후기 작성 위치 - 네이버 Windows Azure Cafe Azure 사용후기 게시판
온라인 캠프 진행 형식
메일을 통해
전달된 Microsoft
계정으로
Windows Azure
관리 포털에
로그인
bullet01.jpg
Azure 포털에
기 생성된
다양한
클라우드
서비스
체험
bullet01.jpg
캠프
기간 내에
Windows Azure
서비스를
체험하고
후기 작성!
bullet01.jpg
Microsoft
무선 마우스
받고,
XBOX360 Kinect
최우수 후기
선정 기다리기
gift.jpg
title01.jpg
Windows Azure 동영상 강좌 및 관련 Q&A 게시판을 참고하시면 더 다양하고 즐거운 캠프를 즐기실 수 있습니다.
Windows Azure
동영상 강좌
arrow01.png
 
Taeyo.NET
커뮤니티
arrow01.png
 
네이버 Windows Azure Cafe
arrow01.png
 
SQLER.com
Azure 커뮤니티
arrow01.png
 
Windows Azure
공식웹사이트
arrow01.png
 
 

 

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

이벤트2013. 4. 16. 21:17



전세계 90개국 이상에서 동시에 열리는 Global Windows Azure Bootcamp의 한국 행사인 Windows Azure Lounge가 2013년 4월 27일 토요일 오전 9시부터 오후 6시까지 서울시 강남구 역삼동 (주)세완/세완교육센터에서 열립니다. 행사에 등록하시려면 아래 웹 페이지에 방문하여 주십시오.

행사 등록 신청 바로가기 - http://onoffmix.com/event/14374

행사 등록 신청 바로가기 - http://onoffmix.com/event/14374

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

IaaS2013. 4. 1. 10:01

안녕하세요. Windows Azure MVP 남정현입니다.

오늘 살펴보려는 내용은 Windows Azure Virtual Machine 환경에서 FileZilla Server를 구축하려는 경우 어떻게 해야 파일 전송 채널들을 열 수 있는지 그 방법을 살펴보려고 합니다. FileZilla Server는 기본적으로 FTP (File Transfer Protocol)를 구현하는 서버이며 무료로 사용 가능한 서버이고 다양하고 풍부한 기능을 제공하면서도 안정적으로 작동해서 많은 곳에서 널리 사용되고 있습니다.

우선 FTP 서버가 어떻게 동작하는지 잠시 상기해볼 필요가 있습니다. FTP 서버는 기본적으로 명령어를 주고 받기 위한 채널 포트인 21번 포트가 가장 핵심이 됩니다. 최초의 연결도 이 21번 포트를 시작으로 이루어지고 이후에 모든 데이터 전송은 별도의 포트를 통해서 이루어지게 됩니다. FTP 서버를 방화벽 뒤에 배치하는 것이 왜 까다로운가 하면 바로 이러한 FTP의 설계 때문입니다. 데이터 전송을 위한 포트를 FTP 서버의 사용량에 맞추어 개방을 해야 하기 때문입니다. 그래서 서버가 사전에 TCP 포트 대역을 정해놓고 지정된 범위에서만 데이터 전송을 위한 채널을 제공하는 Passive Mode가 많이 사용됩니다.

1단계: FileZilla Server Passive Mode 설정

기본적으로 Passive Mode를 사용하는 것은 특이 사항이 없습니다만, Windows Azure Virtual Machine의 경우 Windows Azure Virtual Machine이 제공하는 기본 방화벽과 Windows Server의 기본 방화벽, 그리고 FileZilla Server만을 위한 특별한 설정이 더해져야 하기 때문에 따로 아티클로 정리할 필요가 있어 이번 글을 작성하게 되었습니다.

FileZilla 서버에 사용자 계정을 등록하고 홈 디렉터리를 설정하는 방법은 생략하겠습니다. 이 과정이 되어있어야 실제 접속과 테스트가 가능하니 설정되어있지 않은 경우 반드시 사용자 계정과 홈 디렉터리 설정을 먼저 해주셔야 합니다. 이 설정이 끝난 상태에서, FileZilla Server Options 페이지로 들어가서 아래 그림과 같이 Passive Mode Settings 항목을 클릭하여 주십시오.

위의 그림에 나타난 것 처럼, 다음의 설정 사항들을 확인하여 적절히 수정해야 합니다.

  • Use Custom Port Range: 체크하시고 적절한 포트 대역을 지정합니다. Windows Server 및 Windows Azure Virtual Machine의 방화벽 설정에 모두 등록되지 않은 대역을 지정합니다. Windows Azure Virtual Machine의 방화벽 설정은 범위 설정이 아니라 1개 포트씩 따로 등록하도록 되어있고 등록과 할당에 시간이 걸리니 이를 감안하시어 2개~3개 정도의 포트만 개방하는 것이 작업 시간 단축에 도움이 됩니다.
  • IPv4 specific 아래의 Retrieve external IP address from: 기본값은 이 항목으로 설정되어있습니다. 그러나 간혹 이 설정으로 IP 주소를 얻어올 수 없는 경우, Use the following IP 항목의 라디오 버튼을 체크하고 이 서비스에 접속할 수 있는 외부 IP 주소 (Virtual IP)를 직접 설정하거나 FQDN을 지정하여 문제를 해결할 수 있습니다.
  • Don't use external IP for local connections: 이 항목도 체크합니다.
2단계: Windows Server 방화벽 구성

위와 같이 설정이 끝나면, Windows 방화벽 설정으로 이동하여 방화벽에 FileZilla Server 프로그램 자체를 허용 대상에 추가하여 주십시오. Windows Server 64비트 버전을 사용하게 되실 것이므로 아래 경로를 지정하시면 됩니다.

%PROGRAMFILES(X86)%\FileZilla Server\FileZilla server.exe

정상적으로 등록이 되면 아래 그림과 같이 속성에 나타날 것입니다.

3단계: Windows Azure Virtual Machine 방화벽 설정

1단계에서 설정한 포트 대역의 각 포트 번호들과 TCP 21번 포트를 빠짐없이 Windows Azure Virtual Machine 방화벽 설정으로 가서 개방해야 밖에서 데이터 전송이 가능합니다.

위 그림에서 보시는 것과 같이 Passive 포트 대역을 모두 TCP 포트 번호로 지정하여 공용 포트와 개인 포트 번호를 일치시켜주고, 최종적으로 21번 포트를 지정하면 됩니다. 여기서는 Secured FTP를 위하여 별도 포트 번호를 지정하였습니다만 상황에 맞게 설정해주시면 문제 없습니다.

4단계: 접속 및 파일 송수신 테스트

정상적으로 접속과 파일 송수신이 이루어지는지 다시 한 번 확인합니다. 클라이언트의 경우 아래 그림과 같은 모습으로 진행이 이루어져야 합니다.

서버의 경우 아래 화면처럼 로그가 나타나게 될 것입니다.


다른 FTP 서버에 대한 설정도 지금 설명한 사항들을 점검하여 설정을 업데이트하면 Virtual Machine에서 정상적인 FTP 서비스 구축이 가능할 것입니다.

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

PaaS2013. 3. 31. 12:58

안녕하세요. Windows Azure MVP 남정현입니다.

Windows Azure를 사용하면서 여러가지 서비스들을 많이 활용할 수 있지만, 역시 Windows Azure Platform을 제일 잘 설명할 수 있는 것은 확장성에 충분히 대응할 수 있는 유연한 아키텍처가 아닐까 싶습니다. 하지만 이러한 아키텍처를 어떻게 디자인하고 설계하고 수정해야 할지 개념을 잡기가 쉽지 않을 수 있는데요, 이러한 개념을 알기 쉽게 설명해주는 유용한 포스터를 하나 공유합니다.

아래 링크를 클릭하시면 포스터 PDF 파일을 내려받으실 수 있습니다. 포스터를 내려받아서 필요한 부분만을 읽어보시거나, 포스터 인쇄를 주문하셔서 잘 보이는 곳에 붙여놓고 활용하시면 좋을 것 같습니다. :-)

Windows Azure Scalability.pdf

감사합니다.

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

Azure Storage/Database2013. 3. 8. 20:00

안녕하세요. Windows Azure MVP 남정현입니다.

Windows Azure Storage는 전통적인 데이터베이스 시스템과는 다르게 대용량 데이터를 처리하기 위한 방향으로 아키텍처가 구성되어있습니다. 이런 이유로, 일상적으로 사용하는 RDBMS의 컨텐츠를 Windows Azure Storage로 로드하거나 덤프를 만드는 것은 가능하지만, Windows Azure Storage 위에 올라온 레코드에 대해서 복잡한 쿼리를 수행하는 것은 어렵습니다. 이런 제약 사항 때문에 LIKE 검색 같은 기능은 사용할 수 없고, 오로지 데이터 정렬 순서에 의존하는 검색 방법만을 사용할 수 있습니다.

http://blogs.microsoft.co.il/blogs/oshvartz/archive/2012/09/19/azure-table-storage-limitations-and-solutions-workarounds-part-2.aspx

위의 글에서 소개하는 Workaround를 프로그래밍 방식으로 만들어 볼 수 있을까 고민하다가 오늘 레시피를 올리게 되었습니다. 이 코드를 사용하면 어떤 문자열이 있으면 해당 문자열을 순차적으로 검색하여 일치하는 모든 문자열을 반환하는 쿼리 식을 완성해줍니다.

코드 살펴보기

public static string CreateStartsWithQuery(string attributeName, string needle) {
 attributeName = String.Concat(attributeName);
 needle = String.Concat(needle).Replace("'", "''");
 if (attributeName.Length < 1 || needle.Length < 1)
  return String.Empty;
 return String.Format(
  "({0} ge '{1}' and {0} lt '{2}')",
  attributeName, needle,
  String.Concat(needle.Substring(0, needle.Length - 1), (char)(needle[needle.Length - 1] + 1))
 );
}

위와 같은 유틸리티 메서드를 만들었습니다. Windows Azure Storage SDK 최신 버전의 경우 문자열로 직접 Query를 질의하도록 되어있으며 여기에 바로 쓸 수 있는 문자열을 반환합니다.

코드의 내용을 한 줄씩 살펴보면 이렇습니다.

  • 매개 변수로는 attributeName과 needle을 받습니다. attributeName이 검색하려는 테이블 저장소 상의 엔티티 속성 이름입니다. 그리고 needle은 매칭시키려는 앞 부분의 문자열입니다.
  • needle의 경우 작은 따옴표는 두 번 쓰도록 하여 이스케이프 처리하였습니다. 이렇게 만들면 작은 따옴표를 쿼리식 안에서 정확히 지정할 수 있습니다.
  • 안전한 쿼리 수행을 위하여 빈 문자열이 들어오는 경우는 빈 문자열을 반환합니다. String.Concat 정적 메서드의 기본 동작에 의하여 String에 Null 참조가 지정되는 경우 빈 문자열로 변환됩니다.
  • 실제 비교 식의 원리는 이렇습니다. ABC로 시작하는 문자열을 찾기 위하여 문자열을 오름차순으로 정렬했을 때 ABC 그 자체, 혹은 그 이후로 나오는 모든 데이터에 대해, 해당 문자열 바로 다음에 오는 문자열까지로 검색 범위를 한정합니다.

위의 코드에 검색어로 "아무개"를 지정하면 다음과 같은 쿼리 식이 생성됩니다.

(Category ge '아무개' and Category lt '아무객')

즉, 아무개와 아무개로 시작하는 모든 문자열들 중 아무객보다 빨리오는 문자열만을 찾는다는 의미로 쿼리가 완성되는 것입니다. 만약 여러 조건으로 매칭하기를 원한다면 아래와 같이 쿼리식을 쓸 수 있습니다.

(Category ge '아무개' and Category lt '아무객') and (Category ge '철수' and Category lt '철숙') and (Category ge '영희' and Category lt '영흭')

위와 같이 작성함으로서 아무개로 시작하는 Category, 철수로 시작하는 Category, 영희로 시작하는 Category를 가지는 레코드들을 한꺼번에 얻어올 수 있습니다.

Visual Studio 데이터베이스 탐색기에서 테스트하기

위의 코드를 이용하여 만든 쿼리식이 잘 작동하는지 살펴볼까요? 쌀/과일/농수축산물 » 쌀/찹쌀/현미라는 문자열로 시작하는 모든 레코드를 검색하기 위하여 위의 코드로 아래와 같이 쿼리식을 만들었습니다.

(Category ge '쌀/과일/농수축산물 » 쌀/찹쌀/현미' and Category lt '쌀/과일/농수축산물 » 쌀/찹쌀/현믹')

Visual Studio 데이터베이스 탐색기에서 Table 저장소를 직접 쿼리할 수 있습니다. 한 번 살펴볼까요?

잘 작동합니다. :-)

PartitionKey나 RowKey로 등록한 엔티티가 아니어도 StartsWith에 해당되는 검색 조건을 빠르게 검색하여 가져올 수 있다는 것은 쓰임새가 많을겁니다. 특히 지금과 같이 카테고리 탐색을 하려는 경우에는 유용하게 사용할 수 있습니다.

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

PaaS2013. 3. 7. 15:52

안녕하세요. Windows Azure MVP 남정현입니다.

Windows Azure Cloud Service에서 실행되는 응용프로그램을 개발하는 과정에서 자주 필요성을 느끼게 되는 기능 중 하나는 지금 코드가 호스팅되는 위치가 실제 Windows Azure 데이터 센터 내인지, 에뮬레이터 내인지, 아니면 일반적인 서버 환경인지를 알고자하는 경우입니다. 이러한 위치 구분이 필요한 이유는 바로 코드 재사용성을 위해서인데, 정확하게 구분하기가 쉽지 않은 점이 있습니다.

여기에 대한 다양한 방법과 Workaround가 존재하지만 추천할만한 코드 Snippet이 있어서 글로 정리하여 올려봅니다.

RoleEnvironment.IsAvailable 속성

실제 Windows Azure Cloud Service 환경이거나 에뮬레이터 환경에서 실행되는 경우를 알아낼 수 있는 방법입니다. 이 방법은 Windows Azure 런타임을 사용할 수 있는지 없는지에 대한 구분으로 활용할 수 있고, 에뮬레이터인지 아닌지는 구분할 수 없습니다.

사용 예시

public static bool EnsureRunningInAzureOrDevFabric()
{
    return RoleEnvironment.IsAvailable;
}

RoleEnvironment.DeploymentId 속성

실제 Windows Azure Cloud Service 상에 패키지를 Deploy해서 실행 중인 경우 이 속성에 Guid 값이 부여되므로 .NET Framework FCL이 제공하는 System.Guid.Parse 정적 메서드를 사용하여 Guid로 파싱할 수 있습니다. 파싱에 성공한다면 실제 환경, 그렇지 않다면 에뮬레이터 환경으로 구분할 수 있습니다.

사용 예시

public static bool EnsureRunningInAzure()
{
    Guid guidId;
    return (RoleEnvironment.IsAvailable &&
        Guid.TryParse(RoleEnvironment.DeploymentId, out guidId));
}

한 번만 조회하기

최대한의 효율성을 기하기 위하여, 단순 작업이지만 같은 작업을 여러번 수행할 필요가 없겠지요. 논리적으로 생각해보면, 이와 같은 사항이 코드를 실행하는 실행 시점에서 변경될 일은 2013년 현재의 Windows Azure 플랫폼 스펙으로 볼 때에는 없습니다. 클라우드 서비스가 아닌 환경으로 실행 중인 가상 컴퓨터가 별도 VM으로 분리 이동하는 기능은 제공되지 않으며, 일반적으로 개발자 환경과 실제 데이터센터 환경 사이에 실시간으로 VM을 주고 받을 일 또한 없습니다. 따라서 위의 메서드에 대한 호출 결과를 정적 생성자를 호출하는 시점에만 부르거나 Lazy Initialization으로 다루더라도 전혀 기능에 이상이 없을 것입니다.

유틸리티 클래스로 만들기

아래의 소스 코드는 http://stackoverflow.com/questions/6160947/how-can-i-determine-if-i-am-running-locally-on-my-pc-or-on-the-cloud 에서 발췌한 것임을 밝혀둡니다.

using Microsoft.WindowsAzure.ServiceRuntime;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;


namespace Sample

{

    public static class CloudEnvironment

    {

        private static bool m_IsRunningAzure = GetIsRunningInAzure();


        private static bool GetIsRunningInAzure()

        {

            Guid guidId;

            if (RoleEnvironment.IsAvailable &&

                Guid.TryParse(RoleEnvironment.DeploymentId, out guidId))

                return true;

            return false;

        }


        public static bool IsRunningInAzure()

        {

            return m_IsRunningAzure;

        }


        private static bool m_IsRunningAzureOrDevFabric = GetIsRunningInAzureOrDevFabric();


        private static bool GetIsRunningInAzureOrDevFabric()

        {

            return RoleEnvironment.IsAvailable;

        }


        public static bool IsRunningInAzureOrDevFabric()

        {

            return m_IsRunningAzureOrDevFabric;

        }

    }

}



Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

PaaS2013. 2. 26. 01:01

안녕하세요. Windows Azure MVP 남정현입니다.

간단하지만 간과하기 쉬운 팁을 하나 공유하려고 합니다. Windows Azure Cloud Service를 .NET Framework 기반으로 개발할 때 있을 수 있는 일에 대해 이야기하려고 합니다. Cloud Service에 Worker Role을 추가할 때, Worker Role의 진입점에 관련된 팁을 알려드리기 위하여 글을 씁니다.

Worker Role은 전통적인 .NET 기반 응용프로그램들과는 다르게, 클래스 라이브러리 형식의 어셈블리를 만들고, 그 어셈블리가 클라우드 서비스 패키지 파일에 들어가게 됩니다. Windows Azure Fabric Controller는 관리자가 제출한 클라우드 서비스 패키지 파일을 열어서 그 안에 들어있는 진입점 어셈블리를 찾아서, 해당 어셈블리 내에 존재하는 진입 클래스를 선택하여 서비스 기동을 시작하게 됩니다. 이 과정에서 사용하게 되는 것이 .NET Framework의 핵심 기능들 중 하나인 Reflection입니다.

만약 Worker Role로 만든 어셈블리 안에서 RoleEntryPoint를 기본 클래스로 정의한 클래스가 하나 이상 들어있다면 어떤 일이 벌어질까요? 오름차순으로 정렬했을 때 가장 먼저 열거될 수 있는 클래스만이 진입점으로 선택됩니다.

이러한 문제를 해결하기 위한 방법은 정리하면 다음과 같습니다.

  • 실제로 사용할 Entry Point 클래스 하나만을 Worker Role 어셈블리 안에 배치합니다.
  • 나머지 모든 RoleEntryPoint를 상속받는 클래스들은 다른 클래스 라이브러리에 만들어서 이동시킵니다.
  • Worker Role 어셈블리에서 새로 만든 클래스 라이브러리를 참조합니다.
  • 컴파일이나 런타임 오류가 발생하지 않도록 코드를 정리합니다.

그리고 이 문제가 더 부각되는 것은 Worker Role 어셈블리 안에서 상속 등의 기능을 사용하여 여러 Entry Point를 구현하게 될 경우입니다. 실제로 사용하고픈 Entry Point는 따로 있지만 이름의 순서 상 다른 진입점이 먼저 나오면 이상하게 동작하는 것 처럼 보이게 됩니다. 여기에, 만약 먼저 검색되는 Worker Role EntryPoint 클래스가 추상 클래스이거나 인수 없이 호출하는 기본 생성자를 제외시킨 경우 서비스가 전혀 실행되지 않을 수도 있습니다. 이런 경우 이 글의 내용을 참고하여 문제 해결을 시도해보기 바랍니다.

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

Azure Storage/Database2013. 2. 3. 15:16

안녕하세요. Windows Azure MVP 남정현입니다.

Windows Azure를 가지고 무엇을 할 수 있을까? 이 점에 대해서 궁금해하시는 많은 분들을 위하여 레시피 강좌 시리즈를 지속적으로 업로드하려고 합니다.

이번에 소개해드리려고 하는 내용은 요즈음 유행하는 HTML5 기반의 앱과 관련된 내용입니다. 서버의 렌더링을 필요로하지 않고 스스로 동작할 수 있는, 마치 앱과 같은 특성을 지닌 지능적인 HTML 페이지를 Windows Azure BLOB Storage위에서 호스팅하는 방법입니다.

사실 지금 소개해드리려는 내용은 굉장히 간단한 내용이지만, 활용하기에 따라서는 굉장히 유용한 레시피가 될 수 있습니다. 이벤트나 행사 웹 사이트와 같이 단순하지만 기간 내에 액세스가 폭증하는 페이지들을 호스팅해야 하는 요구 사항이 종종 있는데 이럴 때 활용하시면 일을 매우 단순하게 만들 수 있습니다.

정적 웹 사이트에 담을 내용 준비하기

정적 웹 사이트란 문자 그대로 웹 디자이너가 작업을 끝마친 시안 형태의 웹 페이지에서부터 ASP, PHP, ASP.NET, CGI, Python, Perl 등 생각할 수 있는 서버측 구성 요소를 하나도 들여오지 않고 jQuery나 Dojo 같은 자바스크립트 프레임워크들, 그리고 외부의 Open API만을 활용해서 온전하게 작동하는 웹 앱에 이르기까지 운영해야 할 서버 측의 비용을 고려하지 않고 만들 수 있는 모든 종류의 웹 사이트 및 웹 앱을 뜻합니다. 자바스크립트 세계의 발전에 따라 정적 웹 사이트의 의미도 크게 확장되었다고 볼 수 있습니다.

여기서는 jQuery Mobile을 이용하여 만든 간단한 웹 사이트를 Windows Azure Storage를 이용해서 호스팅하도록 해보겠습니다. 소개하는 내용이 아니더라도 여러분이 손수 만든 개인 모바일 홈페이지도 괜찮고 무엇이든 시험해볼 수 있는 것이면 됩니다.

  • 준비물 1: CloudBerry Client for Windows Azure BLOB Storage (Pro 버전 대신 Freeware를 설명합니다.)
  • 준비물 2: jQuery Mobile 패키지 파일
  • 준비물 3: 여러분이 올릴 간단한 웹 페이지 파일 및 이미지 파일

CloudBerry Client for Windows Azure BLOB Storage 설치하기

CloudBerry Client는 여러 종류의 Windows Azure BLOB Storage 클라이언트 중 다루기 쉽고 간편한 인터페이스를 제공하는 무료 클라이언트입니다. CloudBerry Client는 Windows Azure 이외에도 KT UCLOUD Biz Storage 클라이언트와 같은 OpenStack Client도 지원합니다.

http://www.cloudberrylab.com/ 웹 사이트에 방문하시면 메인 페이지에 CloudBerry Explorer Freeware라는 이름의 다운로드 링크 컬렉션이 보일 것입니다. 여기서 for Windows Azure를 선택하여 이번 레시피에서 설명하는데 필요한 도구를 다운로드하고 설치합니다.

프리웨어이지만 사용자 등록을 권하는 부분이 있는데, 지속적으로 이 도구를 사용하게 될 것을 감안하여 재량껏 등록하여 사용하기 바랍니다. 등록하지 않고 진행해도 사용에는 큰 지장은 없을 것입니다.

설치 후 아래와 같이 프로그램이 나타나는지 확인합니다.

계정 정보 등록하기

새로운 계정 정보를 등록하려면 아래 그림과 같이 File 메뉴의 Azure Blob Storage Accounts 메뉴를 선택합니다.

아래와 같이 대화 상자가 나타날 것입니다. Add 버튼을 클릭합니다.

아래와 같이 계정 정보 입력 대화상자가 나타나는지 확인합니다.

  • Display name: 이 프로그램 상에서 나타낼 항목 이름으로 자유롭게, 알아보기 쉬운 이름으로 입력합니다.
  • Account: Windows Azure 저장소의 ID를 입력합니다. URL을 보면 <계정 이름>.blob.core.windows.net와 같은 형태로 구성되어있는데 여기서 <계정 이름>에 해당하는 ID를 입력합니다.
  • Shared Key: Windows Azure 관리 포털에서 나타나는 이 저장소에 대한 Shared Key를 입력합니다. Primary Key나 Secondary Key 중 하나를 입력하면 됩니다. 보안 향상을 위하여, 서비스 구성을 위해 활용하는 Key와는 다른 여분의 Key를 이곳에 설정하는 것이 좋습니다. 이렇게 하여 불시에 이 Key를 갱신하여 유출 사고 등에 유연하게 대처할 수 있게 됩니다.
  • Use SSL: SSL 통신을 사용할 지의 여부를 결정합니다.
  • Development Storage: 실제 서비스가 아니라 Windows Azure Storage Emulator로 연결할 경우 이 항목을 체크합니다.

계정 정보를 확인하려면 http://manage.windowsazure.com/ 으로 이동하여 저장소 계정 화면에 대한 대시 보드를 아래와 같이 확인합니다. 그 다음 하단의 도구 모음에서 Manage Keys 버튼을 클릭합니다.

아래와 같이 모달 대화 상자가 나타나면 Storage Account Name을 복사하시고, Primary Access Key 또는 Secondary Access Key 중 하나를 복사하여 위의 대화 상자에 입력하도록 합니다.

모든 설정이 완료되면 Test Connection 버튼을 클릭하여 연결이 잘 되는지 확인합니다. 연결에 성공하면 아래와 같이 대화 상자가 나타날 것입니다.

jQuery Mobile 패키지 준비하기

기본적으로 jQuery Mobile 패키지 파일을 CDN에서 받아서 이용하는 방법이 편리합니다. 이렇게 하면 jQuery Mobile 다운로드에 관한 트래픽을 우리쪽 서버가 아닌 다른 위치의 CDN으로 분산시킬 수 있으므로 트래픽 관련 비용 절감에 도움이 되기도 합니다. 여기서는 jQuery Mobile 패키지를 우리쪽 서버에 업로드하는 것을 기준으로 예제를 만들어 보도록 하겠습니다.

http://jquerymobile.com/download/ 웹 페이지에 접속하여 아래와 같이 Latest Stable Release를 찾아 JavaScript와 CSS 파일 패키지를 Minified Version으로 다운로드하기 바랍니다. 링크를 클릭하면 저장이 아니라 파일이 열리는 동작으로 다운로드가 발생할 수 있으므로 링크를 오른쪽 버튼으로 클릭하고 다른 이름으로 저장 기능을 사용하여 저장하기 바랍니다.

그리고 jQuery Mobile이 필요로하는 jQuery 라이브러리 파일도 가져와야 합니다. http://jquery.com/download/ 웹 페이지에 접속하여 아래와 같이 Minified Version을 다운로드합니다.

NOTE: 최근에 릴리즈한 1.9.x 버전의 경우 jQuery Mobile과 호환성 문제가 있을 수 있으므로 1.8.x 릴리즈를 다운로드해야 할 수 있습니다. 1.9.x 버전이 작동하지 않을 경우 1.8.x 버전을 사용하여 진행할 수 있습니다.

컨테이너를 만들고 권한 설정하기

이제 컨테이너를 만들고 여기에 파일을 업로드할 차례입니다. 다시 CloudBerry Storage Explorer로 되돌아가서 오른쪽 패널의 Source 드롭 다운 상자에서 방금 추가한 계정을 선택하여 접속을 시도합니다. 

Windows Azure Storage는 전통적인 웹 호스팅 환경과는 다르며, 기본적으로 1계층의 컨테이너만을 지원합니다. 그리고 컨테이너보다 더 깊이있는 레벨의 폴더 계층을 형성하려면 올리는 파일의 이름에 경로 구분을 위한 문자 ('/')를 포함시켜 폴더처럼 보이게 하는 방법을 사용하게 됩니다.

API에서 폴더를 탐색한다는 것은 이러한 특성에 따라 실제 폴더로 스택 자료 구조를 이용해서 탐색하는 방식이 아니라, Where Clause를 이용할 때 사용할 수 있는 Prefix Matching 기법을 사용하게 됩니다. 즉, 같은 Prefix를 보유하는 컨테이너 내의 파일들은 논리적으로 같은 폴더에 있는 것으로 취급이 가능합니다.

컨테이너를 만들기 위해서는 아래 그림과 같이 오른쪽 편의 도구 모음을 클릭합니다.

아래와 같이 대화 상자가 나타나면 컨테이너의 이름을 입력하고 권한을 설정합니다.

위의 권한들에 대해 각각 내용을 살펴보면 다음과 같습니다.

  • Full public read access: 이 컨테이너의 URL로 접속하면 컨테이너 안에 무슨 파일이 들어있는지 목록을 조회할 수 있는 기능과 더불어 모든 파일에 대해 다운로드 기능을 제공함을 의미합니다.
  • Public read access for blobs only: 이 컨테이너의 URL로 접속하면 권한이 없다는 오류 메시지가 나타나고, 대신 이 컨테이너 안의 정확한 파일의 URL을 알고 있는 경우 해당 파일은 다운로드가 가능함을 의미합니다.
  • No public read access: 컨테이너이든 그 안에 들어있는 파일이든 인증을 거치지 않고는 읽을 수 없도록 보호함을 의미합니다.

위의 세 가지 옵션 중에서 지금 우리가 선택하려는 것은 두 번째 옵션으로, 정적 웹 호스팅에서 어떤 파일이 들어있는지 사용자가 확인할 필요 없이 개별 URL에 대해서만 안다면 자동으로 모든 서비스가 제공되므로 파일에 대해서만 공개하도록 만들 것입니다.

파일 업로드하기

여기서는 정적 웹 호스팅을 간단하게 테스트해볼 목적으로 1계층 컨테이너 안에 같은 파일들을 넣어보려고 합니다. 여러분의 컴퓨터에서 아래와 같이 파일을 준비하시면 됩니다.

그리고 위의 index.html 파일의 소스 코드는 아래와 같습니다.

이제 위의 소스 코드를 Azure Blob Storage로 업로드합니다. 아래와 같이 파일이 업로드된 것을 확인합니다.

결과 확인하고 QR코드로 만들어 배포하기

이제 마지막으로 올라간 파일이 잘 작동하는지 확인할 차례입니다. 위의 파일들 중 index.html 파일을 오른쪽 버튼으로 클릭하여 URL을 확인합니다.

아래와 같이 대화 상자가 나타나면 Copy to clipboard 버튼을 클릭하여 주소를 복사하고 웹 브라우저에서 열어보도록 합니다. (혹은 Open link 버튼을 눌러도 됩니다.)

웹 브라우저에서 아래와 같이 잘 나타나는지 확인합니다.

이제 이 URL을 QR코드로 만들기 위하여 http://qr.naver.com/ 으로 접속하여 QR코드를 만들면 모바일 웹 사이트 구축이 완료됩니다.

더 나아가기

만약 폴더 구조를 유지하면서 파일 업로드를 하기 원한다면, Storage Explorer에서는 폴더를 직접 생성하는 기능이 없지만, 미리 로컬에서 만든 폴더째로 한꺼번에 업로드하면 자동으로 폴더를 생성하게 됩니다.

그리고 Windows Azure CDN 노드를 추가하면 이 상태 그대로 CDN 서비스를 받을 수 있습니다. CDN 엣지 노드 형성은 2013년 2월 현재 신규 포털이 아닌 구 버전의 포털 http://windows.azure.com/ 에서 관리할 수 있습니다.

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

IaaS2013. 2. 3. 02:19

안녕하세요. Windows Azure MVP 남정현입니다.

오늘 소개하려고 하는 내용은 Windows Azure Virtual Machine 서비스를 통해서 Windows Server를 처음 만들면 해주어야 하는 가장 기본적인 작업인 지역 및 언어 설정에 관련된 내용입니다. 이 부분이 빠지게 되면 데이터베이스 등을 이용할 경우 시간이나 지역 정보가 일치하지 않아 데이터 정합성에 문제가 발생할 가능성이 있으므로 사소하지만 꼭 해야 하는 중요한 작업이기 때문에 알기 쉽게 정리해서 올려드리려고 합니다. 이번 레시피에서는 Windows Server 2012를 기준으로 설명합니다.

언어 팩 설치하기

이전 버전의 Windows에서는 별도의 Multilingual User Interface Pack (MUI Pack)을 구해서 시스템에 확장팩으로 설치하여 기본적인 한국어 IME 이외에 도움말, 대화 상자 등에 표시할 UI를 업데이트했었습니다. 그러다가 Windows Server 2012에서는 이러한 MUI Pack을 공개적으로 개방하기 시작하였는데, 클래식 제어판 (control.exe)에 들어가서 언어 애플릿을 선택하면 원하는 언어의 우선순위를 정할 수 있습니다. 그리고 원하는 언어를 추가한 다음, MUI Pack을 직접 설치할 수도 있습니다.

Windows Server 2012 인스턴스에 원격 데스크톱을 이용하여 로그인한 다음, 제어판을 시작합니다. 제어판을 시작하는 방법은 Windows + R 키를 입력하여 control 명령어를 입력하거나, 화면의 좌측 하단 구석을 마우스 오른쪽 버튼으로 클릭하여 나타나는 메뉴를 이용하는 방법이 있습니다.


그 다음, 제어판의 여러 항목들 가운데에서 Language 항목을 선택하여 언어 설정으로 이동합니다.

바뀌는 화면에서 현재 영어만 지원하도록 구성된 모습을 볼 수 있을 것입니다. 아래 화면과 같이 나타나면, Add Language 버튼을 클릭하여 새 언어 설정을 추가합니다.

추가할 수 있는 여러 언어들이 나타날 것입니다. 현재 표시 언어가 영어이고 영어로 한국어를 표현하는 이름인 Korean의 K를 찾아 내려가다보면 아래 그림과 같이 Korean 항목을 찾을 수 있습니다. 이 항목을 추가합니다.

아래 그림과 같이 한국어가 추가된 것을 확인한 다음에는 한국어가 가장 위로 올라오도록 Move Up 버튼과 Move Down 버튼을 적절히 조작하여 언어의 우선 순위를 변경합니다.

우선 순위 조정이 끝나면 Options 링크를 클릭하여 세부 설정으로 이동합니다.

저의 경우, 이전에 한국어 언어 팩을 이미 설치했던 적이 있어서 다른 언어의 스크린 샷을 가져와서 설명을 드리려고 합니다. 언어 팩이 설치되어있지 않은 상태라면 아래와 같이 Download and install language pack이라는 링크가 보이는데, 이 링크를 클릭해서 화면 UI 상의 언어가 업데이트되게 할 수 있습니다.

언어 팩 설정이 끝났으면 다시 로그인해서 아래 그림처럼 한국어로 서버 관리자 프로그램이 실행되는지 확인합니다.

일반 Win32 응용프로그램을 위한 설정 업데이트

기본적인 표시 언어 설정 이외에 기본 로캘 세트를 어느 지역으로 할 것인지는 따로 한 번 더 설정이 필요합니다. .NET이나 Java 등의 프로그래밍 언어를 사용하여 만들어진 소프트웨어나 서비스의 경우 큰 영향을 받지 않지만, Visual C++이나 Delphi 혹은 Pascal 등의 언어를 기반으로 컴파일된, 유니코드를 사용하지 않도록 빌드한 일부 Win32 응용프로그램의 경우 이 설정이 중요할 수 있습니다.

이번에도 제어판으로 이동합니다. 비슷한 항목처럼 보일 수 있는데 이번에는 Language (언어) 대신 Regional Settings (국가 또는 지역) 설정을 선택합니다. 둘 사이를 개념적으로 구분하는 기준은, 언어는 운영 체제 위에서 실행되는 프로그램들의 언어에 관한 것으로 통화, 길이, 도량, 무게 등의 지역 설정을 제외한 부분입니다. 그리고 국가 또는 지역 설정에서 취급하는 것은 언어보다는 앞서 언급한 통화, 길이, 도량, 무게, 전화 번호 체계 등과 같은 규칙에 관련된 것들입니다.

관리자 옵션 탭을 클릭했을 때 "유니코드를 지원하지 않는 프로그램용 언어" 그룹 안의 언어 선택이 "한국어(대한민국)"이 아닌 경우 시스템 로캘 변경 버튼을 클릭하여 해당 언어를 선택합니다. 변경이 발생하면 서버를 다시 시작해야하므로 관리 작업 수행 시 변경하는 것이 좋습니다. 그리고 현재 표시 언어 설정을 시스템 전반에 확산시켜야 할 필요가 있을 때 여기에 와서 "설정 복사" 버튼을 클릭하면 간단히 해결됩니다.

날짜 및 시간대 설정 변경하기

여러분이 호스팅하려는 응용프로그램에서 시간대에 대한 정보를 같이 저장하고 관리하는 경우 이 설정은 필요하지 않을 수 있습니다. 그러나 대개의 경우, 이러한 시간대 정보가 항상 동일할 것이라는 전제 아래에서 날짜와 시간 정보를 관리하게되어 Windows Azure나 Amazon Web Service와 같이 해외에 데이터센터를 두는 곳에서 실행하려는 경우 문제가 될 가능성이 큽니다.

날짜를 맞추기 위해서는 시간대 설정부터 확인하여야 하는데 단계별로 진행하면 어렵지 않습니다. 제어판으로 다시 이동해서 날짜 및 시간 설정을 클릭합니다,

날짜 및 시간 탭에서 표준 시간대 설정이 UTC +09:00 서울로 되어있는지 확인하고 그렇지 않은 경우 변경합니다.

이어서 시간 자동 동기화 기능을 사용하여 가상 환경에서 실행되는 컴퓨터의 특성에 의해 발생할 수 있는 시간 동기화 문제를 예방하도록 합니다.

인터넷 시간 서버와 동기화 체크 상자가 체크되도록 하고, 서버는 time.windows.com을 사용해도 무난합니다. 이 상태에서 지금 업데이트 버튼을 동기화되었다는 메시지가 나올 때 까지 반복합니다. UDP 연결이므로 한 번에 동기화가 되지 않을 수 있습니다.

결론

이 작업을 마무리하고난 다음에는 한국어 버전의 Windows Server 2012를 사용하는 것과 거의 동일한 환경을 얻을 수 있습니다. 이 상태에서 기존에 여러분이 사용하던 서버 응용프로그램들을 Azure의 IaaS 기반으로 쉽게 마이그레이션하고 작업을 마무리할 수 있을 것입니다.

긴 글 읽어주셔서 감사합니다.

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

이벤트2013. 2. 1. 11:20

 

top.jpg

Windows Azure 클라우드 서비스를 무료로 체험하실 수 있는 절호의 기회!
온라인 캠프 참여 후, 후기만 작성하면 Microsoft 무선 마우스!! 최우수 후기로 선정되면 XBOX360 Kinect!!!
온라인으로 언제 어디서나 Azure를 만나는 Windows Azure 커뮤니티 온라인 캠프, 지금 바로 참여하세요!
but01.jpg
Windows Azure 커뮤니티 온라인 캠프
참가대상 Windows Azure 체험을 원하시는 커뮤니티 회원
(선착순 20~30명 마감, 중복 참여 가능)
신청방법 Onoffmix에서 참석 신청 이용
참여자발표 온오프믹스 웹 페이지 공지 후 개별 참석 메일 전달
캠프기간 2013년 3월 6일(수) 오후 6시 ~ 2013년 3월 8일(금) 오전 9시
캠프미션 [2기 5차] Windows Azure 웹사이트
Azure 포털에 만들어진 Windows Azure 인스턴스들을 이용해 체험(참석자 대상 메일 전달)
후기응모기간 2013년 3월 10일(일) 24:00까지 후기를 적어 주셔야 합니다.
후기응모방법 Azure 커뮤니티에서 지정한 게시판에 후기를 작성해 주시면 됩니다
- 5차 캠프 후기 작성 위치 - Windows Azure Cafe: [Azure 사용 후기 게시판]
온라인 캠프 진행 형식
메일을 통해
전달된 Microsoft
계정으로
Windows Azure
관리 포털에
로그인
bullet01.jpg
Azure 포털에
기 생성된
다양한
클라우드
서비스
체험
bullet01.jpg
캠프
기간 내에
Windows Azure
서비스를
체험하고
후기 작성!
bullet01.jpg
Microsoft
무선 마우스
받고,
XBOX360 Kinect
최우수 후기
선정 기다리기
gift.jpg
title01.jpg
Windows Azure 동영상 강좌 및 관련 Q&A 게시판을 참고하시면 더 다양하고 즐거운 캠프를 즐기실 수 있습니다.
Windows Azure
동영상 강좌
arrow01.png
 
1기 캠프 사용기
살펴보기
arrow01.png
 
Windows Azure
Q&A
arrow01.png
 
SQL Server 2012
Q&A
arrow01.png
 
Windows Server
2102 Q&A
arrow01.png
 
 
Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

이벤트2012. 12. 6. 00:25

"Azure Camp @ 인하대 - 리눅스, Windows Azure를 만나다" 세미나를 2012년 12월 6일 오후 2시부터 약 1시간 동안 인하대학교 하이테크 001호에서 진행할 예정입니다. 관심있는 인하대 학우 여러분들의 많은 참여 부탁드립니다.

발표 자료 미리 보기: http://sdrv.ms/TFqg0P

ps. 발표 행사 후에는 경품 추첨을 통해서 4권의 책을 선물로 나누어드릴 예정입니다. :-)

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

IaaS2012. 12. 3. 22:32

안녕하세요. Windows Azure MVP 남정현입니다.

Windows Azure Virtual Machine에서 리눅스를 지원하는 것은 다들 잘 알고 계실 것입니다. Ubuntu, CentOS, RHEL, Suse Linux 등을 이미 지원하고 있고 앞으로 개발 진척 상황에 따라서 더 많은 배포판을 지원해 나가게 될듯 합니다. 이번 강좌에서 소개하려고 하는 내용은 Windows Azure Virtual Machine에서 리눅스를 사용하면서 Apache 2 + PHP 5 + Cubrid + XE의 조합으로 XpressEngine 기반의 웹 사이트를 만드는 방법에 대한 것입니다. 익히 알고 계시는대로 Cubrid는 국산 오픈소스 데이터베이스로 다양한 적용 레퍼런스를 가지고 있는 믿음직한 솔루션입니다. 충분한 테스트와 검증이 필요하겠으나, 첫 설치 과정과 기본적인 동작에서 Cubrid는 Windows Azure Virtual Machine 환경에서 안정적으로 잘 작동하고 있습니다.

ps. 2012년 초반에 문제가 되었던 Windows Azure Virtual Machine의 디스크 I/O 관련 이슈, 부팅 후 일정 시간이 지난 다음에 갑작스럽게 Kernel Panic이 찾아오는 현상은 이 글을 쓰는 현 시점에서 해결된 상태입니다.

업데이트: SkyDrive에 아래 60장의 스크린 샷을 모아서 XPS 문서와 ZIP 파일로 업로드하였습니다. 요약해서 보고 싶으신 분들께 도움이 될까하여 공유합니다.

링크 바로가기: http://sdrv.ms/TGXhWs

60장의 그림과 함께하는 설치 과정 따라하기

1. Windows Azure Virtual Machine 베타 프로그램의 신청 여부를 확인하고, http://manage.windowsazure.com/ 에서 하단의 NEW 버튼 클릭 -> Compute 클릭 -> Virtual Machine 클릭 -> Quick Create 순으로 클릭합니다.

* DNS 이름을 지정합니다.
* Ubuntu 12.04 LTS (혹은 다른 Ubuntu 이미지도 무관합니다.)를 선택합니다.
* 적정한 Instance Size를 선택합니다.
* 사용자 ID가 azureuser 임을 기억하시고 비밀 번호를 새로 지정합니다.
* 데이터센터 위치는 대한민국 접속자 기준으로 East Asia를 선택하는 것이 유리합니다.

모든 정보를 입력하면 Create Virtual Machine 버튼을 클릭하고 잠시 기다립니다.

2. 새 Windows Azure Virtual Machine과 Storage가 생성된 것을 확인하면 만들어진 Virtual Machine을 선택하여 상세 관리 페이지로 이동합니다. 

3. Dashboard 화면의 오른쪽 Quick Glance 섹션에서 SSH Details 항목의 접속 주소와 포트 번호를 확인합니다. 이 접속 정보를 사용하여 여러분이 선호하는 Secure Shell 지원 Telnet 프로그램으로 접속을 시도합니다. Windows 환경에서 널리 사용되는 프로그램은 Putty이며, http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html 에서 내려받아 설치할 수 있습니다. 

4. Putty를 실행하고, Host Name 입력 상자와 Port 입력 상자에 접속 정보를 입력한 후 Connection type은 SSH로 선택하고 Open 버튼을 클릭합니다. 필요한 경우 Saved Sessions 입력 상자 아래에 새로운 엔트리 이름을 입력하고 Save 버튼을 클릭하면 다음번에 리스트 상자에서 저장된 항목을 더블 클릭하여 바로 연결을 시작할 수도 있습니다. 

5. 처음 원격 서버에 접속하면 임의로 생성한 RSA2 지문 키 값의 유효성 여부를 놓고 경고하는 대화 상자가 나타나게 됩니다. 예 (Yes) 버튼을 클릭하여 항상 이 값을 수락하도록 설정을 저장합니다. 

6. 사용자 ID는 azureuser로, 암호는 Quick Create 당시 지정한 암호를 입력하여 로그인합니다. 

7. 지금부터 수행하려는 작업들은 줄곧 권한 상승을 필요로 하기 때문에 작업의 효율성을 위하여 셸 자체를 권한 상승시키려고 합니다. sudo /bin/bash 명령을 실행하여 BASH 셸을 권한 상승 시킨 상태에서 실행합니다. 사용자 비밀 번호를 물어보는 경우 다시 입력합니다. 

8. vi /etc/hostname 명령어를 입력하여 /etc/hostname 파일을 아래와 같이 FQDN (Fully Qualified Domain Name) 이름으로 수정합니다. 초기값은 단순 호스트 이름으로만 되어있었을 것인데 이 이름을 앞에서 접속하기 위하여 사용한 전체 주소로 바꾸어주면 됩니다.

* VI에서 텍스트 편집 모드로 들어가려면 처음 상태에서 i 키를 누릅니다.
* 텍스트를 편집하고난 다음에는 Esc 키를 눌러 명령 모드로 전환합니다.
*  :wq! 를 입력하여 파일을 저장하고 VI를 닫습니다.

9. vi /etc/hosts 명령어를 입력하여 /etc/hosts 파일에 위에서 /etc/hostname에서 추가한 FQDN 이름에 대한 localhost 엔트리를 새로 추가합니다. VI에서의 파일 편집 방법은 8번 단계의 부연 설명을 참고하십시오. vi 사용이 익숙하지 않다면 nano 혹은 emacs 등의 유틸리티도 대안이 될 수 있습니다.

10. 새로 변경한 설정을 반영하기 위하여 service hostname start 명령을 입력합니다. 

11. SSL 인증서 갱신을 위한 유틸리티의 설치가 필요합니다. apt-get install ssl-cert 명령을 입력합니다.

12. 인증서 갱신을 위하여 make-ssl-cert generate-default-snakeoil --force-overwrite 명령어를 입력합니다. 

13. 이제 Apache HTTP Server를 설치할 차례입니다. apt-get install apache2 명령어를 입력합니다. 

14. PHP5를 설치합니다. apt-get install php5 명령어를 입력합니다. 

15. XpressEngine은 PHP GD 라이브러리의 기능을 활용합니다. GD 라이브러리는 .NET Framework의 GDI+가 ASP.NET이나 일반 응용프로그램을 위하여 해 줄 수 있는 백그라운드 이미지 렌더링에 대한 기능과 거의 일치하는 것으로 동적 이미지 생성 작업에 꼭 필요합니다. apt-get install php5-gd 명령어를 입력합니다.

16. Cubrid 측 Ubuntu Repository를 가져오기 위하여 Repository Entry를 수정해야 하는데 이를 위한 유틸리티를 설치하기 위하여 apt-get install python-software-properties 명령어를 입력합니다. 

17. add-apt-repository ppa:cubrid/cubrid 명령어를 입력하여 Cubrid Database 및 관련 구성 요소를 apt-get 명령어로 설치할 수 있도록 리포지터리 정보를 시스템으로 가져옵니다. 

18. 리포지터리 정보를 새로 내려받아 병합하기 위하여 apt-get update 명령을 수행합니다. 

19. 큐브리드 데이터베이스의 설치를 위하여 apt-get install cubrid 명령어를 실행합니다. 

20. PHP5에 큐브리드 데이터베이스 드라이버 설치를 위항 apt-get install php5-cubrid 명령어를 실행합니다. 

21. 큐브리드 데이터베이스의 환경 변수 반영 등 여러가지 부수적인 작업을 위하여 Windows Azure Virtual Machine의 리눅스 인스턴스를 shutdown -r now 명령어로 재시작합니다. 시스템 재 시작에는 얼마 시간이 걸리지 않습니다. 

22. 약 3~5분 정도 뒤에 아래 그림과 같이 PuTTY 창의 제목 표시줄을 오른쪽 버튼으로 클릭하여 Duplicate Session 혹은 Restart Session 메뉴를 클릭하면 같은 접속 정보를 사용하여 다시 접속을 시도합니다.

23. 다시 로그인합니다. 

24. 큐브리드 데이터베이스의 환경 설정을 위하여 전용 셸로 세션을 바꿉니다. sudo su -s $SHELL cubrid 명령어를 입력하고 azureuser 사용자의 비밀 번호를 다시 입력합니다.

* 주의: 이 명령어는 CUBRID 데이터베이스의 환경 변수 설정이 시스템 전체에 반영되지 않은 경우 작동하지 않습니다. 그런 경우 21단계의 명령어 shutdown -r now 명령어를 사용하여 시스템을 다시 시작해야 합니다. 권한이 없다고 나오는 경우 sudo shutdown -r now 명령어를 이용하여 권한 상승을 요청합니다.

25. cubrid service start 명령어를 입력하여 큐브리드 핵심 서비스를 시작합니다. 그리고 cubrid createdb xe 명령어를 입력하여 새 데이터베이스 'xe'를 생성합니다. 데이터베이스의 초기 크기는 512MB로 만들어지며 이 과정에서 시간이 다소 걸릴 수 있습니다.

26. cubrid server start xe 명령어를 입력하여 25단계에서 만들어진 데이터베이스 xe를 활성화시킵니다.

27. 새로 만들어진 xe 데이터베이스의 dba 계정 비밀 번호 변경을 위하여 csql -u[사용자 ID] [데이터베이스 이름] 형식으로 명령어를 입력합니다. 이번 강좌의 내용을 기준으로 하면 csql -udba xe 명령어를 입력하면 됩니다. 

28. CUBRID SQL Interpreter 배너가 출력되는 것을 확인할 수 있습니다. 이제 C-SQL 명령어를 입력해야 하는데 alter user dba password '[사용할 비밀 번호]'; 명령어를 입력합니다. 

29. 정상적으로 명령이 수행되었음을 확인한 다음 ;ex 명령어를 입력하여 CSQL 세션을 닫습니다. 

30. 이제 Apache HTTP Server의 디렉터리 컨텐츠를 구성해야 합니다. 정확한 디렉터리 위치를 알아보기 위해서 /etc/apache2 디렉터리로 이동한 다음 'DocumentRoot' 지시자를 포함하는 파일들의 내용을 grep -nr 'DocumentRoot' * 명령어로 검색해봅니다. 결과가 /var/www로 나타나므로 실제로 해당 위치로 이동해야겠군요.

31. 위치로 이동하기에 앞서 CUBRID 셸을 exit 명령으로 빠져 나옵니다. 그 다음 다시 원래의 셸에서 sudo /bin/bash 명령으로 권한 상승을 시도합니다.

32. 이제 cd /var/www 명령어를 입력하여 Apache HTTP Server의 기본 Contents 디렉터리로 이동합니다. 그리고 이곳에서 PHP의 정상 설치 여부를 확인하기 위하여 cat > test.php 명령어를 입력하여 표준 입력 장치로부터 들어오는 내용을 파일로 기록하도록 만듭니다. 여기서의 표준 입력 장치는 우리가 PuTTY를 통해서 밀어넣는 키보드 입력이 될 것이므로 간단한 스크립트 작성이 가능해집니다. 스크립트 파일의 내용은 다음과 같습니다.

<?php
phpinfo();
?>
[Ctrl+Z 키 입력] 

33. 기본적인 구성이 완료되었으므로 이제 Windows Azure Management Portal (http://manage.windowsazure.com/)으로 이동하여 방화벽 설정을 조금 변경해야 합니다. 현재 방화벽은 Secure Shell을 위해서 TCP 22번 포트만 개방된 상태이며 Apache HTTP Server가 열어놓은 TCP 80 포트가 밖에서도 연결될 수 있도록 설정을 변경해야 합니다. 아래 그림에서처럼 Endpoints 메뉴를 클릭하고 하단의 Add Endpoint 버튼을 클릭하여 새 설정을 추가합니다.

note. Linux VM 자체의 방화벽 설정이 있더라도 Windows Azure Firewall에서 열지 않으면 외부에서는 특정 포트 번호로 연결을 맺을 수 없습니다. 그러나 여러 VM이 단일 Cloud Service 안에 Join하는 경우 이 영역 안의 각각의 VM들은 상호 간의 자체 방화벽 구성이 Windows Azure 방화벽 구성보다 우선시됩니다.

34. Add Endpoint 라디오 버튼을 체크한 상태에서 다음 버튼을 클릭합니다.

35. NAME에는 알아보기 쉬운 설정 명칭 (여기서는 HTTP로 정했습니다.)을, PROTOCOL은 TCP를, PUBLIC PORT, 즉 밖에서 받아들일 포트 번호는 80, PUBLIC PORT로 받은 연결을 실제로 이어줄 VM 측의 PORT인 PRIVATE PORT도 80으로 지정하여 웹 연결을 개통시킵니다. 설정을 마쳤으면 완료 버튼을 클릭합니다.

36. 설정이 완료될 때 까지 잠시 기다립니다.

37. 정상적으로 반영되면 아래 그림과 같이 녹색 체크 마크가 설정 앞에 나타납니다. 이제 테스트 URL로 접속을 시도합니다. 지금 여러분의 브라우저에서 http://[호스트 이름].cloudapp.net/test.php 와 같이 주소를 입력해봅니다.

38. PHP 5.3 인터프리터가 잘 작동하고 있음을 확인할 수 있습니다. PHP 보완 솔루션도 같이 설치되었다고 나오는데 특이하게도 해외 프로젝트이지만 이름이 SUHOSIN (수호신)이라고 하는군요. :-D

39. Ctrl+F 키를 눌러서 페이지 내 검색 창을 엽니다. 검색 키워드로 CUBRID를 입력하여 아래 그림과 같이 Cubrid Driver가 활성화되어있는지 확인합니다.

40. 이어서 gd를 검색 키워드로 넣었을 때 아래 그림과 같이 항목이 검색되고 GD Support가 enabled로 되어있는지 확인합니다.

41. 이제 드디어 XpressEngine을 설치할 차례입니다. 브라우저 창에서 http://www.xpressengine.com/ 으로 주소를 넣어 이동한 다음, 최신 버전의 XE Core 패키지 다운로드 메뉴를 찾아 클릭합니다.

42. 다운로드 버튼을 오른쪽 버튼으로 클릭하여 바로 가기 복사 메뉴 (혹은 다른 브라우저의 경우 이에 준하는 기능을 활용하세요.)를 클릭하여 다운로드 링크를 가져옵니다. 이 주소를 이용하여 바로 xe.zip 파일을 리눅스 VM에서 내려받으려고 합니다. 이 방법을 사용하지 않고 PuTTY 유틸리티의 자매 도구인 PSFTP 툴을 사용하여 직접 업로드해도 무방하지만 추가 프로그램 없이 손쉽게 접근할 수 있어 이 방법으로 시도하려고 합니다.

43. 리눅스 VM에서 웹의 파일을 콘솔 상에서 다운로드받기 위해 wget 유틸리티를 설치하려고 합니다. 보통은 설치가 이미 되어있지만 업데이트 확인 차 apt-get install wget 명령을 입력하여 다시 설치를 확인합니다.

44. 파일을 다운로드받기 위해서 wget -O xe.zip [42단계에서 복사한 URL] 명령어를 입력합니다. -O 스위치는 HTTP 서버로부터 파일 다운로드가 발생할 때 저장할 파일의 이름을 미리 스위치로 지정한 것입니다. 그리고 42단계에서 복사한 URL은 wget -O xe.zip 명령어 다음에 공백을 한 칸 넣고 콘솔 윈도우에서 마우스 오른쪽 버튼을 클릭하면 아래와 같이 자동으로 붙여넣기가 됩니다. 이제 45단계의 내용을 꼭 참고하세요.

45. 리눅스 Bash 셸의 특성 상 URL에 붙어있는 기호들 중 & (Ampersand) 기호는 꼭 이스케이프 처리를 해주어야 합니다. 키보드의 좌우 방향키를 이용하여 명령어를 수정할 수 있으므로 & 기호를 \& 기호로 아래 그림과 같이 수정해줍니다. 이로서 전체 명령어는 다음과 같습니다.

wget -O xe.zip http://www.xpressengine.com/?module=file\&act=procFileDownload\&file_srl=21367347\&sid=2e7e5518f7168e68513400404840b5f1

46. 정상적으로 아래 그림과 같이 다운로드가 완료되었는지 확인합니다.

47. ZIP 파일의 압축을 풀기 위해서 unzip 유틸리티를 설치해야 합니다. apt-get install unzip 명령을 실행하여 unzip 유틸리티를 설치합니다.

48. unzip xe.zip 명령어를 실행하여 /var/www/xe 디렉터리에 XpressEngine 패키지를 압축 해제하여 설치합니다.

49. 이제 불필요한 파일을 정리하고 퍼미션 설정을 할 차례입니다. /var/www 디렉터리의 xe.zip, test.php 파일을 삭제하고 xe 디렉터리 내에 files 디렉터리를 새로 생성한 다음 chmod 명령어로 디렉터리 퍼미션을 조정합니다.

cd /var/www
rm xe.zip
rm test.php
cd xe
mkdir files
chmod 707 files

50. 이제 브라우저 창에서 http://[호스트 이름].cloudapp.net/xe/ 주소를 넣어 아래 그림과 같이 설치 마법사가 나타나는지 확인합니다.

51. 페이지 언어가 한국어로 변경되었으면 다음 버튼을 클릭합니다.

52. 아래 그림과 같이 모든 사항이 가능으로 표시되면 설치할 준비가 된 것입니다. "설치를 진행합니다." 버튼을 클릭합니다.

53. 이번 강좌에서 데이터베이스로 CUBRID를 사용할 것이므로 데이터베이스 종류는 cubrid를 선택하고 다음 버튼을 클릭하여 진행합니다.

54. 데이터베이스 접속 정보를 설정합니다.

* Apache HTTP Server와 DB 서버가 같은 위치에서 실행 중이므로 loopback 주소인 127.0.0.1을 입력합니다.
* DB 서버에 대해 별도로 포트 번호를 변경하지 않았으므로 포트 번호는 기본값을 사용합니다.
* DB 아이디는 빠른 진행을 위해서 dba로 사용하고, DB 비밀 번호는 28단계에서 지정한 비밀 번호를 입력합니다.
* DB 이름은 25단계에서 지정한 인스턴스 이름인 xe를 입력합니다.
* 테이블 머리말은 기존에 xe를 설치한 적이 없는 DB 위에 설치하는 경우 기본 값을 그대로 사용해도 됩니다.

여기서 참고할 사항은 데이터베이스의 경우 Windows Azure Firewall에서 해당 포트 번호인 33000을 임의로 개방하지 않을 경우 밖에서는 Cubrid 데이터베이스로 접속할 방법이 없습니다. 필요한 경우 Cubrid 서버의 기본 포트 번호를 변경하여 한층 더 강력한 보안을 유지할 수도 있습니다.

55. 데이터베이스 접속이 완료되면 아래와 같이 짧은 주소 사용 여부와 시간대 설정 페이지가 나타납니다. 짧은 주소 모듈이 Apache2 패키지와 함께 설치되므로 체크를 하고, 시간대는 적절하게 선택합니다. 대한민국 사용자들을 대상으로 하는 경우 GMT +09:00 Korea Standard Time, Japan Standard Time 항목을 선택하고 다음 버튼을 클릭합니다.

56. 관리자에 대한 기본적인 정보를 입력합니다. 메일 주소, XE 계정 접속 시 사용할 비밀 번호, 내부 아이디, 닉네임을 빠짐없이 적절하게 모두 입력한 다음 완료 버튼을 클릭합니다.

57. 아래와 같이 Welcome 페이지가 나타나면 설치가 끝난 것입니다. 왼쪽 메뉴들 중 관리 메뉴를 클릭하여 관리자 페이지로 이동합니다. 이 과정에서 다소 시간이 걸릴 수 있습니다.

58. 관리자 페이지가 나타납니다. 설치 환경 수집 동의 팝업에 적절한 응답을 선택합니다.

59. 이제 사이트를 구성할 준비가 완료되었습니다.

60. Azure Virtual Machine 관리자 페이지로 되돌아와서 보면 가상 컴퓨터의 움직임이 그래프로 기록된 것을 볼 수 있습니다. 이제 이 그래프가 점점 활기차고 높게 그려질 것을 기대해도 되겠군요. :-)

마무리하기

지난번에는 Windows Azure Web Site에서 XpressEngine을 설치하는 과정을 설명드렸습니다. 여기서는 MySQL의 클라우드 버전인 ClearDB의 서비스를 사용하는 것을 예로 들어드렸습니다. 이 방법을 사용하시면 동시 접속자 수가 많은 웹 사이트에서 최고의 확장성을 목표로 운영할 수 있습니다. 오늘 소개해드린 방법은 일반적인 서버 호스팅 환경에 익숙하신 분들께 더 친숙하고 유익한 방법이 될 수 있습니다. 늘 그렇지만, 비용과 목적에 알맞는 적절한 서비스 구성이 최적의 클라우드 서비스 선택이 될 것입니다.

감사합니다.

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

PaaS2012. 11. 21. 02:05

안녕하세요. Windows Azure MVP 남정현입니다.

오늘 소개해드리려고 하는 내용은 이전에 소개해드렸던 Windows Azure Media Service SDK와 연결되는 웹 서비스를 관리자 포털 (manage.windowsazure.com)에서 쉽게 사용할 수 있도록 만든 기능에 대한 내용입니다. 웹 상에서 최대 200MB까지의 단일 미디어 파일을 업로드할 수 있고, 업로드한 미디어 파일의 공개 URL 및 클라우드 기반 인코딩 작업 생성과 관리에 대한 내용을 소개해드리려고 합니다.

NOTE: 2012년 11월 현재 프리뷰 버전으로 제공되는 기능으로 향후 기능이 바뀌거나 변동되는 내용이 있을 수 있습니다.

Windows Azure Media Service는 기본적으로 프리뷰 서비스이며 별도의 Sign-up Process를 거쳐야 사용이 가능한 서비스이므로 account.windowsazure.com에 방문해서 개별적으로 Windows Azure 계정을 신청해야 합니다.

동영상 파일 업로드하기

Windows Azure Management Portal에 접속한 다음, Media Service에 대한 서비스를 신청한 상태에서 아래 그림과 같이 하단의 UPLOAD 버튼을 클릭합니다.

UPLOAD 버튼을 클릭하면 아래 그림과 같이 로컬에서 업로드할 동영상 파일을 찾고 업로드 후 사용할 BLOB의 이름을 지정하는 입력 상자가 나타납니다. 파일을 선택하면 보통 이름이 자동으로 완성되고 이 이름을 URL에 사용할 수 있으므로 기본 값으로 설정해도 대개는 무방합니다.

테스트 할 동영상으로 에반게리온 신극장판 Q의 예고편 클립을 선택해보았습니다. :-)

동영상 업로드까지 시간이 많이 소요됩니다. 일단 업로드하고 난 다음에는 위의 그림과 같이 동영상 파일의 크기가 조회 내역에 나타납니다. 만약 업로드에 문제가 있어 완료되지 않은 경우 SIZE 컬럼의 값이 0 Byte로 나타나므로 문제 판단을 쉽게 할 수 있습니다. 이 경우 기존 항목을 삭제하고 다시 업로드하여 문제를 해결할 수 있습니다.

업로드가 끝난 동영상에 대해서는 아래 그림과 같이 커맨드 바에 Encode, Play, Publish 버튼이 나타납니다. Encode 버튼을 클릭하면 현재 선택한 미디어를 기준으로 다른 형식으로 변환할 수 있는 Job을 호출하는 것이고, Play 버튼은 현재 선택한 동영상을 브라우저에서 재생하도록 페이지를 여는 기능, 그리고 Publish 버튼은 다른 사람에게 미디어를 표시할 수 있도록 공개 URL을 Windows Azure Storage에서 할당받는 작업입니다. Publish 버튼을 눌러 공개한 상태에서만 Play 버튼이 작동합니다.

Encode 버튼을 누르면 위의 그림과 같이 팝업이 나타납니다. Preset에서 원하는 미디어 인코딩 형식을 선택하고 인코딩 된 새 파일의 이름을 지정하여 확인 버튼을 클릭하면 작업이 시작됩니다. 이 작업은 비동기적으로 이루어지므로 브라우저를 작업 호출 이후에 그냥 닫아도 무방합니다. 단, 작업이 완료되기 전까지 작업 중인 파일의 크기가 0 Byte로 표시되더라도 덮어쓰거나 삭제할 수 없는 상태로 보호됩니다.

Publish 버튼을 누른 다음에는 위의 그림과 같이 공개 URL이 나타나며, 이 URL을 더블 클릭하여 텍스트를 선택하고 복사할 수 있습니다.

Windows Media Player에서 URL 열기 (Ctrl+U) 기능으로 MP4 미디어 파일을 열어 재생하였을 때 위와 같이 동영상이 원활하게 Progressive Download로 재생이 되고 있습니다.

기능의 제한 사항

현재 포털을 통해서 공개된 부분은 Windows Azure Media Service의 일부 기능에 대한 것으로 PlayReady나 다른 여러 부가 기능들에 대해서는 아직 계속 개발 단계에 있습니다. 지속적으로 업데이트되는 내용을 참고하시어 실제 서비스 도입에 활용하면 유용한 부분이 많을 것으로 예상됩니다.

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

기술 소식2012. 11. 1. 23:14

안녕하세요. Windows Azure MVP 남정현입니다. 이번 BUILD 2012에서는 Windows 8과 Windows Server 2012를 필두로 하는 다양한 업데이트 소식이 있었는데요, 한 번에 알아보기 쉽도록, 그리고 약간의 시차를 두고 있는 흥미로운 새 소식들도 같이 전해드릴까 합니다.

Windows Server 2012 및 .NET Framework 4.5 지원 추가

Visual Studio 2012 출시와 함께 Windows Server 2012, .NET Framework 4.5에 대한 지원이 새로 추가되었습니다. 그리고 ASP.NET의 경우 ASP.NET MVC 4.0 업데이트를 포함하고 있고, C# 5.0 및 VB 11.0에 대한 지원도 포함하여 멀티 스레드 프로그래밍을 좀 더 생산성있게 할 수 있는 방안을 대폭 마련하고 있습니다. .NET Framework 4.5에서 향상된 내용들은 http://msdn.microsoft.com/ko-kr/library/ms171868.aspx 에서 확인하실 수 있습니다.

Windows Azure Mobile Service의 Windows Phone 8 지원 추가

Windows Phone 8 SDK 발표와 함께 Windows Azure Mobile Service에서 Windows Phone 8 대상 SDK도 같이 발표하였습니다. Windows 8과 Windows Phone 8을 위한 App 모두를 지원하는 것이므로 N 스크린 앱 개발에 큰 도움이 될 것입니다. 자세한 튜토리얼은 https://www.windowsazure.com/en-us/develop/mobile/tutorials/get-started-wp8/ 에서 확인하실 수 있습니다.

Windows Azure Store 런칭

Windows Azure 2012년 초반 업데이트에 공개된 적이 있었던 ClearDB의 Azure 기반 MySQL 데이터베이스 서비스는 이미 잘 알려져 있습니다. 그런데 한 가지 아쉬웠던 점이 있었다면 무료 서비스에 한정되어있었던데다 Windows Azure와는 따로 떨어져있는, 접근성이 그다지 좋지 않은 부가 서비스였었습니다. 그러나 이제는 ClearDB의 사례를 포함하여 Windows Azure 서비스에 결합할 수 있는 다양한 컴패니언 서비스 및 데이터 소스를 한 곳에서 쉽게 구매하고 자원으로 관리할 수 있도록 Windows Azure Store 안에서 통합 관리할 수 있게 되었습니다. 아쉽게도 2012년 11월 현재 미국에서만 런칭이 된 상태입니다만 조만간 한국에서도 편리하게 대량 E-MAIL 발송, 대용량 MySQL 데이터베이스 등 다양한 서비스를 쉽게 구매해서 실제 클라우드 서비스에 반영할 수 있을 것입니다. 자세한 내용은 https://www.windowsazure.com/en-us/store/overview/ 에서 살펴보실 수 있습니다.

새 버전의 .NET용 Windows Azure SDK 및 가이드 런칭

.NET용 Windows Azure SDK의 새 버전이 발표되었습니다. 다른 써드파티의 Windows Azure 관련 도구와 비슷하게 동작하도록 개선되고 향상된 Visual Studio Add-in을 대거 포함하며, 새롭게 설계된 클래스 라이브러리 및 .NET Framework 4.5 타겟팅을 지원합니다. 자세한 내용은 http://msdn.microsoft.com/en-us/library/ff683673.aspx#BK_October2012 에서 확인하실 수 있습니다.

Windows Azure 분산 캐시 정식 업데이트

AppFabric Cache로 소개되었던 적이 있는 이전 버전의 캐시는 매우 가격이 비쌌고 이에 비해 얻을 수 있는 득이 그렇게 크지 않았었습니다. 이를 대체하여 좀 더 사용자에게 실질적인 캐시 서비스의 이점을 누릴 수 있게 하기 위하여 새롭게 분산 캐시를 업데이트하였는데, 이번 릴리즈에서 정식 서비스로 업데이트되었습니다. Web Role이나 Worker Role, 혹은 Cache 전용 Worker Role을 만들어서 상황에 따라 유동적으로 증감하는 고성능 분산 캐시를 쉽게 구축할 수 있게 되었습니다. 이에 대한 자세한 내용은 https://www.windowsazure.com/en-us/home/features/caching/ 에서 살펴보실 수 있습니다.

Visual Studio Team Foundation Service Online 정식 런칭

Visual Studio TFS Online 또한 정식으로 서비스가 런칭되었습니다. 2012년 11월 현재 무료 버전으로만 서비스가 운영되고 5명의 사용자까지 지원합니다. Visual Studio, Eclipse, XCode와 함께 연동할 수 있도록 다양한 애드인과 함께 배포되며, Windows Azure Web Site 서비스와 함께 연동할 수 있으므로 다양한 요구 사항을 충족할 수 있습니다. 그리고 Git을 이용하여 TFS를 대상으로 작업할 수 있는 도구인 Git-TF (코드프로젝트 홈페이지: http://gittf.codeplex.com/, Microsoft 다운로드 페이지 주소: http://www.microsoft.com/en-us/download/details.aspx?id=30474)도 같이 활용하시면 유용하실 것입니다. http://blogs.msdn.com/b/somasegar/archive/2012/10/31/team-foundation-service-is-released.aspx 에서 자세한 내용을 보실 수 있으며, 서비스 사용은 http://tfs.visualstudio.com/ 에서 신청 가능합니다.

Windows Azure SQL Data Sync 10월 업데이트

오랜 기간에 걸쳐서 평가를 진행 중인 Windows Azure SQL Data Sync 서비스가 이번 10월 업데이트를 기준으로 전세계 모든 데이터센터에서 사용 가능하도록 배포가 완료되었습니다. Windows Azure SQL Data Sync 서비스를 사용하면 기존 SQL 서버 데이터베이스 간, Windows Azure SQL Database 간, 혹은 기존 SQL 데이터베이스와 Windows Azure SQL Database 사이의 데이터 동기화를 비동기적으로 최소한의 코드 작성을 통하여 손쉽게 수행할 수 있는 것이 특징이며 이에 대한 자세한 내용이 문서화되어있습니다. SQL Data Sync 서비스에 대한 소개는 http://msdn.microsoft.com/ko-kr/library/hh456371 페이지를, SQL Data Sync 서비스에 대한 시행착오를 최소화하기 위한 가이드는 http://msdn.microsoft.com/ko-kr/library/hh667328.aspx 페이지의 내용을 참고하시면 유용합니다.

Windows Azure 기술 운영에 관한 중국의 21Vianet社와의 MOU 체결

Windows Azure는 Public Cloud Computing Service로, 그동안 중국 내에서는 해외 데이터센터의 이용이 쉽지 않았던 비즈니스 상의 특성 때문에 Windows Azure가 서비스를 할 수 없었던 대표적인 국가였습니다. 이러한 한계를 극복하기 위해서 21Vianet社 (http://www.en.21vianet.com/)와의 MOU를 체결하여 Windows Azure 운영 시스템을 중국 내 로컬 데이터센터에서 이용할 수 있도록 협약을 맺었다는 소식이 Windows Azure 공식 블로그를 통해서 공개되었습니다. ( http://blogs.msdn.com/b/windowsazure/archive/2012/11/01/cloud-os-is-coming-to-china.aspx) 중국 내에서 클라우드 컴퓨팅 서비스를 도입할 것을 계획 중이신 경우 향후 21Vianet을 통하여 Windows Azure와 유사한 서비스를 중국 내 로컬 데이터센터를 이용하여 경험할 수 있을 것입니다.


Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

이벤트2012. 10. 21. 21:35

 

데이비드 챠펠(David Chappell) 씨가 10월 22일(월) 저녁 7시, 한국 Microsoft 5층 WIN 세미나 룸에서 윈도우 애저(Windows Azure) 유저 그룹에서 클라우드 플랫폼에 대한 관련한 강연을 합니다.

데이비드 챠펠씨는 Chappell & Associates (http://www.davidchappell.com)의 대표로서 다양한 강연, 저술, 컨설팅을 통해 세계의 많은 IT리더들께서 새로운 기술을 잘 이해하고, 더 나은 결정을 내릴 수 있게 도와 드리고 있습니다. 데이비드는 5개 대륙에 수만명의 IT리더, 아키텍트, 개발자들이 참석하는 수백개의 회의 및 행사에서 기조 연사로 활동하고 있으며, 그의 저술은 다양한 언어로 번역 출판 되어 MIT, ETH 취리히 및 와튼스쿨 등 여러 대학의 과정에서 사용되고 있습니다. 또한 HP, IBM, Microsoft 등 IT 기업의 고객 및 파트너와 내부직원을 대상으로 IT 전반의 컨설팅을 수행하고 있으며, 스탠포드 대학 등에서의 강연 및 유수하고 다양한  IT 관련 출판물에 유명 칼럼리스트로도 활동하고 있습니다.

행사에 참석하기 희망하시는 분들께서는 온오프믹스 행사 홈 페이지 (http://onoffmix.com/event/9962) 에서 접수하여 주시기 바랍니다.

서울 행사 접수하러 가기

ps. 서울에서 진행되는 행사 이외에 기타 예정되어있는 각 국가별/도시별 세미나 일정은 다음과 같습니다. (아래 시간은 미국 시간 기준입니다.)

  • 10월 25일: 싱가폴

  • 10월 29일: 바르샤바 (Microsoft Technology Summit)

  • 10월 30일 ~ 31일: 프라하

  • 11월 5일 ~ 6일: 파리

  • 11월 8일: 런던

  • 11월 9일: 뮌헨

  • 11월 13일: 토론토

  • 11월 15일: 뉴욕

 

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

Azure Webinar2012. 9. 26. 22:53

안녕하세요. Windows Azure MVP 남정현입니다.

웹 캐스트 이벤트 홈페이지: http://msdn.microsoft.com/ko-kr/jj720372

2012년 후반에 접어들어서 새롭게 업데이트되는 Windows Azure의 다양한 내용을 미리 살펴보실 수 있도록 웹 캐스트를 촬영하였고 약 20여편의 내용을 포함하는 컬렉션이 Microsoft Showcase에 업로드되었습니다. 2012년 8월 여름까지 발표된 Windows Azure의 각종 서비스들에 대한 내용을 포함하고 있으며, Windows Azure Mobile Service에 대한 부분은 이후 블로그 아티클 등을 통하여 별도로 내용을 전개해볼까 합니다.

  1. [Windows Azure Platform/Microsoft 웹 캐스트] - #1. Windows Azure 개요
  2. [Windows Azure Platform/Microsoft 웹 캐스트] - #2. Windows Azure 웹 사이트 소개
  3. [Windows Azure Platform/Microsoft 웹 캐스트] - #3. Azure에서 실행되는 ASP.NET 웹 사이트 만들기
  4. [Windows Azure Platform/Microsoft 웹 캐스트] - #4. WPNS와 Windows Azure로 알림 서비스 구현하기
  5. [Windows Azure Platform/Microsoft 웹 캐스트] - #5. Windows Azure 미디어 서비스 API 활용하기
  6. [Windows Azure Platform/Microsoft 웹 캐스트] - #6. Windows Azure 클라우드 서비스
  7. [Windows Azure Platform/Microsoft 웹 캐스트] - #7. Cloud Service 프로젝트 처음 만들어보기
  8. [Windows Azure Platform/Microsoft 웹 캐스트] - #8. 기존 ASP.NET 웹 사이트를 Azure로 옮기기
  9. [Windows Azure Platform/Microsoft 웹 캐스트] - #9. Windows Azure 가상 컴퓨터
  10. [Windows Azure Platform/Microsoft 웹 캐스트] - #10. Windows 가상 컴퓨터 소개
  11. [Windows Azure Platform/Microsoft 웹 캐스트] - #11. SQL 데이터베이스 소개
  12. [Windows Azure Platform/Microsoft 웹 캐스트] - #12. SQL 데이터베이스 실습하기
  13. [Windows Azure Platform/Microsoft 웹 캐스트] - #13. Windows Azure 저장소
  14. [Windows Azure Platform/Microsoft 웹 캐스트] - #14. Windows Azure 저장소 실전 예제 살펴보기
  15. [Windows Azure Platform/Microsoft 웹 캐스트] - #15. Windows Azure 서비스 버스
  16. [Windows Azure Platform/Microsoft 웹 캐스트] - #16. 서비스 버스 Queue와 Topic
  17. [Windows Azure Platform/Microsoft 웹 캐스트] - #17. 클레임 기반 인증 구현하기
  18. [Windows Azure Platform/Microsoft 웹 캐스트] - #18. 확장성, 전역성, 높은 가용성을 지닌 앱 만들기
  19. [Windows Azure Platform/Microsoft 웹 캐스트] - #19. 캐시 클러스터를 이용하여 신축성있는 클라우드 서비스 만들기
  20. [Windows Azure Platform/Microsoft 웹 캐스트] - #20. 트래픽 관리자를 이용한 24x365 글로벌 서비스 구축하기

감사합니다.

 

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

  1. 좋아요!

    2012.10.28 00:15 신고 [ ADDR : EDIT/ DEL : REPLY ]

Azure Storage/Database2012. 8. 18. 19:56

안녕하세요. Windows Azure MVP 남정현입니다.

저의 경우, Windows Azure를 이용하여 서비스를 구축한지 상당한 시일이 지났고, 필요에 따라 데이터센터의 위치는 같지만 서로 다른 Subscription 간에 스토리지 파일들을 주거나 받아야 할 필요성이 생겼습니다. 그 동안은 이 작업을 위해서 클라우드 외부에서 CloudBerry Windows Azure Client를 활용했었는데, 사실 클라우드 외부를 경유하는 과정을 거치면 오버헤드가 있을 수 있고 데이터센터 밖으로 나가는 데이터 트래픽에 관한 비용이 있었습니다.

서로 다른 Azure 저장소 계정 사이의 파일 동기화를 빠른 시간 안에 마무리할 수 있는 좋은 방법이 있어 소개해드리려고 합니다. 일단 이 방법을 위해서도 CloudBerry Windows Azure Client를 사용하는 것이 직접 프로그램을 작성하는 것보다는 여전히 유용합니다만 조금 다른 방법으로 접근하려고 합니다. 알려드리려고 하는 정보에서의 핵심은 작업을 수행하는 지리적 위치에 있습니다. 순서는 다음과 같습니다.

  • Windows Azure Virtual Machine Preview를 신청합니다. (http://manage.windowsazure.com/ 에서 관리할 수 있는 서비스를 의미합니다.)
  • Windows Server 2008 R2 혹은 다른 Windows Server 이미지를 사용하여 가상 컴퓨터의 Small Instance 레벨로 컴퓨터 1대를 생성하고 부팅시킵니다.
  • 프로비져닝이 끝나고 나면, 원격으로 들어가서 CloudBerry Windows Azure Client 프로그램을 다운로드받습니다. http://www.cloudberrylab.com/free-microsoft-azure-explorer.aspx 페이지에서 다운로드하여 설치할 수 있으며, Windows Server OS의 기본 보안 정책 상 IE ESC 설정을 완화해야할 수 있으므로 다운로드가 불편할 경우 IE ESC 설정을 먼저 풀어도 무방합니다.
  • 설치가 끝나고 나면 옮기려고 하는 스토리지 계정과 옮겨놓을 스토리지 계정의 접속 정보를 CloudBerry Windows Azure Client에 등록하고, 왼쪽편을 구 계정, 오른쪽편을 신 계정으로 접속하도록 열어놓습니다. 이때, 빠른 속도를 위해서 계정 정보에서 SSL 연결을 사용하지 않는 것으로 합니다.
  • 선택적으로 옮겨오고 싶은 파일을 Ctrl 키를 눌러 드래그 앤 드롭하면 빠르게 파일이 복사됩니다. 모든 작업이 큐에 저장되므로 먼저 실행 중인 작업이 있어도 계속해서 작업을 추가할 수 있습니다.
  • 작업이 끝난 다음에는 VM, VM 이미지, VM과 연결된 클라우드 서비스, 자동 생성된 스토리지 계정, 구 계정을 차례대로 삭제하시면 됩니다.

자세한 내용을 스크린 샷을 통해서 보여드리면 다음과 같습니다.

IE ESC 설정을 Windows Server 2008에서 해제하려면 서버 관리자 콘솔 프로그램을 실행하고 Configure IE ESC 링크를 찾아 클릭합니다.

대화 상자가 나타나게 되는데, 여기서 Administrators (관리자)에 대한 부분만 Off 라디오 버튼을 체크하고 OK 버튼을 눌러 저장합니다. 만약 이 VM을 계속 사용할 계획이라면 CloudBerry 클라이언트 프로그램을 다운로드하고 설치한 다음에는 반드시 이 설정을 On으로 다시 복구하는 것이 좋습니다.

CloudBerry Windows Azure 클라이언트를 설치하고, 두 곳의 계정 정보를 아래와 같이 등록합니다. 단, 빠른 속도를 위해서 양쪽 모두 SSL 사용을 체크하지 않고 http 통신으로만 연결하도록 설정하는 것이 유리합니다.

앞에서 말씀드린 대로 왼쪽을 소스, 오른쪽을 대상으로 연결 화면을 열어둡니다. Sync Folders 기능이나 복사 관련 기능들은 이와 같은 구도로 UI를 만들었을 때 가장 손쉽게 작업할 수 있도록 동선이 맞추어집니다. 이제 아래와 같은 화면이 되었을 때, 복사할 항목을 Ctrl 키를 누른 채로 오른쪽으로 드래그 & 드롭해서 가져다놓기만 하면 하위 폴더의 모든 항목들을 자동으로 조사하여 복사하기 시작합니다.

대기열의 길이에 상관없이 위와 같이 걸어놓고 프로그램을 최소화하면 트레이 아이콘에서 프로그램이 계속 실행되므로 이렇게 예약해놓고 잠시 쉬다오시면 되겠습니다. :-)

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

PaaS2012. 8. 6. 08:00

지난번 글에 이어서 Access Control을 실제 ASP.NET 응용프로그램에 연동하는 방법을 살펴보도록 하겠습니다. Access Control을 연동하기 위해서는 .NET의 경우 Windows Identity Foundation이라는 새로운 기술을 필요로 합니다. Windows Identity Foundation은 여러 버전의 런타임으로 나누어져 있으며, Windows Server 2003부터 Windows Server 2012까지 지원되지만, 보통은 Windows Server 2008 이후의 OS를 사용하는 것이 구성이나 배포가 단순합니다.

이 글에서는 Visual Studio 2010과 WIF 3.5를 사용하는 것을 기준으로 가이드를 쓰려고 합니다. 역시 나중에 기회가 되면 Visual Studio 2012와 WIF 4.5기준의 업데이트를 한 번 더 소개하겠습니다.

글에 있는 내용을 따라서 시작하기 전에 ACS를 이용하는 웹 사이트를 배포할 서버와 개발자 컴퓨터에 다음의 런타임을 버전에 맞추어 선택적으로 미리 설치하여 구성하셔야 합니다.

운영 체제 버전 별 런타임 설치하기

개발 도구 (SDK) 설치하기

개발 도구의 경우 한국 Microsoft 홈페이지에는 3.5 버전의 SDK만 게시되어있는데, .NET Framework 3.5가 아닌 4.0을 타겟으로 하는 경우에는 영어 홈페이지로 이동해서 직접 다운로드해야 합니다. 아래는 패키지 파일 다운로드 경로를 직접 걸어놓은 것으로 필요한 패키지를 골라 설치하면 됩니다.

SDK 또한 Windows Server 2003 SP2 부터 설치가 가능합니다.

Windows 8 및 Windows Server 2012에서 WIF 3.5 런타임 설치하기

Windows Identity Foundation 4.5 대신 3.5 버전을 사용해야 할 경우 아래 절차를 거쳐 설치할 수 있습니다.

제어판의 프로그램 및 기능 - 또는 - 프로그램 빠른 검색이나 Windows + R 단축키로 사용 가능한 실행 대화 상자에서 appwiz.cpl 제어판 애플릿을 시작합니다.

그 다음 Windows 기능 켜기/끄기 마법사를 시작합니다.

여러 항목들 중에서 Windows Identity Foundation 3.5 항목을 체크하고 확인 버튼을 클릭합니다.

잠시 기다리면 아래와 같이 완료 대화 상자가 나타납니다.

이제 여기에 WIF SDK 3.5 - 또는 - 4.0 버전을 설치하면 됩니다.

Visual Studio 2008 및 Visual Studio 2010의 경우 - FEDUTIL.EXE 사용하기

런타임의 경우 Windows Identity Foundation의 실행을 위한 클래스 라이브러리 및 네이티브 구성 요소들을 배포하기 위한 목적으로 사용하는 것이고, 기존에 만든 응용프로그램의 환경 설정 파일을 변경하거나 클래스 라이브러리 도움말 등을 포함하는 것이 SDK의 구성입니다. 그리고 부가적으로 SDK의 경우에는 Visual Studio와 연동하는 기능도 제공합니다만 이 기능은 제대로 설치가 될 수도 있고 그렇지 않을 수도 있어서 신경쓸 필요는 없는 부분입니다. SDK에서 진짜 중요한 부분은 FEDUTIL.EXE 라는 마법사형 프로그램으로 이 프로그램을 사용하여 여러분의 asp.net 응용프로그램을 WIF, ACS와 연결시킬 때 필요한 복잡한 설정을 자동화할 수 있습니다.

시스템 사용 환경에 따라 FedUtil.exe 파일의 설치 위치에 다소 차이가 있지만 아래와 같이 요약할 수 있습니다.

  • 32비트 버전 설치 시: %programfiles%\Windows Identity Foundation SDK\v4.0\FedUtil.exe
  • 64비트 버전 설치 시: %programfiles(x86)%\Windows Identity Foundation SDK\v4.0\FedUtil.exe

FedUtil.exe 프로그램을 실행시키고 잠시 기다리면 아래와 같이 마법사가 시작됩니다.

UI 언어는 환경에 따라 한국어가 나올 수도, 영어가 나올 수도 있습니다. 응용프로그램 설정 파일의 위치를 묻는 부분에는 여러분이 WIF를 적용하려는 ASP.NET 웹 프로젝트의 기본 web.config 파일 경로를 지정하는 곳이며, Visual Studio로 해당 프로젝트를 편집 중에 있더라도 안전하게 적용할 수 있습니다.

노트: Visual Studio와 연동된다는 것은 이 유틸리티를 프로젝트 실행 도중 즉시 호출할 수 있도록 "STS 추가 마법사"라는 이름으로 솔루션 탐색기 컨텍스트 메뉴에 추가하는 정도의 편의 제공이기 때문에 이 유틸리티를 직접 호출해도 무방합니다.

그리고 Application URI에는 지난번 글에서 소개했던 것과 같이 Ad-hoc 서버의 포트 번호를 확인하여 얻을 수 있는 localhost 주소를 이곳에 기재해야 합니다. 프로덕션 환경에서 적용하려면 당연히 이 부분이 실제 프로덕션 웹 사이트의 주소가 되어야 합니다.

Application URI에 HTTPS대신 HTTP 주소를 지정할 경우 아래와 같은 경고 메시지가 나타나지만, Access Control 테스트를 위한 것이므로 지금은 무시하고 넘어갑니다.

계속 진행하면 보안 토큰 서비스의 주소를 물어보는 단계가 나타납니다. 이 단계에서 실제로 Azure Access Control Service의 웹 서비스 주소를 지정하여 WIF와 ACS간에 연동을 이루게 됩니다.

여기에 어떤 주소를 넣어야 할까요? 다시 Azure Access Control 관리자 웹 서비스로 되돌아가봅니다. 관리자 웹 서비스 페이지 좌측 제일 하단의 응용프로그램 통합 링크를 클릭하면 페이지 하단에 STS 서비스를 위한 WS-Federation Metadata Endpoint URL이 보이는데 이 주소를 그대로 Copy & Paste합니다.

다음 단계로 진행하면 ACS 서비스가 제시한 인증서가 올바른 인증서가 아니라는 오류를 표시합니다. 이전에 언급한대로 Azure ACS가 프로덕션 환경에서 제대로 작동하려면 정식 서버 인증서를 필요로 합니다. 여기서는 마법사가 기본으로 제안하는 인증서 체인 검사 비활성화를 선택하고 진행하겠습니다.

토큰 암호화에 대한 설정을 지정하는 페이지가 나타납니다. ACS 설정에서 토큰 암호화에 대한 부분을 구성하였다면 이 단계에서도 호환 가능한 설정을 같이 지정해야 합니다.

웹 서비스가 던져줄 수 있는 클레임의 종류에 대한 설명이 열거됩니다. 다음 버튼을 클릭합니다.

이제 마침 버튼을 눌러 web.config 파일을 업데이트합니다.

별다른 이상이 없다면 아래와 같이 성공 메시지 상자가 나타나고 FedUtil.exe 프로그램이 종료될 것입니다.

NOTE: Visual Studio를 실행 중이었다면 web.config 파일을 열어둔 상태였을 경우 파일이 변경되었음을 감지하고 다시 읽어들일 것인지 물어볼 수 있습니다. 이 경우 꼭 바뀐 파일 내용을 다시 읽도록 해주어야 하며, 편집기 버퍼에 남아있는 컨텐츠를 저장하면 FedUtil.exe로 변경한 내용이 소실되므로 유의해야 합니다. 편집기 버퍼에서 바꾼 내용이 FedUtil.exe 실행 전에 많이 존재한다면 변경된 web.config 파일을 별도로 백업받아놓고 두 파일을 적절하게 병합해야 합니다.

변경된 web.config 파일 내용 살펴보기

이제 FedUtil.exe 프로그램에서 어떤 일을 해주었는지 살펴볼 차례입니다. 우선 여러분의 웹 프로젝트 디렉터리에 새로운 디렉터리와 파일들이 나타나는데, 아래와 같습니다. 

FederationMetadata 폴더에 ACS 서비스와 상호대조를 위한, ACS로부터 복제한 메타데이터 파일이 들어있습니다. 실제 서비스가 제대로 작동하기 위해서는 이 파일이 개발자 환경이나 프로덕션 서버로 정확하게 배포되어야 합니다. 버전 관리 시스템을 사용하는 경우 이 파일이 버전 관리 대상에 포함될 수 있도록 해야 합니다.

그리고 web.config 파일이 변경된 것과 더불어 이전 파일에 대한 백업도 들어있습니다. 백업 파일은 확인 후 필요없으면 삭제해도 무방합니다.

그렇다면 web.config 파일은 어떻게 바뀌었는지 한 번 살펴보도록 할까요?우선 파일을 열었을 때 가장 먼저 눈에 띄는 것은 새로운 Configuration Handler를 추가한 부분인데, 아래와 같습니다.

  <configSections>
    <section name="microsoft.identityModel" type="Microsoft.IdentityModel.Configuration.MicrosoftIdentityModelSection, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </configSections>

새로운 Configuration Handler를 지정하고 있으므로 설정 파일 어딘가에 새로운 설정 섹션이 하나 더 추가되어있겠군요. 그리고 appSettings 태그 아래에는 메타데이터 원본 경로에 대한 설정이 들어있습니다.

  <appSettings>
...
    <add key="FederationMetadataLocation" value=https://<네임스페이스>.accesscontrol.windows.net/FederationMetadata/2007-06/FederationMetadata.xml />
...
  </appSettings>

그리고 직전에 살펴본 FederationMetadata 폴더를 위한 특권이 하나 들어있습니다. 인증 세션을 거치지 않았어도 누구나 FederationMetadata 폴더는 접근할 수 있도록 열어놓았군요.

  <location path="FederationMetadata">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>

반면에 웹 응용프로그램의 모든 영역에 대해서는 보호가 걸리게 됩니다.

  <system.web>
...
    <authorization>
      <deny users="?" />
    </authorization>
    <authentication mode="None" />
...
    <!--Commented out by FedUtil-->
    <!--<authentication mode="Forms"><forms loginUrl="~/Account/LogOn" timeout="2880" /></authentication>-->
  </system.web>

달리 표현하면 web.config이 관할하는 모든 영역에 대해서는 ACS를 통한 로그인을 거치지 않을 경우 자동으로 ACS측 로그인 페이지로 리디렉션됨을 의미합니다. 이 부분에 대한 조율이 필요하다면 ASP.NET MVC의 경우 영역으로 별도 영역을 파티셔닝하거나, Location 태그를 적극 활용해야 합니다. 그리고 중요한 차이점이 하나 더 보이는데 WIF의 인증 체계는 기존의 ASP.NET이 제공하던 Form 인증, AD 인증, Windows 인증 및 Passport 인증 어디에도 속하지 않는다는 것입니다.

그리고 당연한 이야기이지만 어셈블리 참조가 걸려있습니다. web.config 파일 및 동적 컴파일 호출 시 유효한 대상으로 걸려있는 것이고, Visual Studio 프로젝트나 별도 컴파일 호출 시 WIF를 사용하려면 프로젝트 참조에서 Microsoft.IdentityModel 어셈블리를 직접 추가해야 합니다.

  <system.web>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
...
        <add assembly="Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
...
      </assemblies>
    </compilation>
...
  </system.web>

ASP.NET 차원에서는 마지막으로 HTTP 모듈이 대체되는 부분이 있습니다. WIF가 기존 ASP.NET 인증 체계를 완전히 재정의해야 하므로 아래의 모듈이 새로 추가됩니다.

    <httpModules>
      <add name="WSFederationAuthenticationModule" type="Microsoft.IdentityModel.Web.WSFederationAuthenticationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      <add name="SessionAuthenticationModule" type="Microsoft.IdentityModel.Web.SessionAuthenticationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    </httpModules>

같은 설정이지만 IIS 7 이후의 서버들을 위해서는 <system.webServer> 태그 설정도 동일하게 추가됩니다.

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
      <add name="WSFederationAuthenticationModule" type="Microsoft.IdentityModel.Web.WSFederationAuthenticationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler" />
      <add name="SessionAuthenticationModule" type="Microsoft.IdentityModel.Web.SessionAuthenticationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler" />
    </modules>
  </system.webServer>

이제 끝으로 제일 서두에 언급된 새로운 설정 핸들러가 web.config 끝자락에 보입니다.

  <microsoft.identityModel>
    <service>
      <audienceUris>
        <add value="http://localhost:50086/" />
      </audienceUris>
      <federatedAuthentication>
        <wsFederation passiveRedirectEnabled="true" issuer="https://rkttuacs.accesscontrol.windows.net/v2/wsfederation" realm="http://localhost:50086/ " requireHttps="false" />
        <cookieHandler requireSsl="false" />

      </federatedAuthentication>
      <applicationService>
        <claimTypeRequired>
          <!--Following are the claims offered by STS 'https://rkttuacs.accesscontrol.windows.net/'. Add or uncomment claims that you require by your application and then update the federation metadata of this application.-->
          <claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name" optional="true" />
          <claimType type="
http://schemas.microsoft.com/ws/2008/06/identity/claims/role" optional="true" />
          <!--<claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier" optional="true" />-->
          <!--<claimType type="
http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider" optional="true" />-->
        </claimTypeRequired>
      </applicationService>
      <issuerNameRegistry type="Microsoft.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
        <trustedIssuers>
          <add thumbprint="CE5BF1CE19528FEDA7FA9F3ECF87A85E3B1B6AED" name="https://rkttuacs.accesscontrol.windows.net/" />
        </trustedIssuers>
      </issuerNameRegistry>
      <certificateValidation certificateValidationMode="None" />
    </service>
  </microsoft.identityModel>

위의 내용들 가운데에서 굵게 강조 표시한 항목들이 변경의 여지가 있고 제어가 가능한 부분들입니다. 지금으로서는 테스트를 목적으로 하는 것이므로 따로 변경할 것은 없겠습니다.

잘 작동할까요?

워낙에 중요하고 어려운 부분들만 수정해놓은 것이라 불안하게 보입니다. 잘 작동할까요? 한 번 실행해보겠습니다. 

설정 파일에서 변경한대로 사이트에 접속하자마자 ACS 로그인 페이지로 이동합니다. 이후에 다시 살펴보겠지만 이 페이지의 디자인은 얼마든지 재정의 가능합니다. 여기서 Google ID를 시험삼아 로그인에 사용하도록 해보겠습니다.

로그인을 거치고나니 이런 오류 메시지가 나타납니다. 이 문제를 어떻게 해결해야 할까요?

WIF 3.5의 호환성 문제 해결하기

전통적인 로그인 및 사용자 인증 모델에서는 고려할 수 없었던 동작을 수행해야 하는데 안타깝게도 ASP.NET은 이러한 부분에 대해서 다소 부정적인 면모를 보입니다. 이 문제를 해결하는 방법 자체는 단순합니다. 입력 폼으로 들어오는 XML 데이터를 무시하도록 설정을 완화시키면 가능합니다. 그렇지만 그냥 그렇게 프로덕션 환경에 설정을 풀어놓은채로 올리기에는 너무 안일합니다. 뭔가 좋은 방법이 없을까요?

유효성 검사를 풀지 않으면서도 안전하게 WIF와 ACS 사이의 통신을 인정할 수 있는 방법으로 Custom Validation Handler를 추가하는 방법이 있습니다. 이 코드는 아래의 웹 페이지의 코드를 인용한 것입니다.

http://social.technet.microsoft.com/wiki/contents/articles/1725.windows-identity-foundation-wif-a-potentially-dangerous-request-form-value-was-detected-from-the-client-wresult-t-requestsecurityto.aspx

C# 소스 코드

//-----------------------------------------------------------------------------
//
// THIS CODE AND INFORMATION IS PROVIDED 'AS IS' WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
//-----------------------------------------------------------------------------

using System;
using System.Collections.Specialized;
using System.Web;
using System.Web.Helpers;
using System.Web.Util;
using Microsoft.IdentityModel.Protocols.WSFederation;

/// <summary>
/// This SampleRequestValidator validates the wresult parameter of the
/// WS-Federation passive protocol by checking for a SignInResponse message
/// in the form post. The SignInResponse message contents are verified later by
/// the WSFederationPassiveAuthenticationModule or the WIF signin controls.
/// </summary>
public class SampleRequestValidator : RequestValidator
{
    protected override bool IsValidRequestString(
        HttpContext context, string value, RequestValidationSource requestValidationSource,
        string collectionKey, out int validationFailureIndex)
    {
        validationFailureIndex = 0;

        if (requestValidationSource == RequestValidationSource.Form &&
            !String.IsNullOrEmpty(collectionKey) &&
            collectionKey.Equals(WSFederationConstants.Parameters.Result, StringComparison.Ordinal))
        {
            NameValueCollection unvalidatedFormValues = Validation.Unvalidated(context.Request).Form;
            SignInResponseMessage message = WSFederationMessage.CreateFromNameValueCollection(
                WSFederationMessage.GetBaseUrl(context.Request.Url),
                unvalidatedFormValues) as SignInResponseMessage;

            if (message != null)
                return true;
        }

        return base.IsValidRequestString(context, value, requestValidationSource, collectionKey, out validationFailureIndex);
    }
}

Visual Basic .NET 코드

'-----------------------------------------------------------------------------
'
' THIS CODE AND INFORMATION IS PROVIDED 'AS IS' WITHOUT WARRANTY OF
' ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
' THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
' PARTICULAR PURPOSE.
'
' Copyright (c) Microsoft Corporation. All rights reserved.
'
'
'-----------------------------------------------------------------------------

Imports System
Imports System.Collections.Specialized
Imports System.Web
Imports System.Web.Helpers
Imports System.Web.Util
Imports Microsoft.IdentityModel.Protocols.WSFederation

''' <summary>
''' This SampleRequestValidator validates the wresult parameter of the
''' WS-Federation passive protocol by checking for a SignInResponse message
''' in the form post. The SignInResponse message contents are verified later by
''' the WSFederationPassiveAuthenticationModule or the WIF signin controls.
''' </summary>
Public Class SampleRequestValidator
    Inherits RequestValidator

    Protected Overrides Function IsValidRequestString( _
        context As HttpContext, value As String, requestValidationSource As RequestValidationSource, _
        collectionKey As String, ByRef validationFailureIndex As Integer) As Boolean

        validationFailureIndex = 0

        If requestValidationSource = Util.RequestValidationSource.Form AndAlso _
            String.IsNullOrEmpty(collectionKey) = False AndAlso _
            collectionKey.Equals(WSFederationConstants.Parameters.Result, StringComparison.Ordinal) Then

            Dim unvalidatedFormValues As NameValueCollection = Validation.Unvalidated(context.Request).Form
            Dim message As SignInResponseMessage = TryCast(WSFederationMessage.CreateFromNameValueCollection( _
                WSFederationMessage.GetBaseUrl(context.Request.Url), _
                unvalidatedFormValues), SignInResponseMessage)

            If message IsNot Nothing Then
                Return True
            End If
        End If
        Return MyBase.IsValidRequestString(context, value, requestValidationSource, collectionKey, validationFailureIndex)
    End Function
End Class

위의 코드가 이상 없이 컴파일이 잘 되는지 프로젝트에 클래스를 새로 하나 추가하여 확인하고, web.config으로 이동하여 아래와 같이 설정을 수정합니다.

C#의 경우

<system.web>
  ...
  <httpRuntime requestValidationType="SampleRequestValidator" />
  ...
</system.web>

VB.NET의 경우

<system.web>
  ...
  <httpRuntime requestValidationType="[프로젝트 이름].SampleRequestValidator" />
  ...
</system.web>

VB.NET의 경우 네임스페이스의 경로가 상대성을 가지기 때문에 정확한 것은 개체 탐색기 등을 이용하여 확인해보는 것이 필요합니다. 대개는 위와 같이 기술했을 때 문제가 없습니다.

이제 다시 로그인을 시도하면 아래 그림과 같이 인증이 통과되는 것을 볼 수 있습니다. 

한 가지 더 - 로드 밸런싱에 대응하기

아직 모든 것이 완벽하게 마무리 되지 않았는데, 로드 밸런싱에 대한 부분이 해결되지 않았습니다. 기본적으로 ASP.NET과 마찬가지로 컴퓨터 상태에 의존하여 난수를 생성하는 DPAPI (Data Protection API)를 기반으로 하므로 로드 밸런싱 환경에서는 아래와 같은 유형의 오류 메시지가 나타납니다.

Key not valid for use in specified state

위의 오류를 해결하기 위해서는 DPAPI 기반의 암호화 대신 로드 밸런싱이나 웹 팜에 참여하는 노드들 간의 키를 일치시켜야 합니다. Global.asax 파일이 없을 경우 하나 추가하여 Application_Start 메서드 혹은 이벤트 처리기에 아래의 코드 조각을 추가합니다.

C# 코드

FederatedAuthentication.ServiceConfigurationCreated += OnServiceConfigurationCreated;

VB.NET 코드

AddHandler FederatedAuthentication.ServiceConfigurationCreated, OnServiceConfigurationCreated()

이어서 추가된 이벤트 처리기의 코드 내용을 아래와 같이 프로그래밍합니다.

C# 코드

using System.Collections.Generic;
using Microsoft.IdentityModel.Tokens;
using Microsoft.IdentityModel.Web;
using Microsoft.IdentityModel.Web.Configuration;
...
    private void OnServiceConfigurationCreated(object sender, ServiceConfigurationCreatedEventArgs e)
    {
       List<CookieTransform> sessionTransforms = new List<CookieTransform>(
           new CookieTransform[] {
               new DeflateCookieTransform(),
               new RsaEncryptionCookieTransform(e.ServiceConfiguration.ServiceCertificate),
               new RsaSignatureCookieTransform(e.ServiceConfiguration.ServiceCertificate) 
           });
       SessionSecurityTokenHandler sessionHandler = new SessionSecurityTokenHandler(
          sessionTransforms.AsReadOnly());
       e.ServiceConfiguration.SecurityTokenHandlers.AddOrReplace(sessionHandler);
    }

VB.NET 코드

Imports System.Collections.Generic
Imports Microsoft.IdentityModel.Tokens
Imports Microsoft.IdentityModel.Web
Imports Microsoft.IdentityModel.Web.Configuration
...
    Private Sub OnServiceConfigurationCreated(sender As Object, e As ServiceConfigurationCreatedEventArgs)
        Dim sessionTransforms As New List(Of CookieTransform)(New CookieTransform() { _
            New DeflateCookieTransform(), _
            New RsaEncryptionCookieTransform(e.ServiceConfiguration.ServiceCertificate), _
            New RsaSignatureCookieTransform(e.ServiceConfiguration.ServiceCertificate)
            })
        Dim sessionHandler As New SessionSecurityTokenHandler( _
            sessionTransforms.AsReadOnly)
        e.ServiceConfiguration.SecurityTokenHandlers.AddOrReplace( _
            sessionHandler)
    End Sub

마지막으로 Azure Cloud Service나 VM, 혹은 여러분의 웹 팜 환경에서 실행되는 컴퓨터에 동일한 인증서를 사용하도록 배포하면 로드밸런싱 환경에서도 안전하게 ACS 기반 인증을 처리할 수 있게 됩니다.

좀 더 많은 자료들과 글 작성에 도움이 된 자료들

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

IaaS2012. 8. 2. 10:19

안녕하세요. Windows Azure MVP 남정현입니다. 오늘은 Windows Azure 관리자 포탈에 대해서 한 가지 이야기를 드릴까 합니다. 현재 Windows Azure는 Preview 버전의 포탈과 Retail 버전의 포탈로 나누어서 서비스가 제공되는 상황인데, 그렇다보니 어디를 어떻게 들어가서 이용해야 하는지 햇갈릴만큼 다소 복잡한 상태입니다.

일단 두 포탈 사이에 가장 큰 기술적 차이는, Retail 버전의 경우 Silverlight로 서비스를 제공하는 것이고 접속 주소는 windows.azure.com 입니다. 그리고 Preview 버전은 HTML5로 서비스를 제공하는 것이며 manage.windowsazure.com이 접속 주소입니다. 양쪽 사이트의 모습은 아래 그림과 같이 차이가 납니다.

Retail 버전의 관리자 포탈 (windows.azure.com으로 접속)

Preview 버전의 관리자 포탈 (manage.windowsazure.com으로 접속) 

Preview Portal의 경우 계속해서 기능을 개발 중에 있으며, Azure Web Site, Azure Virtual Machine, Azure Media Service에 대한 관리 및 프로비져닝 기능을 제공합니다. 반면 Service Bus나 Access Control과 같은 Cloud Service와 연계되는 고급 Building Block 서비스들은 Preview Portal 아닌 Retail Portal로 가서 프로비져닝하거나 관리해야 합니다. 이후에는 모든 서비스들이 새 포탈쪽으로 제공이 될 예정에 있습니다.

만약 실무에서 SLA 계약을 지켜줄 수 있는 서비스들로만 안전하게 Windows Azure를 사용하기 원하신다면, Preview Portal을 통해서 상품을 프로비져닝하지는 마시고, 새 업데이트 소식이 나오기 전까지는 windows.azure.com에서만 서비스를 사용하시는 것이 정확합니다. 포탈을 포함하여 Azure Web Site, Azure Virtual Machine, Azure Media Service, Azure Virtual Network는 모두 Preview 상품이기 때문에 아직 완전한 상태는 아닙니다.

이 외에도 SQL Database (구 SQL Azure), Access Control 또한 자체 포탈을 현재는 별도로 운영을 하고 있으므로 세부적인 설정은 메인 관리 포탈을 통해서 접근하고 관리할 수 있으므로 참고하시면 도움이 될 것입니다.

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

IaaS2012. 7. 17. 15:04

Windows 8에서 Hyper-V를 시작할 수 없는 경우가 종종 있습니다. 이 경우 아래의 사항들을 점검하여 해당되는 내용들을 변경하면 문제가 해결됩니다. VM Role 개발 과정에서나 혹은 Azure Virutal Machine을 위한 이미지 등록 과정에서 Hyper-V를 사용하는데 문제가 있을 경우 도움이 될 것입니다.

우선 아래 명령어들을 실행하기 전에 사용하는 CPU가 실제로 가상화 기술을 지원하는지 우선 확인해야 합니다. 가상화 기술 없이 가상화 기능을 사용하기 위해서는 구 버전의 하이퍼바이저 소프트웨어들을 사용해야 하지만 이것은 보통 사용하는데 문제가 많으므로 권장하지 않습니다.

1. bcdedit 명령줄 도구를 이용하여 부팅 매개 변수를 변경

Hyper-V 플랫폼을 설치한 이후에도 Hyper-V를 정상적으로 실행할 수 없는 사례 중 한 경우로, 부팅 매개 변수에서 하이퍼바이저를 실행시키지 않도록 설정된 경우 이러한 문제가 나타날 수 있습니다. 관리자 권한으로 로그인하고, 명령줄 프롬프트를 권한 상승시켜서 실행하고 아래와 같이 명령어를 실행합니다.

bcdedit /set hypervisorlaunchtype auto

2. CPU 데이터 실행 방지 기능의 비활성화

모든 경우에 해당되지는 않을 수 있지만 Hyper-V와 CPU 데이터 실행 방지 기능 사이에 일종의 연관성이 있는 것 같습니다. Hyper-V를 사용하기 위하여 CPU 데이터 실행 방지 기능을 비활성화해야 할 필요가 있을 경우, BIOS에서 설정을 변경한 후 CPU의 전원을 끊고 다시 공급하는 방식으로 초기화해야 합니다. 즉, 전원을 완전히 내린 후 다시 시작해야 바뀐 설정이 반영됩니다.

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

PaaS2012. 7. 13. 18:07

안녕하세요. Windows Azure MVP 남정현입니다.

이전에 신청한적이 있었던 Windows Azure Media Service Preview 프로그램에 대한 테스트 계정을 오늘 얻을 수 있었습니다. 이에 맞추어 간단한 기능을 테스트해보고 처음으로 블로그 포스트를 남겨봅니다. Windows Azure Media Service는 Windows Azure Platform에 근래에 새로 추가된 클라우스 서비스의 한 종류로, 여러분이 가지고 있는 동영상 컨텐츠를 클라우드 컴퓨팅 상의 자원을 활용하여 인코딩하고 그 내용을 곧바로 저장소와 CDN에 게시할 수 있도록 도와주는 서비스입니다. 현재는 프리뷰 버전으로 나온 상태이므로 기능이나 API에 많은 변동이 있을 수 있습니다. 그러나 서비스의 기본 방향이나 목적은 지금 설명 드린 내용이 주된 내용이 되므로 국내외에서 미디어 관련 서비스를 활용하고자 하는 많은 고객들의 관심을 얻을 수 있을 것으로 봅니다.

Windows Azure Media Service를 신청하려면?

Windows Azure Media Service는 현재 신청을 별도로 받아서 계정을 할당하는 방식으로 사용해 볼 수 있습니다. 이를 위해서는 우선 Windows Azure 계정을 하나 만드셔야 하며, http://www.windowsazure.com/ 에서 신청하실 수 있습니다. 국내에 서비스가 정식으로 시작되었기 때문에, 이제는 해외 거주지 정보가 필요하지 않고 쉽게 신청을 마무리하실 수 있습니다.

Windows Azure 계정 관리 홈페이지 (account.windowsazure.com)에 접속하신 후에, "미리 보기 기능"을 클릭하면 현재 신청 가능한 프리뷰 프로그램들이 열거됩니다. 이 중에서 Media Services 항목을 신청하시면 대기열에 예약이 됩니다. 승인이 완료되면 아래 그림과 같이 관리 홈페이지 (manage.windowsazure.com)에 접속하였을 때 Media Service에 대한 메뉴가 새로 나타납니다.

 

미디어 서비스를 만든 후에는 새로운 미디어 서비스를 신청해야 하며, 이 때 미디어 서비스와 연결할 스토리지 계정을 하나 지정하게 됩니다. 미디어 서비스 API로 동영상을 업로드하고 인코딩 후 결과물을 받아보는 것이 모두 연결된 스토리지 계정을 통해 이루어지고, 미디어 서비스 자체는 현재 프리뷰 프로그램 상태에 있기 때문에 미디어 서비스를 통해서 실행되는 비용은 발생하지 않지만 스토리지에 파일을 보관하고 트랜잭션이 발생하는 것에 대해서는 비용이 따로 계산이 됩니다.

.NET Framework 기반 미디어 서비스 API 개발 환경 구성하기

.NET Framework로 미디어 서비스 API를 호출하기 위해서는 제공되는 SDK를 사용하는 방법이 가장 유용하고 편리합니다. 이를 위해서는 몇 가지 소프트웨어 패키지를 설치해야 하며, 다음의 패키지를 다운로드하여 설치하시면 됩니다.

미디어 서비스 API 자체가 REST API이므로 .NET 이외의 언어에서도 얼마든지 호출이 가능합니다. 기타 언어에 대한 SDK 및 지원 내용, 구성 방법은 아래의 각 링크를 참고하시면 됩니다.

테스트 프로젝트 구성하기

이 예제에서는 Windows 데스크톱 응용프로그램 환경에서 코드를 작성하는 것을 기준으로 예를 들어보겠습니다. Visual Web Developer 2010 SP1이나 Visual Studio 2012 for Web RC를 설치한 경우, Windows 클래스 라이브러리 프로젝트를 만들고 프로젝트 속성에서 프로젝트의 출력 유형을 클래스 라이브러리에서 콘솔이나 Windows로 변경하면 직접 실행 가능한 EXE 파일로 빌드 결과물을 만들 수 있습니다.

콘솔 프로그램을 하나 만들고, 프로젝트 참조에 필요한 라이브러리들을 모두 추가해야합니다.

우선 WCF Data Service 5.0 for OData v3 어셈블리들을 추가해야 합니다. 64비트 컴퓨터를 사용 중인 경우 %programfiles(x86)%\Microsoft WCF Data Services\5.0\bin\.NETFramework 폴더를, 32비트 컴퓨터를 사용 중인 경우 %programfiles%\Microsoft WCF Data Services\5.0\bin\.NETFramework 폴더에 있는 아래의 5개 DLL을 참조로 추가합니다.

  • Microsoft.Data.Edm.dll
  • Microsoft.Data.OData.dll
  • Microsoft.Data.Services.Client.dll
  • Microsoft.Data.Services.dll
  • System.Spatial.dll

이어서 Windows Azure Storage Client 어셈블리를 추가해야 합니다. %programfiles%\Microsoft SDKs\Windows Azure\.NET SDK\2012-06\bin 폴더로 이동하여 아래의 DLL을 참조로 추가합니다.

  • Microsoft.WindowsAzure.StorageClient.dll

이어서 Windows Azure Media Service SDK 어셈블리를 추가해야 합니다. 64비트 컴퓨터를 사용 중인 경우 %programfiles(x86)%\Microsoft SDKs\Windows Azure Media Services\Services\v1.0 폴더를, 32비트 컴퓨터를 사용 중인 경우 %programfiles%\Microsoft SDKs\Windows Azure Media Services\Services\v1.0 폴더에 있는 아래의 DLL을 참조로 추가합니다.

  • Microsoft.WindowsAzure.MediaServices.Client.dll

마지막으로, Windows Azure Media Service SDK가 필요로 하는 Azure Storage Client DLL의 어셈블리 버전에 대하여 바인딩 리디렉션을 지정하여 Azure Media Service SDK가 최신 버전의 Windows Azure Storage Client 라이브러리와 상호작용할 수 있도록 조정해야 합니다. 이를 위하여 프로젝트에 app.config 파일 (웹의 경우 web.config 파일)을 추가하여 아래의 섹션을 추가합니다.

<?xml version="1.0"?>
<configuration>
...
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.WindowsAzure.StorageClient"
          publicKeyToken="31bf3856ad364e35"
          culture="neutral" />
        <bindingRedirect oldVersion="1.1.0.0" newVersion="1.7.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
...
</configuration>

설치한 Azure SDK의 버전이 1.6 버전인 경우 위의 예제 코드에서 1.7.0.0 대신 1.6.0.0으로 지정하면 됩니다. 저의 경우, Windows 8용 Azure SDK를 설치했기 때문에 1.7 버전으로 지정하였습니다.

테스트 프로젝트 코딩하기

아래의 프로그램 코드를 잠시 살펴보겠습니다.

using System;
using System.Linq;
using Microsoft.WindowsAzure.MediaServices.Client;

namespace MediaServiceTestDrive
{
    class Program
    {
        static void Main(string[] args)
        {
            CloudMediaContext mediaContext = new CloudMediaContext(
                "" /* Account Name */,
                "" /* Account Key */
                );

            IAsset asset = mediaContext.Assets.Create(
                "" /* File Path */,
                AssetCreationOptions.CommonEncryptionProtected);

            IJob job = mediaContext.Jobs.Create("Sample Job");

            IMediaProcessor mediaProcessor = mediaContext
                .MediaProcessors.Where(x => x.Name == "Windows Azure Media Encoder")
                .FirstOrDefault();

            ITask task = job.Tasks.AddNew(
                "Sample task", mediaProcessor,
                "H.264 256k DSL CBR" /* Encoding Template Name */,
                TaskCreationOptions.None);

            task.InputMediaAssets.Add(asset);
            task.OutputMediaAssets.AddNew(
                "Output asset",
                true, AssetCreationOptions.None);

            job.Submit();

            while (true)
            {
                foreach (var eachJob in mediaContext.Jobs.ToList())
                {
                    Console.WriteLine(eachJob.State);
                }
                System.Threading.Thread.Sleep(5000);
            }
        }
    }
}

호출 절차가 다소 복잡해 보이지만 논리적으로 여러 작업들을 비동기 방식으로 찾아볼 수 있도록 구성한 것이 특징입니다. 우선 제일 먼저 CloudMediaServiceContext 클래스의 인스턴스를 만들어 연결을 성립시킵니다. 이 과정에서 계정 이름과 비밀 키 값을 요구하는 데 이 부분은 manage.windowsazure.com에 나와있는 미디어 서비스의 계정 이름과 키 값을 지정하면 됩니다. 스토리지 서비스에 대한 계정 이름과 키 값이 아님을 유의합니다. 스토리지 서비스에 대한 계정 이름과 키 값은 미디어 서비스 내부에서 별도로 동기화하여 보관하는 기능이 있으므로 이를 참고합니다.

그 다음 파일을 스토리지에 올리기 위한 절차이자 인코딩 대상을 지정하기 위한 절차로 Asset을 만듭니다. Asset을 만들 때 지정하는 인수에는 로컬 컴퓨터의 미디어 파일의 경로를 지정하며, 이것을 스토리지에 업로드하기 위하여 시간이 다소 걸릴 수 있습니다.

그 다음으로 작업을 하나 정의합니다. 작업 안에는 여러 가지의 세부 태스크가 존재할 수 있으며 이것을 논리적으로 하나의 작업으로 취급합니다.

그 다음에는 수행하려는 작업을 처리해줄 수 있는 미디어 프로세서 개체를 가져와야 합니다. 프로세서는 Azure Media Service가 제공하는 범위 안에서만 사용이 가능함에 유의합니다. LINQ 식을 사용하여 미디어 프로세서 개체를 확인하고 그 중 필요한 것을 택합니다. 여기서는 단순 인코딩 처리를 위하여 Windows Azure Media Encoder를 선택합니다.

그 다음으로 작업에 태스크를 하나 추가합니다. 태스크를 추가할 때에는 태스크의 이름과 미디어 프로세서 개체, 미디어 프로세서의 동작 특성을 정의하는 인코딩 템플릿 이름 등을 지정합니다. Windows Azure Media Encoder의 경우 인코딩 템플릿 이름에 대한 정보를 Expression Encoder SDK에서 확인할 수 있습니다. 이름들에 대한 목록은 http://msdn.microsoft.com/en-us/library/microsoft.expression.encoder.presets_members.aspx 에서 확인 가능합니다.

만들어진 태스크의 입력과 출력 대상을 정의하는데, 앞서 지정한 asset을 입력에 추가하고, 출력에는 새로운 asset을 생성하도록 예약합니다.

모든 구성이 끝나면 Job 객체의 Submit() 메서드를 호출하여 작업을 의뢰합니다. 이 떄 부터 모니터링 기능을 사용하여 작업의 진행 상황을 실시간으로 질의할 수 있습니다. 각각의 작업이 완료되면 State 속성이 Completed로 나타나므로 이를 통해서 작업 완료 여부를 확인 가능합니다.

실제로 어떻게 결과물이 나타나는가?

스토리지를 실제로 접속해 보면 새로운 컨테이너들이 만들어집니다. 입력용 Asset을 위한 전용 컨테이너가 먼저 만들어지고, 출력용 Asset을 위한 전용 컨테이너가 나중에 만들어지는 순서입니다. 각각의 컨테이너들은 초기에는 비공개 상태로 설정되어있습니다.

입력용 컨테이너로 만들어진 것을 열어보면 요청한 파일어 업로드된 것을 볼 수 있습니다.

출력용 컨테이너에는 기대한대로 인코딩된 파일과 메타 데이터 파일이 들어있습니다. 

출력용 컨테이너 폴더의 퍼미션 설정을 BLOB 공개로 전환하고 CDN을 연결하면 즉시 서비스 가능한 동영상이 제공되는 것입니다.

좀 더 자세한 정보를 보려면?

간단하게 한 페이지 안에 기본적인 코딩 레시피를 모아놓은 페이지가 있으므로 이 이후에 좀 더 구체적인 작업을 하기 원한다면 아래 페이지에서 내용을 확인하기 바랍니다. PlayReady와 같은 DRM 적용도 매우 쉽게 수행할 수 있습니다.

http://go.microsoft.com/fwlink/?LinkId=251359&clcid=0x412

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

PaaS2012. 6. 25. 01:50

Xpress Engine meets Windows Azure Web Site

지난번 시간에는 Windows Azure Web Site를 이용하여 Word Press 블로그를 설치하고 사이트를 시작하는 방법을 살펴보았습니다. 오늘은 좀 더 실질적인 예제를 살펴보려고 하는데요, 바로 Xpress Engine을 Windows Azure Web Site 위에서 실행하는 것입니다.

이미 알려져 있다시피 Windows Azure Web Site를 공유 환경에서 실행하는 경우 최대 10개의 웹 사이트를 무료로 사용하실 수 있고, 이러한 환경에서 Xpress Engine을 설치하고 시작할 수 있다면 커뮤니티를 처음 운영하려는 분들께는 여러모로 큰 도움이 될 것입니다.

이 강좌는 Windows Azure Web Site Preview를 신청하여 계정을 활성화한 분들에 한하여 유효하며, 이후에 정식 출시될 Windows Azure Web Site에서는 더 쉽고 간편하게 이 글의 내용을 따라서 진행할 수 있을 것입니다.

호스팅 환경에 대해서 알아두기

Windows Azure Web Site는 지난번에 간단히 살펴본 대로 기본 실행 환경은 Windows Azure 위에서 실행됩니다. 그리고 데이터베이스로는 SQL Database (예전 이름은 SQL Azure 였습니다.) 또는 Clear DB의 MySQL Database 중 한 가지를 택할 수 있었습니다. 여기서 사용하려고 하는 것은 Clear DB의 무료 데이터베이스 상품이며 동시 연결 개수 4개, 데이터베이스 크기 1GB의 상품을 Windows Azure가 Clear DB와 연계하여 기본적으로 자동으로 신청하고 관리해 줍니다.

달리 표현하면, 반드시 Windows Azure 환경이 아니어도 Clear DB 홈페이지에 직접 가서 같은 상품을 신청하거나 더 나은 상용 버전의 서비스로 따로 신청해도 무방합니다. 그러나 서비스가 분리된 것과는 무관하게 Clear DB에서 여러분에게 제안하는 상품은 Windows Azure 데이터 센터 위에서 실행되는 MySQL 데이터베이스이므로 단순히 Clear DB의 상품을 이용하는 것과는 차이가 있습니다.

Xpress Engine은 Microsoft SQL Server를 지원하므로 데이터베이스 활용에 능숙하다면, Windows Azure Virtual Machine을 이용하여 SQL Server를 내장하는 VM을 추가 신청하여 이 VM에 직접 연결하도록 설치를 구성해도 됩니다. 하지만 비용에 있어서 최상의 이점을 누릴 수 있도록 하기 위하여 Clear DB의 MySQL 상품을 활용하는 방법으로 이번 강좌를 풀어나가려 합니다.

준비 작업 – 새 웹 사이트 신청하기

웹 사이트를 하나 만들도록 합니다. 새 웹 사이트 만들기로 이동합니다.

데이터베이스와 함께 새로운 웹 사이트를 만들기 위하여 두 번째 항목을 클릭합니다.

웹 사이트 이름을 지정하고, 새 MySQL 데이터베이스를 만들 것을 주문합니다.

데이터베이스의 이름을 확인하고, 사용권 계약에 동의함을 표시한 후 마침 버튼을 클릭합니다.

잠시 기다리면 사이트와 MySQL 데이터베이스가 자동으로 생성됩니다.

드문 경우이지만 만약 위와 같이 데이터베이스 생성이 실패했다는 메시지가 나타나는 경우, 당황하지 말고 Clear DB 홈페이지 (http://www.cleardb.com/)에서 회원 가입을 하고, Windows Azure 무료 데이터베이스 상품 신청 페이지를 아래 그림처럼 찾아서 신청하도록 합니다.

데이터베이스 상품 이름은 Mercury이며, Windows Azure 데이터센터 위에서 실행됨을 알리는 내용을 볼 수 있습니다. 이후 상용 버전으로 업그레이드하는 경우, 여기서 사용하는 데이터베이스에 대한 비용은 Microsoft가 아닌 Clear DB를 통해서 결재하게 됩니다.

데이터베이스를 생성한 후 대시보드 페이지로 이동하면 실행 중인 데이터베이스 이름이 보이는데, 데이터베이스 이름을 클릭합니다.

접속 정보와 아이디, 비밀 번호를 기록합니다. 서버 주소의 경우, 위의 그림을 기준으로 이야기해보면 us-mm-azure-east-01.cloudapp.net이 되며, 데이터베이스 이름은 cdb_8a5322cd38, 그리고 하단의 아이디와 비밀 번호를 확인합니다.

같은 정보가 Windows Azure Web Site 대시보드에서는 Connection String 페이지에 나타나므로 참고하시기 바랍니다.

이제 XE 파일들을 직접 올리기 위하여 FTP 접속 정보를 초기화해야 합니다. Reset Deployment Credential 링크를 오른쪽 편에서 찾아 클릭하면 아래와 같이 설정 화면이 나타납니다.

접속 정보를 재 설정하고 난 다음 FTP 클라이언트로 서버에 접속을 시도합니다. 여기서는 FileZilla 클라이언트를 사용하였지만 여러분이 선호하는 FTP 클라이언트를 직접 사용해도 무방합니다. 단, Windows 탐색기와 통합된 FTP 클라이언트의 경우 특성 상 여러 연결을 만들 수 있고 이 때문에 접속자 수 초과가 일어나 접속이 안될 수 있습니다.

위와 같이 접속 정보를 설정한 다음 연결하면 아래 그림과 같이 디렉터리 목록이 열거됩니다. 기본 페이지 파일을 삭제합니다.

이제 XE 홈페이지에 방문하여 XE Core 또는 여러분이 선호하는 기본 패키지 파일을 내려 받도록 합니다.

파일의 압축을 풀고 난 다음, XE의 루트 디렉터리의 모든 파일들을 아래 그림과 같이 FTP를 통하여 올리도록 합니다. 적지 않은 시간이 걸릴 수 있고, 파일의 수가 많으므로 실패한 내역이 없는지 확인하기 바랍니다.

모든 파일이 업로드 되면 아래 그림과 같습니다.

이제 웹 사이트에 접속을 시도해봅니다. 아래 그림과 같이 잘 나오면 기본적인 PHP 실행 환경에는 이상이 없는 것입니다.

하단의 언어를 한국어로 설정하고, 사용권 계약에 동의한 다음 계속 진행합니다.

다행히 XE에서 요구하는 PHP 요구 사항들을 모두 지원합니다. 계속 진행합니다.

MySQL 데이터베이스를 트랜잭션 없이 사용하기 위하여 기본 옵션을 선택합니다.

Windows Azure – 또는 – Clear DB 홈페이지에서 확인한 접속 정보를 기재합니다.

짧은 주소 사용은 체크하지 않고, 시간대 설정만 지정하여 완료 버튼을 클릭합니다. 짧은 주소 사용의 경우 현재 Rewrite Module을 Windows Azure Web Site 환경 설정 상에서 직접 변경할 만한 방법이 마땅히 없는 상태입니다. (그러나 IIS 자체적으로 Apache HTTP Server의 Rewrite Configuration File을 Import하는 기능이 이미 있습니다.)

관리자 메일 주소, 비밀 번호 등 기본 정보를 입력하고 완료 버튼을 클릭합니다. 이 부분에서 시간이 많이 걸릴 수 있으므로 기다립니다.

XE가 Windows Azure Web Site에서 성공적으로 실행되는 모습입니다. 관리자로 로그인된 상태도 확인이 되는 군요. XE의 관리 패널로 한 번 이동해보겠습니다.

기대했던 대로 XE의 관리 패널도 잘 보입니다.

마무리하기

전반적으로 해외 데이터센터를 통해서 웹 사이트가 구동되는 상황이기 때문에 국내에서는 아직 많이 느립니다. 하지만 정식 출시와 함께 Azure Web Site가 완전한 서비스를 하게 되면 더 빠르고 안정적인 서비스를 지원하게 될 것입니다. 이번 강좌는 Windows Azure Web Site가 국내 CMS 웹 응용프로그램을 얼마나 안정적으로 지원할 수 있는지 측정해보기 위한 데 큰 의미를 두고 있습니다.

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

  1. mysql정보를 어디서 확인하나요?

    2012.07.31 00:03 [ ADDR : EDIT/ DEL : REPLY ]
    • \조인\ Azure Web Site에서 linked resource로 직접 mysql을 만드셨다면 1GB 무료 버전의 mysql db가 연동되어서 만들어지고, 웹 사이트 configuration 섹션에서 connection strings에 mysql 연결 문자열이 나타날 것입니다. 만약 여기서 만들지 않고 cleardb.com에서 직접 만드셨다면 이곳의 정보를 확인하셔야 합니다.

      2012.08.02 09:08 신고 [ ADDR : EDIT/ DEL ]

PaaS2012. 6. 10. 02:09

안녕하세요. Windows Azure MVP 남정현입니다. 최근에 새로 추가된 Windows Azure Web Site 서비스는 이름에서 알 수 있듯이 Windows Azure를 통해서 여러분이 원하는 웹 사이트를 쉽게 구축하고 운영할 수 있도록 도움을 주는 호스팅 서비스입니다. 기존에 사용하였던 호스팅 서비스나 무료 홈페이지 계정과 비슷한 기능들을 제공하지만 더 풍부하고 더 강력한 기능을 지원합니다. 이번 강좌에서는 Windows Azure Web Site를 이용하여 워드프레스 블로그 사이트를 만드는 과정을 살펴볼까 합니다.

NOTE: Windows Azure Web Site는 Windows Azure 계정을 만들고 나서 2012년 6월 현재는 별도의 Preview 프로그램을 신청해서 개설할 수 있습니다. http://www.windowsazure.com/ 웹 사이트에 방문하셔서 계정을 만들 수 있습니다. 이 강좌는 Windows Azure 계정 및 Windows Azure Web Site 프로그램 가입이 완료된 이후를 기준으로 쓰여져 있습니다.

http://windows.azure.com/ 대신 http://manage.windowsazure.com/ 으로 접속해야 Windows Azure Web Site 기능을 관리하실 수 있습니다.

웹 사이트에 접속하면 Microsoft Online ID를 묻는 페이지가 위의 그림과 같이 나타나는데, ID와 비밀 번호를 사용하여 접속합니다.

접속한 후에는 위의 그림과 같이 관리자 페이지의 UI를 볼 수 있는데, 신규 서비스 개설을 위하여 하단의 NEW 메뉴를 클릭합니다.

그러면 화면이 열리면서 신청 가능한 항목들이 나타납니다. 만약 위의 그림과 같이 Web Site 항목이 활성화 되어 있지 않으면 별도로 프로그램을 신청해야 하는 상태이므로 Windows Azure 홈페이지로 이동하여 베타 프로그램을 신청해야 합니다. 이 제한은 2012년 6월 이후로는 적용되지 않을 것입니다.

어떤 방식으로 웹 사이트를 만들 것인지 한 번 더 선택해야 하는데, 갤러리에 올려져 있는 웹 사이트 템플릿을 활용하려고 하는 것이므로 From Gallery 메뉴를 클릭합니다.

그러면 사용 가능한 웹 애플리케이션의 종류들이 보이는데 상당히 종류가 많고 다양합니다. 오늘 살펴보려고 하는 것은 워드프레스 블로그이므로 BLOGS 메뉴를 클릭합니다.

웹 애플리케이션의 설치를 위해서 필요한 마법사 화면이 새로 나타납니다. DNS에 여러분의 웹 사이트에 고유하게 할당하려는 ID를 지정합니다. 이 주소는 나중에 여러분이 가지고 있을 수도 있는 개인 도메인 주소와는 별개로 서버 할당에 필요한 자체 주소이므로 반드시 입력해야 합니다. 그리고 데이터센터의 위치도 적절하게 선택합니다. 필요한 항목을 기재한 다음에는 우측 하단의 화살표 버튼을 클릭하여 다음 단계로 진행합니다.

갤러리에 등록된 워드프레스는 MySQL 데이터베이스를 기반으로 운영됩니다. 기본적으로 Windows Azure는 MySQL을 직접 호스팅하지 않고, SuccessBricks의 ClearDB 서비스와 한방에 통하도록 해줍니다. 그 과정에서 필요한 내용들을 검토하신 후 체크 박스를 클릭하면 완료 버튼이 활성화됩니다.

웹 사이트가 생성 중이라는 메시지가 나타납니다. 약 3~5분 정도면 웹 사이트 배포까지 끝나고 곧바로 사이트가 뜹니다. 아래 그림과 같이 Ready로 나타나면 준비가 된 것입니다.

위와 같이 상태가 나타나면 해당 항목을 클릭합니다.

트래픽 상황과 디스크 사용 공간 등 호스팅에서 필요한 일반적인 모든 정보들이 한 눈에 전광판으로 나타납니다. 페이지를 좀 더 아래쪽으로 스크롤해서 내용을 살펴볼까요?

강조 표시해놓은 항목들이 기존에 여러분이 알고 있었던 호스팅 서비스와 일치하는 항목들입니다. FTP 사용자 ID와 비밀 번호를 필요에 따라 얼마든지 매번 새롭게 재설정할 수 있고, 웹 사이트를 보려면 어디로 가야 하는지, FTP 서버로 접속하려면 어떻게 해야 하는지, 호스팅 상품 외에 연결된 데이터베이스가 무엇인지 모두 알 수 있습니다. 이제 웹 사이트를 한 번 들어가보겠습니다.

당연히 워드프레스 블로그의 첫 설치 화면이 나타납니다. 필요한 항목들을 기입합니다.

Install WordPress 버튼을 클릭합니다.

ID는 최고 관리자 ID인 admin을 입력하고 방금 전에 지정한 비밀 번호를 입력하여 관리자 페이지로 접속합니다.

기대했던 대로 워드프레스 관리자 화면이 나타납니다. 웹 사이트 안을 여기저기 살펴보면 완전하게 워드프레스 블로그가 설치된 것을 알 수 있습니다.

다시 관리자 화면으로 돌아와보면 실시간으로 트래픽 상황이 업데이트된 것을 확인할 수 있습니다. 관리자 화면의 모니터링 도구가 단순히 통계 자료를 보여주는 것에서 그치지는 않는다는 것을 쉽게 알 수 있습니다. 그러면 좀 더 자세한 내용을 살펴보기 위하여 상단의 다른 몇 가지 메뉴들을 살펴보겠습니다.

MONITOR 메뉴를 클릭하면 표 형태로 잘 정리된 각각의 메트릭을 한 눈에 살펴볼 수 있습니다.

그리고 이것이 Windows Azure만의 매력적인 부분이라고 할 수 있는데, 여러분의 인스턴스 유형을 여기서 자유롭게 변경할 수 있습니다. 만약 여러분의 웹 사이트가 일반적인 웹 사이트가 아닌 영화, 음반 등의 홍보 웹 사이트라고 한다면 동시 접속 인원이 매우 빠르고 급격하게 증가할 가능성이 많습니다. 이럴 때 정말 완벽한 서비스를 구현하려면 기존에는 마땅한 대책이 없었습니다. 하지만 Windows Azure는 상당히 다양한 옵션을 제공합니다. 그리고 이 옵션은 모두 완전하게 제 기능을 다 합니다.

기본적으로 여러분이 웹 사이트를 만들면 아래와 같은 상태에서 실행됩니다.

1대 ~ 2대의 가상 서버 인스턴스가 존재하고 그 안에 수 많은 분리된 환경의 웹 사이트들이 있으며 그러한 가상 서버 인스턴스들 중 하나를 택하여 서비스를 운영하는 방식입니다. 대개는 이렇게 운영하더라도 충분히 성능을 낼 수 있습니다. 그러나 방금 이야기한 경우처럼 정말 엄청난 성능이 필요하다면 인스턴스 유형을 Reserved Instance로 바꿀 수 있는데, 아래 그림과 같이 사용할 수 있음을 뜻합니다.

인스턴스 자체를 여러분의 웹 사이트를 위하여 실행되도록 점유할 수 있고, 인스턴스의 크기 또한 서비스 규모에 맞추어 변경할 수 있습니다. 이것이 이전에 여러분이 Windows Azure로 살펴보셨을 수도 있는 Web Role의 더 발전된 형태입니다.

Windows Azure는 이번 업데이트로 완전히 새롭게 달라진 서비스들로 중무장하였습니다. Microsoft가 운영하기 때문에 MySQL이나 리눅스를 지원하지 않는다는 것은 더 이상 통하지 않는 편견이 되었고, 편의성에서도 전혀 손색이 없으며, 기존의 국내외 호스팅 서비스들만큼 – 또는 – 그 이상의 품질을 보여주고 있습니다.

만약 웹 사이트를 좀 더 완벽하게, 그리고 더 풍부하게 운영하기 원한다면 Windows Azure가 제공하는 다른 여러 부가 서비스들과 조합했을 때 더 큰 시너지 효과를 낼 수 있을 것입니다. 그러나 기본적인 Windows Azure Web Site 서비스 하나만으로도 상당한 메리트가 있다고 할 수 있을 것입니다.

다음 번에는 Windows Azure Web Site가 제공하는 FTP를 이용하는 방법과 간단한 PHP 웹 사이트의 설치와 활용 방법을 살펴보도록 하겠습니다.

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

  1. WEB SITES에서 SSL도 사용할 수 있을까요?

    2012.07.11 21:49 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 기본적으로 HTTPS Endpoint도 같이 생성되는 것을 확인하였습니다. 필요한 경우 HTTPS Endpoint로 모든 요청이 연결되도록 변경하거나, 웹 사이트 설정을 바꾸실 수도 있을 것 같습니다.

      2012.07.13 09:03 신고 [ ADDR : EDIT/ DEL ]

기술 소식2012. 6. 7. 09:50

한국 시간으로 내일 새벽 다섯시에 Windows Azure에 대한 새로운 내용들이 새롭게 업데이트되는데, 그 동안 고객들이 Windows Azure에 대해 바라던 거의 모든 것들을 포함하게 되었습니다. 그리고 무엇보다도 반가운 소식은 이제 공식적으로 Windows Azure를 한국에 출시하게 된다는 점인데요, 어떤 소식들이 있는지 하나씩 살펴보도록 하겠습니다.

[중요] Windows Azure 한국 출시

정말 오랫동안 기다리셨습니다. 드디어 Windows Azure를 한국에서 원화 결제와 한국어 기술 지원으로 이용하실 수 있게 됩니다. 이번 Meet Windows Azure 행사에서 공식적인 출시 대상 국가에 대한민국을 포함하여, 러시아, 우크라이나, 남아프리카, 대만, 터키, 이집트가 포함되었습니다. 이전까지는 원화 결제와 국내 기술 지원을 제외한 모든 리소스가 한국어로 제공되었지만 이제 완전하게 국내에서 사용 가능한 서비스로 제공됩니다.

Windows Azure Virtual Machine (Preview)

이번 Windows Azure 업데이트에서 가장 돋보이는 부분 중 하나는 바로 Windows Azure에서 IaaS 기능을 추가하게 된다는 점인데요, 이전에는 PaaS 형태로 제공되는 VM Role이 있었지만 좀 더 성격을 명확하게 만들어서 IaaS 형태로 사용할 수 있도록 서비스를 개편하였습니다. 다시 말해서, 이전에는 Fabric Controller에 의하여 자동으로 재시작되거나 자가 수복되던 VM만 이용할 수 있었지만 이제는 전통적인 호스팅 모델과 마찬가지로 상태가 바뀌지 않는 Persist VM을 사용할 수 있게 됩니다. 이에 따라, 전통적인 SQL Server나 SharePoint Server를 Windows Azure에서 실행할 수 있고, Windows 이외에 Linux 운영 체제들도 지원하게 됩니다.

지원되는 운영 체제는 다음과 같습니다.

  • 윈도 서버 2008 R2
  • 윈도 서버 2008 R2 + SQL 서버 2012 평가판
  • 윈도 서버 2012 RC
  • 오픈 수세 12.1
  • Cent-OS 6.2
  • 우분투 12.04
  • 수세 엔터프라이즈 리눅스 11 SP2

Windows Azure Web Site (Preview)

Windows Azure는 그 동안 웹 사이트를 운영할 수 있는 방안으로 Web Role을 사용하거나 Web Role을 기반으로 하는 Web Accelerator를 주된 방안으로 제공했지만 기술적인 어려움이 매우 많았습니다. 이러한 문제를 한 번에 해결하고 좀 더 전문적인 호스팅 서비스를 구현할 수 있도록 하기 위하여 Windows Azure Web Site (ZDNET 등을 통해서는 Antares라는 코드 네임으로 소개된 적이 있습니다)가 이번에 새로 런칭됩니다.

Windows Azure Web Site는 IIS 7.5를 기반으로 ASP.NET, PHP를 실행할 수 있도록 구성되어있으며, 데이터베이스로는 SQL Azure와 MySQL을 기본적으로 지원합니다. 또한 처음 10개의 웹 사이트를 무료로 운영할 수 있도록 지원합니다. 그리고 웹 갤러리를 같이 제공하여 닷넷누크, 워드프레스, 움브라코 등의 유명한 CMS나 블로깅 서비스를 제공하는데, 향후 여기에 국내 CMS들도 추가될 것을 기대해도 좋을 듯 합니다. 그리고 FTP, Git, 웹 매트릭스, Visual Studio TFS 등을 사용하여 사이트 관리 및 형상 관리를 할 수 있는 방법도 제공합니다.

새로운 Windows Azure 관리 포털

이번 업데이트를 통하여 Windows Azure 관리 포털이 실버라이트가 아닌 HTML5 기반으로 새롭게 단장할 예정입니다. 실버라이트를 지원하지 않는 모바일 운영 체제들에서도 Windows Azure를 관리 할 수 있게 되고, 더 빠르고 쾌적한 인터페이스를 제공하게 될 것입니다.

그 외에도 수 많은 내용들이 업데이트되었습니다!

그 외에 더 자세한 정보들은 Windows Azure FactSheet를 통해서 미리 보실 수 있으며, 상세한 설명은 한국 시간으로 내일 새벽 5시에 중계되는 Meet Windows Azure 행사에서 보실 수 있습니다. :-)

출처: http://blogs.msdn.com/b/windowsazure/archive/2012/06/06/announcing-new-windows-azure-services-to-deliver-hybrid-cloud.aspx

FactSheet 다운로드: http://www.microsoft.com/en-us/news/download/presskits/cloud/docs/MeetWindowsAzureFS.docx

Meet Windows Azure 행사 바로가기: http://www.meetwindowsazure.com/

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

IaaS2012. 5. 15. 14:24

Windows Azure 서비스를 이용할 때에 가장 핵심적인 서비스 제어와 구독 신청, 활성화 등의 기능을 제어할 수 있는 Windows Azure Portal 웹 사이트에 접근할 수 있는 권한은 필수적입니다. 그리고 당연한 이야기이지만 Windows Azure를 이용하여 서비스를 구축할 때에는 한 명 이상의 개발자와 시스템 관리자들이 참가하기 마련인데, 이럴 때 개인의 Windows Live ID 계정을 임의로 공유하거나 하는 일은 매우 위험합니다.

이러한 문제점을 예방하고, 순수하게 서비스 활성화나 추가 신청/관리 등의 작업만을 위하여 공동 관리자를 설정하고 포털을 개방할 수 있는데, http://windows.azure.com/ 에서 아래의 방법에 따라 다른 사용자의 Live ID를 입력하여 공동 관리자로 지정할 수 있습니다.

Windows Azure 포탈에 로그인한 다음, "호스팅된 서비스, 저장소 계정 및 CDN" 메뉴를 클릭합니다. 그 다음, "사용자 관리" 항목을 아래 그림과 같이 선택합니다.

상단 리본 메뉴의 새 공동 관리자 추가 버튼을 클릭하면 아래와 같이 어떤 구독에 대해 공동 관리자를 추가할 것인지 묻는 대화 상자가 나타나며 여기에 Windows Live ID를 입력하고 연결할 구독을 지정한 다음 확인 버튼을 누르면 등록이 완료됩니다.

여기서 입력하는 Windows Live ID 시스템에 등록된 이력이 있는 E-MAIL 주소를 뜻하며, 아직 가입이 안된 사용자인 경우 http://www.live.com/에서 수동으로 ID를 새로 등록하거나 할 수 있고, Custom Domain을 등록해서 이를 Live ID로 쓰게 할 수도 있습니다.

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

PaaS2012. 5. 14. 01:07

Windows Azure VM Role을 이용하여 Base Image를 최초로 만들 때 가장 많이 시행 착오를 겪는 부분 중에 하나는 초기 Base Image의 VHD 파일 크기를 정확히 확인하지 않고 만들게 되는 부분인데, 이렇게 만들고나면 VHD 파일을 축소하는 방향으로는 수정할 수 없어서 작업이 번거로워집니다. 이러한 시행착오를 사전에 예방할 수 있도록 도움을 드리기 위하여, 개인적으로 이러한 Base Image VHD 파일들을 템플릿으로 만들어서 공유합니다.

업로드한 이미지 파일들은 Master Boot Record (MBR) 영역을 차지하도록 만들어진 단일 NTFS Primary Partition을 가지도록 포맷되었으며, 곧바로 설치에 쓰일 수 있도록 구성되어있습니다.

위의 파일들은 모두 RAR 형식으로 최고 압축률을 사용하여 압축하도록 만들어진 파일들로, 압축 해제를 위해서는 WinRAR 또는 최신 버전의 RAR 유틸리티가 필요하며, 압축을 해제하려면 파일을 저장할 파티션의 잔여 공간이 VHD 파일을 포함하여 충분한 공간이 남아있어야 합니다.

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

Windows + .NET2012. 4. 17. 11:55

ASP.NET 환경에서 사용자 멤버십, 프로파일, 역할과 세션 상태 관련 기능은 별도의 공급자 클래스에 의하여 구현되는 경우가 많은데, 이러한 공급자 클래스들은 개발자 스스로 원한다면 별도로 정의하여 각자의 서버 및 네트워크 인프라에 맞추어 다시 작성할 수 있습니다. 하지만 이렇게 작업하기에는 녹록치 않은 면들이 많고, 또 실제로 많은 테스트와 검증 과정이 뒷받침되어야 할 필요가 있습니다.

최근에는 SQL Server Compact Edition이나 SQL Server 2012에서 소개된 SqlExpress 또는 SQL Azure와 같이 전통적인 SQL Server 환경이 아닌 곳을 기반으로 택해야 하는 일도 자주 있습니다. 이러한 경우 많은 시행 착오와 오류를 경험할 수 밖에 없는데, 이러한 문제를 크게 덜어줄 유용한 기술이 하나 있습니다. 바로 ASP.NET Universal Provider이며, 향후 Microsoft가 언급하는 Hybrid Cloud Computing 환경에서의 단일 프로그래밍 모델을 구현하기 위한 초석으로 자리매김할 것으로 예상됩니다. :-)

ASP.NET Universal Provider의 구성

ASP.NET Universal Provider는 다음과 같은 구성을 가지고 있습니다.

  • System.Web.Providers.DefaultMembershipProvider
    (기존의 System.Web.Security.SqlMembershipProvider에 대응)
  • System.Web.Providers.DefaultProfileProvider
    (기존의 System.Web.Profile.SqlProfileProvider에 대응)
  • System.Web.Providers.DefaultRoleProvider
    (기존의 System.Web.Security.SqlRoleProvider에 대응)
  • System.Web.Providers.DefaultSessionStateProvider
    (내장된 세션 상태 관리 공급자를 대체)

ASP.NET Universal Provider를 Visual Studio의 확장 패키지 갤러리 (NuGet 갤러리)를 통하여 설치하게되면 위의 각 공급자에 대한 설정을 현재 ASP.NET 프로젝트 상의 web.config 파일에 지정하게되고, 데이터 소스를 어떻게 선택하는지에 따라서 미리 구성된 데이터 스키마에 맞추어 관련된 서비스 기능을 수행할 수 있도록 맞추게 됩니다.

ASP.NET Universal Provider 설치하기

ASP.NET Universal Provider는 Nuget Package Install Site에서 손쉽게 asp.net 프로젝트에 추가할 수 있습니다. Visual Studio나 Visual Web Developer를 설치한 경우 Nuget Console에서 아래 패키지 이름을 검색하여 기존 프로젝트에 추가하시면 됩니다. 

패키지 설치가 끝나면 web.config 파일에 아래와 같이 Membership, Role, Profile, Session State에 대한 설정을 Universal Provider로 업데이트합니다.

<configuration>
    <connectionStrings>
        <add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\aspnet.mdf;Initial Catalog=aspnet;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient"/>
    </connectionStrings>
    <system.web>
      <profile defaultProvider="DefaultProfileProvider" >
        <providers>
          <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider" connectionStringName="DefaultConnection" applicationName="/"/>
        </providers>
      </profile>
      <membership defaultProvider="DefaultMembershipProvider">
        <providers>
           <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider" connectionStringName="DefaultConnection"
             enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
             maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
             applicationName="/" />
        </providers>
      </membership>
      <roleManager defaultProvider="DefaultRoleProvider">
        <providers>
           <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider" connectionStringName="DefaultConnection" applicationName="/" />
        </providers>
      </roleManager>
      <sessionState mode="Custom" customProvider="DefaultSessionProvider">
        <providers>
          <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider" connectionStringName="DefaultConnection" applicationName="/"/>
        </providers>
      </sessionState>
    </system.web>

위의 설정에서 DefaultConnection에 적절한 연결 문자열과 함께 정확한 providerName을 기재하면 Universal Provider가 정확한 ADO.NET Connection Driver를 사용하여 필요한 서비스들을 제공하게 됩니다. 이렇게 만듦으로서 SQL Azure는 물론 기존 SQL Server, SQL Server CE를 데이터 원본으로 선택할 수도 있습니다.

좀 더 자세한 정보 알아보기

패키지의 최신 업데이트 정보와 설치 방법은 아래 웹 사이트에서 확인할 것을 권합니다.

http://nuget.org/packages/System.Web.Providers/1.0.1

구체적인 사용 방법과 시나리오에 대해서는 Scott Hanselman의 블로그 아티클을 참고하시기 바랍니다.

http://www.hanselman.com/blog/IntroducingSystemWebProvidersASPNETUniversalProvidersForSessionMembershipRolesAndUserProfileOnSQLCompactAndSQLAzure.aspx

 

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요