2017.01.31 22:30 Azure

Azure에서 홈페이지를 운영하면서 이미지를 서비스 하는 여러 가지 방법중에 오늘은 Storage CDN, 그리고 CDN의 사용자 지정 도메인에 대한 내용을 말해볼까 합니다. 내용이 길어지면 두번 정도로 나누겠습니다.

 

홈페이지에는 거의 대부분 이미지 파일을 사용합니다. 특히 우리나라의 경우 네트워크 속도가 빠르다보니 심하다 싶을 정도로 많이 사용합니다.

 

보통의 경우

 

이미지를 홈페이지에 넣는 가장 일반적인 방법은 웹서버에 특정 폴더를 만들고 그안에 이미지 파일을 넣어서 호출 하는 방법입니다.

 

이미지 관련 html 소스는 일반적으로 이렇게 작성됩니다.
(
프로그램을 이용하면 조금 더 복잡해 지지만 여기에서는 기본적인 내용을 보여드리겠습니다.)

 

<img src="/images/icerainbow01.png">

 

웹서버의 디폴트 폴더안에 images 폴더 안에 icerainbow01.png 파일을 브라우저에 보이게 하는 소스 입니다.

 

이 경우 어떤 문제가 발생 할까요? 행복한 고민이지만 홈페이지에 접속하는 사용자 수가 많을 경우 사용중인 네트워크 대역폭 중에 이미지 파일이 상당 부분 차치하게 되고 그러면 아시는 것처럼 오류가 발생한 것과 같은 화면을 사용자에게 보여 주거나 큐에 쌓인 순서에 따라 기다려야 합니다. 그러면 사용자는 기다리지 않고 백버튼을 누를겁니다.

 

이를 해결하려면 홈페이지를 운영하는 입장에서는 비용을 추가해서 대역폭을 늘리면 됩니다.

 

대역폭을 늘려서 접속 하는 사용자 수가 증가하게 되면 Disk i/o 가 올라가거나 CPU, 메모리 사용이 늘면서 전체적인 성능이 떨어 지게 됩니다. 해결 하려면 또 다시 비용이 들어가겠지만 Disk SSD로 바꾸거나 로드 밸런싱을 하면 됩니다. 그러면 사용자가 늘고 다시 네트워크에 부하가...

 

관리자라면 이 상황일 경우 어디부터 손을댈까요?

 

저라면 우선 네트워크 대역폭을 줄이기 위한 방법을 찾을겁니다.

다른 몇가지 방법중에 소스 최적화, 어플리케이션 캐시 등등등의 방법이 있지만 그중에 이미지 파일을 다른 장소에 넣어 두는 방법을 찾아보기로 합니다.

 

이렇게하면 사용자가 홈페이지에 접속 했을때 웹서버에서는 소스만 불러오게 되고 이미지는 다른 장소에서 불러오게 되므로 결국 웹서버의 네트워크 대역폭중에 이미지가 차지하는 만큼의 여유가 생기게 됩니다.

 

그 대표적인 방법이 Azure storage를 사용하는 방법 입니다.

기본적으로 Azure에 웹서버가 있다고 가정하고 진행 하겠습니다.

 

아래 이미지와 같이 "icerainbowimage" 저장소 계정을 만들었습니다.

 



"image"
라는 컨테이너 (PC에서 말하는 폴더라고 생각하면 이해하기 쉽습니다.)를 만듭니다.



이렇게 컨테이너가 만들어졌으니


컨테이너 안에 이미지 파일을 업로드 합니다
.

 

파일을 업로드 하는 방법이 여러가지가 있는데 개인적으로 제일 쉬운 방법은 "Microsoft Azure Storage Explorer"를 사용하는 방법이라고 생각 합니다.

 

Microsoft Azure Storage Explorer 다운로드

http://storageexplorer.com/

https://azurestorageexplorer.codeplex.com/

 

Microsoft Azure Storage Explorer 사용방법

https://docs.microsoft.com/ko-kr/azure/vs-azure-tools-storage-manage-with-storage-explorer

 

업로드한 파일의 정보는 아래 이미지와 같이 나오고

 

이 파일의 URL https://icerainbowimage.blob.core.windows.net/image/icerainbow1.png 가 됩니다.

 

브라우저에서 보이게 html 소스를 수정하면

 

<img src="https://icerainbowimage.blob.core.windows.net/image/icerainbow1.png">

 

이렇게 됩니다. 

이렇게하면 웹서버의 대역폭에서 이미지가 차지하는 부분 만큼의 여유가 생기게 됩니다. 한페이지의 크기가 3MB이고 이미지가 2MB라면 숫자상으로 두배넘는 사용자가 접속해도 버틸 수 있게 됩니다. 이를 응용하여 CSS, JS, HTML 파일, 웹폰트 등도 스토리지에 넣어두면 웹서버의 네트워크 대역폭에 많은 여유가 생기게 되겠죠. (물론 이를 위해서는 약간의 기술적인 조치가 필요 합니다.)

 

그런데 이 경우에도 약간의 문제가 있습니다. 스토리지가 있는 위치(이 내용에는 일본서부) 근접 지역의 사용자는 큰 문제가 없지만 멀리 떨어진 나라에서는 여전히 이미지를 불러 오는데 시간이 걸리게 됩니다. 운영하는 홈페이지 서버가  특정 지역의 사용자 접속이 압도적으로 많고 그 부근의 Azure IDC에서 운영중이라면 문제는 없지만 그렇지 않을 경우에는 사용자가 조금 더 빨리 이미지 파일을 가져갈 수 있도록 CDN 서비스를 이용하는 것이 좋습니다.

 

위키 백과 CDN 설명

https://ko.wikipedia.org/wiki/%EC%BD%98%ED%85%90%EC%B8%A0_%EC%A0%84%EC%86%A1_%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC

 

Azure CDN 개요

https://docs.microsoft.com/ko-kr/azure/cdn/cdn-overview

 

쓰다 보니 글이 조금 길어졌네요.

Azure에서 CDN을 사용에 대한 글은 다음 포스팅에.









저작자 표시 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 얼음무지개

댓글을 달아 주세요

2017.01.23 23:00 Azure

첫번째 시나리오의 마지막 글입니다.

 

첫번째, 두번째 글에서 다룬 내용은 다음과 같습니다.

구포탈(홍콩)에서 두가지 방법으로 VM을 캡처했고 각각의 VHD 파일을 신포탈(서일본)로 복사 했습니다(내용은 한줄인데 과정은 길었네요.)

 

이제 서일본으로 복사해온 VHD파일을 이용하여 VM을 만들어 보겠습니다.

 

앞에서 설명한 것과 같이 신포탈에서는 가지고 있는 VHD 파일을 VM으로 만드는 UI가 없습니다.

그래서 많은 분들이 좋아하시는 파워쉘을 이용해서 VM을 만들어야 합니다. (신난다~)

파워쉘을 이용하여 VM을 만드는 일은 ';ㅁㄹㄴㅇㅎㄱ덯ㅁㅇ넘ㅇㄴㄹ;널ㄴㅇ

장점이 더 많습니다만 그 장점에 대해서는 나중에 다른 포스팅을 통해서 보기로 하구요.

 

이번 포스팅에서는 복사해온 VHD 파일로 VM을 만드는 방법에 대해서만 알아 보려고 했으나...

VM 만들기 전에 해야할 몇가지가 작업이 있어서 간단히 설명 드리겠습니다.

여기서 설명하는 "몇가지 작업"은 나중에 별도 포스팅에서 다루기로 약속은 해봅니다.

 

우선 신포탈에서는 VM을 만들기전에 기본적으로 해야할 몇가지 작업이 있습니다.

 

1. 지역(location) 선택

2. 리소스 그룹(Resource Group) 생성

3. 저장소 계정(storageAccName) 생성

4. 가상 네트워크(vnetName) 생성

5. 가상네트워크 서브넷(frontendSubnetName) 생성

6. 가용성 집합(avsetName) 생성

 

등등 입니다.

 

이중에는 VM을 신규로 만들면서 설정할 수 있는 것도 있지만 이 글에서는 파워쉘로 만들 예정이므로 미리 만들어둔 값을 사용하겠습니다.

 

다음과 같이 미리 만들어둔 값을 사용하도록 하겠습니다.

(저는 귀찮아서 2,3,4,6 의 이름을 똑같이 사용했는데 이렇게 하면 나중에 헷갈립니다. 이름 뒤에 구분값을 써 놓는 것이 좋습니다.

예를 들면 저장소 계정일 경우에는 newicerainbowstorage, 가상 네트워크는 newicerainbowNet. 이런 식으로...)

 

1. 지역 : 서일본(japanwest)

2. Resource Group : new-icerainbow

3. storageAccName : newicerainbow

4. vnetName : newicerainbow

5. frontendSubnetName : default

6. avsetName : newicerainbow

 

이제 파워쉘 스크립트를 작성해 보겠습니다.

 

1. 로그인 합니다.


   


2. 스크립트를 하나하나 알아보겠습니다.


# Resource Group 사용할 리소스 그룹 이름

$rgName = "new-icerainbow"

 

# 지역 (Japan West) 어느 지역에 만들것인지.

$location = "japanwest"

 

# 저장소 계정 이름

$storageAccName = "newicerainbow"

$storageAcc = Get-AzureRmStorageAccount -ResourceGroupName $rgName -AccountName $storageAccName

 

# 가상네트워크 이름

$vnetName = "newicerainbow"

$vnet = Get-AzureRmVirtualNetwork -ResourceGroupName $rgName -Name $vnetName

 

# 가상네트워크 서브넷 이름

$frontendSubnetName = "default"

$frontendSubnetConfig = Get-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name $frontendSubnetName

 

# 가용성 집합 이름

$avsetName = "newicerainbow"

$avset = Get-AzureRmAvailabilitySet -ResourceGroupName $rgName -Name $avsetName

 

이와 같이 " " 안에 만들어둔 값(이름)을 넣어서 파워쉘 스크립트를 복사 붙이기 합니다. (다 외우시는 분은 직접 타이핑 해도 됩니다.)

 


그리고 엔터.

 

잘못 입력한 부분이 없으면 에러 없이 프롬프트가 떨어집니다.

 


만약
잘못 입력 했다면...

아래 그림처럼 시뻘건 오류 메세지를 만나게 됩니다.

 

3. 여기까지 했으면 다음 단계로 진행 합니다. 이전과 마찬가지로 몇가지 설정할 것들이 있는데 역시 다음 기회에 설명 하기로 하겠습니다.

PIP, Nic 설정하는 파워쉘 스크립트 입니다.

 

먼저 PIP Nic를 만듭니다.

 

#$pipName = "Newicerainbow01PIP"

#$pip = New-AzureRmPublicIpAddress -Name $pipName -ResourceGroupName $rgName -Location $location -AllocationMethod Dynamic

 

# NIC 생성

$nicName = "Newicerainbow01Nic"

$nic = New-AzureRmNetworkInterface -Name $nicName -ResourceGroupName $rgName -Location $location -SubnetId $frontendSubnetConfig.Id

 

파워쉘 스크립트의 " " 부분을 수정해서 복사 붙이기 하고 엔터

 

정상적으로 입력이 되었으면 프롬프트가 반환됩니다. 주황색 경고는 무시 합니다.

 

4. ...여기까지 잘 진행 되었으면 osDisk를 선택하고 VM의 크기와 이름 등등등을 설정 합니다. 여기에서 osDisk는 구포탈(홍콩)에서 복사해온 VHD를 말합니다.

 

$osDiskName = "Newicerainbow01_os_Disk"

$osDiskCaching = "ReadWrite"

$osDiskVhdUri = "https://newicerainbow.blob.core.windows.net/backup/old-01-20160906-163223-os-2016-09-06-2880F66.vhd"

 

$vmSize = "Standard_A1"

$vmName = "Newicerainbow01"

 


스크립트도 " " 부분을 수정하고 복사 붙이기를 하고 엔터. 


5. 이제 마지막 단계 입니다. VM을 생성 하는 단계 입니다.

 

$vmConfig = New-AzureRmVMConfig -VMName $vmName -VMSize $vmSize -AvailabilitySetId $avset.Id

$vmConfig  = Set-AzureRmVMOSDisk -VM $vmConfig -VhdUri $osDiskVhdUri -name $osDiskName -CreateOption attach -Windows -Caching $osDiskCaching

$vmConfig  = Add-AzureRmVMNetworkInterface -VM $vmConfig -Id $nic.Id

 

New-AzureRmVM -ResourceGroupName $rgName -Location $location -VM $vmConfig

 


수정하는
부분 없이 이 스크립트를 복사 붙여넣기 하고 엔터.

VM 생성 하기 때문에 시간이 소요됩니다. 잠시 기다리면

 

정상으로 VM이 만들어진 리턴 코드가 나오고 포탈에 보면 해당 VM이 만들어진 것을 볼 수 있습니다.

 

만세!!!

 

이렇게해서 구포탈에서 만들어 운영하던 다른 지역의 VHD를 복사해와서 신포탈에 VM을 만들어 봤습니다.

 

그런데...

 

이전 포스팅에서 sysprep한 후 복사해온 VHD 파일은 뭐냐고 물으신다면 그건…
하하하... 까맣게 잊어버렸군요.

언젠간 포스팅할 날이 오겠죠.

 

간단하게만 말씀 드리면 sysprep Microsoft의 운영 체제를 배포하기 위한 준비 유틸리티를 말합니다. VM을 단순 복사할 경우 컴퓨터 이름이나 SID등이 겹치는 일이 발생 하고 서버마다 로그인 정책이 다를 경우 아이디/비번도 다르게 설정해줘야 하는데 이런 값들을 배포 하면서 설정할 수 있도록 도와주는 유틸리티 입니다. sysprep를 거친 VHD를 이미지로 등록하여 반복적으로 VM을 만들때 유용한 방법이기도 합니다.

 

이정도까지만 말씀 드리고 일단 여기서 마무리 하도록 하겠습니다.

 










저작자 표시 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 얼음무지개

댓글을 달아 주세요


블로그 이미지
얼음무지개
free counters

글 보관함


티스토리 툴바