Windows Azure관련 자주 묻는 질문 답변

마이크로소프트의 클라우드 플랫폼인Windows Azure 관련으로 자주 묻는 질문들을 문답 형식으로 정리한 내용을 포스팅 합니다. 추가로 궁금하신 내용이 있으시다면 블로그의 댓 글로 문의 주시면 감사하겠습니다.

1. Windows Azure 에 웹 애플리케이션을 업로드 하는 것과 기존 방식대로 서버에 올리는 것과의 차이점은 무엇인가요? 그리고 Role 이라고 하는 것이 있다고 하던데 무엇인지요?

- Windows Azure 필요에 따라서 쉽게 확장 또는 축소 할 수 있도록 하는 구조로 구성되어 있습니다. 따라서 Windows Azure에서 구동할 수 있는 형태로 Role 이라는 이름으로 패키징을 해서 업로드를 하게 되며, 해당 Role이 설정한 개수만큼 Instance 화 되어서 동작을 하게 됩니다.

- 이 같은 Role 패키징의 방식은 현재 3가지가 있으며 각각을 Web Role, Worker Role, VM Role이라고 합니다. Web Role은 IIS 웹 서버의 기능을 포함하고 있으므로 IIS 위에서 구동되는 웹 애플리케이션을 작성 하는데 사용하실 수 있습니다. Worker Role은 IIS 가 아닌 서비스 형태로 돌아가는 스케쥴러 같은 시스템 프로그램을 업로드 하는데 사용할 수 있습니다. 끝으로 VM Role은 Web Role이나 Worker Role로 패키징 하기 어려운 복잡한 구성의 서버 환경 등을 Windows Server 용 VHD 이미지 형태로 올려서 서비스를 할 수 있습니다.

- 그리고 데이터의 경우는 이 같은 패키징과 별개로 Windows Azure Storage에 올리게 되며, 이렇게 하는 이유는 Storage 를 사용하는 트래픽에 대한 처리를 보다 원활하게 하기 위함 입니다. 이미지나 동영상과 같은 파일 서버를 따로 두는 것과 같은 개념이라고 보시면 됩니다.

- Windows Azure Compute( 영문)
https://www.microsoft.com/windowsazure/compute/default.aspx

2. Windows Azure를 이용하면 기존에 사용하는 것에 비해서 가격이 저렴하다고 하던데, 사용한 만큼 비용을 지불하는 것이면 요금이 과도하게 나올 수도 있는 것 아닌가요?

- Windows Azure에 업로드 시에 사용하는 Role 의 Instance 들은 Windows Azure 에서 관리하는 Windows Server 2008 가상 머신에 업로드 되어 동작을 하게 됩니다. 따라서 Role의 Instance가 하나 생성 되면 Windows Azure 상에서 서버를 한대 사용하는 것과 동일합니다. 여기서 주의 할 점은 Role 을 업로드 해서 Instance 들을 활성화 한 이후에는 이를 작동시키지 않았다고 하더라도, 과금이 되게 됩니다. 서버를 빌리고 이를 사용하지 않았더라도 비용을 지불하는 것과 같으며, 이런 일이 생기지 않도록 하려면 사용하지 않을 경우에는 반드시 Windows Azure 상에서 업로드 된 Role 을 삭제 해야 합니다.

- 사용할 수 있는 Role의 형태는 X-Small, Small, Medium, Large, X-Large 가 있으면 각각 CPU, RAM, HDD 사양이 달라서, Role을 업로드 할 때 필요에 맞게 선택할 수 있으며, 사양이 높을수록 비용도 물론 비싸지게 됩니다. 그리고 데이터 Storage 의 경우도 사용량과 트랜잭션 횟수 및 네트워크 트래픽 양에 따라서 추가적인 비용이 발생하게 됩니다.

- 이외에도 글로벌 서비스를 위해서 CDN을 사용할 경우에는 이에 대한 추가적인 과금이 나오게 되며, 서비스의 필요에 따라 Windows Azure AppFabric에서 Service Bus나 Access Control을 사용한다면 이 또한 추가 과금이 됩니다. 설명하다 보니 복잡하고, 비싸다고 생각하실 수도 있는데요, 현재 실제로 운영 중인 서비스가 있다면 그 서비스가 운영되는 서버 사양과 데이터 저장소 크기 그리고 네트워크 트래픽에 대한 정보가 있다면 Windows Azure로 옮겼을 때 얼마 정도의 비용이 나오는 지를 예측해 볼 수 있습니다.

- 사용 방식은 사용한 만큼 지불하는 Consumption 과 일정 사용량을 약정해서 그 범위까지 저렴하게 이용하는 Commitment 가 있습니다. Consumption 방식으로 X-Small 형태의 Role의 Instance 1개를 한달 내내 (31일 x 24시간 = 744시간) 사용한다면 (X-Small의 시간당 비용이 $0.05 이므로 744 x 0.05 = $37.2 이므로 한화로 1200을 곱하면) 44,640원 정도가 기본 비용으로 나오고, 여기에 데이터 관련한 비용이 추가 되게 됩니다. Commitment 방식을 이용하면 기본 데이터 사용량이 과금에 포함되게 되므로 더 저렴할 수도 있습니다.

- 끝으로 요금이 과도하게 나올까 봐 걱정하신다고 말씀 하신 것은 데이터 저장소에 있는 데이터에 대한 트래픽이 폭증 했을 경우로 볼 수 있는데요, Windows Azure Storage에서 1GB의 데이터가 외부로 나갔을 때(Out-bound) 아시아 지역에서는 $0.20이 과금 되므로, 매일 10G가 외부로 나간다고 가정했을 때, 한 달이면 (31일 x $0.2 x 10G =$62 정도가 들게 되며) 한화로는 74,400원 정도가 됩니다. 내부로 들어오는 데이터가 있다면(In-bound) 이것도 추가해야 합니다.

- Windows Azure Offer Comparison Table( 영문)
https://www.microsoft.com/windowsazure/offers/popup/popup.aspx?lang=en&locale=en-US&offer=COMPARE_PUBLIC

3. Windows Azure에 올린 서비스가 정상적으로 동작하는 것인지를 확인할 수 있는 방법은 어떤 것이 있나요? 운영 중인 서비스를 확장 할지 축소 할지를 결정하려면 이에 대한 모니터링이 필요할 것 같은데요.

- Windows Azure 에서는 Fabric Controller 라는 서비스가 사용자들이 올린 Role들의 Instance가 정상 동작하는지를 자동적으로 모니터링을 하며, 정상 동작하지 않을 경우에는 해당 Instance를 중지시키고, 새로운 Instance를 생성하게 됩니다. 하지만 정상 작동 여부와 다르게 사용자 수요가 늘어나서 서비스 반응 속도가 느려지거나 하는 것은 Windows Azure Management API를 이용해서 체크를 해주거나, 특정 Instance로 원격접속을 해서 상황을 파악 할 수 있습니다.

- Windows Azure Management API를 이용하면 초당 요청 숫자, Queue 에 쌓인 메시지 개수, CPU 점유율, 응답 시간 등을 이용해서 해당 Role의 Instance 개수를 늘이거나 줄일 수 있습니다. 이를 기반으로 서비스를 자동으로 확장 할 수 있는 애플리케이션을 만들 수도 있으며, 현재 이와 같은 일을 하는 3rd Party 애플리케이션이나 참고할 수 있는 샘플코드도 나와 있습니다.

- 저장소 트래픽이 폭증하는 경우는 기본적으로 Windows Azure에서 자동화 해서 처리해 주는 것처럼, Role의 Instance 처리도 자동화 해주지 않는 이유는 비용이 증가하기 때문 입니다. 저장소의 트래픽 폭증에 대한 자동화를 대처 하기 위해서는 일정량을 사용 했을 경우에 알림을 보내거나 접속을 제한 하는 등의 처리가 필요 합니다.

- Windows Azure Monitoring, Logging, and Management APIs
https://www.microsoftpdc.com/2009/SVC15

4. Windows Azure 는 무 중단 서비스가 가능하다고 들었는데, 이것이 어떻게 가능하게 되는 것인지요? 장애가 생기거나 서비스 업데이트를 할 경우에도 적용이 되나요?

- Windows Azure에서 장애나 업데이트 시에도 99% 이상의 무 중단 서비스를 위해서는 같은 Role의 Instance를 최소 2개 이상 작동 시켜야 합니다. 각각의 Instance는 물리적으로 다른 공간에 배포가 되게 되고, 둘 중 한 개의 Instance가 물리적인 원인으로 장애가 생겼을 때에도 다른 Instance가 처리를 하고, 또 다른 공간에 새롭게 Instance를 생성해서 정상 서비스를 할 수 있게 합니다. Windows Azure 사이트의 Dash Board를 참고하면 전 세계에 있는 데이터센터의 상태들을 보실 수 있습니다.

- 업데이트 시에는 경우는 작동하는 서비스의 모델이 변경 되지 않는다면 In-place Upgrade 기능을 이용합니다. 이를 통해 서비스되고 있는 2개 이상의 Instance 들이 순차적으로 업데이트 되게 됩니다. 만약, 서비스 모델이 달라지는 업데이트의 경우에는 서비스 별로 제공되는 Staging 공간에 Role의 Instance를 생성하고 Production 공간에 작동하고 있는 Instance 와 각각의 Virtual IP 를 교체하는 방식으로 서비스를 이어지게 할 수 있습니다.

- Windows Azure: Service Dashboard
https://go.microsoft.com/?linkid=9690845

- Windows Azure: Upgrading a Service
https://msdn.microsoft.com/en-us/library/ee517254.aspx

5. Windows Azure를 이용하면 인터넷 스케일로 글로벌 서비스를 할 수 있다고 들었는데요, 이것이 어떻게 가능한지요?

- Windows Azure에 Role이나 저장소를 만들 때에는 각각을 어느 지역에서 서비스 할 것인지를 선택할 수 있습니다. 현재 미국 2개, 유럽 2개, 아시아 2개 총 6 지역의 데이터센터 중에 한 곳을 선택해서 Role을 올리고 서비스를 할 수 있습니다. 한국에서 서비스를 한다면 아시아에 있는 홍콩이나 싱가폴 중에 한 곳을 이용하는 것이 응답 속도 면에서 유리합니다.

- 하지만, 어떤 서비스가 미국과 유럽 그리고 아시아 모두에 서비스를 해야 한다면, 원활한 서비스를 위해서는 해당 지역 별로 배포를 하는 것이 필요합니다. 이것이 동작하게 하려면 서비스 내부에서 IP 의 구분 등을 통해서 특정한 지역에서 요청을 했을 경우에는 근 거리의 데이터 센터에서 서비스를 받도록 해야 합니다.

- 영상이나 이미지 같은 정적인 데이터를 글로벌로 서비스 한다고 가정하면, Windows Azure CDN 서비스를 고려해볼 수 있습니다. 이는 6개의 데이터 센터에 추가적으로 한국을 포함한 전 세계에 22지역에 있는 물리적인 CDN Node를 활용해서 Windows Azure Storage에 있는 Blob 데이터를 Caching해서 서비스 할 수 있으므로, 해당 지역에 배포하는 Role과는 달리 한 곳의 저장소를 사용하고 CDN 을 이용하는 것도 고려해 볼 수 있습니다. 물론 CDN은 사용량에 따라서 추가적인 비용이 발생 합니다.

- Geo Location Enables Developers To Choose Data Centers and Group Applications & Storage
https://blogs.msdn.com/b/windowsazure/archive/2009/03/18/geo-location-enables-developers-to-choose-data-centers-and-group-applications-storage.aspx

- Windows Azure CDN
https://www.microsoft.com/windowsazure/cdn/default.aspx

6. Windows Azure로 전세계 6개 지역을 중에 선택을 해서 배포를 하고 서비스를 하는 것은 이해했는데요, 여러 지역에 SQL Azure 데이터베이스를 이용하는 경우에는 각각의 데이터 베이스가 항상 최신의 데이터를 같게 가질 수 있게 동기화 할 수 있나요?

- SQL Azure 에는 SQL Azure Data Sync라는 서비스가 있으며 이를 이용하면 각기 다른 데이터센터에 있는 SQL Azure 사이의 동기화가 가능 합니다. 동기화 방식은 서비스의 특성에 따라서, 일정한 시간 간격에 동기화 해주도록 하게 됩니다. 이 서비스는 같은 데이터 센터에서도 서비스 확장을 목적으로 복제한 데이터 베이스끼리 동기화 하는 것에도 이용 할 수 있으며, 향후에는 On-premise 에서 구동되는 SQL Azure와 Windows Azure Platform 상의 SQL Azure 사이의 동기화도 가능하게 지원될 예정입니다.

- SQL Azure Data Sync
https://www.microsoft.com/en-us/SQLAzure/datasync.aspx

7. Windows Azure의 저장소에 보면 Blob, Queue, Table 이 있다고 보았는데, 여기에 있는 Table 저장소와 SQL Azure에 있는 Table의 차이점은 무엇인가요?

- Windows Azure 저장소(Storage) 중에 Table은 각각의 Table 별로 하나의 Row(Entity)에 복수의 Column(Properties) 을 사용할 수 있는 단순한 구조의 Table 저장소 입니다. 이와 반면 SQL Azure는 On-premise에서 사용하던 관계 형 데이터 베이스를 거의 그대로 클라우드에서 사용할 수 있게 만들어진 저장소 입니다. 따라서 기존에 SQL Server 같은 관계 형 데이터베이스를 사용했던 환경을 Windows Azure로 Migration 하는 경우라면 SQL Azure가 적절한 선택이 될 수 있습니다.

- SQL Azure의 경우는 클라우드의 장점인 확장 성 및 관리 편의성을 가질 수 있지만, 현재 최대 용량이 50G까지 지원이 되므로 이 보다 규모가 큰 데이터베이스의 경우라면 분할 해서 저장하는 작업을 해야 할 수 있습니다. 만약에 복잡하지 않은 형태의 데이터베이스라면 Windows Azure 저장소의 Table로 변환하면 이 같은 용량 제한을 해결할 수 있으며, 비용 또한 SQL Azure에 비해서 더 저렴하게 사용 할 수 있습니다.

- Windows Azure Table Storage
https://blogs.msdn.com/b/jnak/archive/2010/01/06/walkthrough-windows-azure-table-storage-nov-2009-and-later.aspx