먼저 클라우드에 온프레미스 구성을 다시 만들어야한다.
이 기본 구성은 네트워크가 어떻게 구성되고, Azure에서 어떻게 네트워크 트래픽이 들어오고 나가는지 알려준다.
느슨하게 결합된 아키텍처 (Loosely Coupled Architecture)
복잡한 시스템을 빌드할 경우 솔루션에서 해당 서비스나 구성요소를 느슨하게 결합하는 것이 가장 좋다. 느슨하게 결합된 아키텍처란, 솔루션의 개별 구성 요소에 다른 구성요소에 대한 정의에 대한 정보가 거의 없는 것을 말한다. 서로 다른 시스템 사이에서 나머지 부분이 생성되거나 처리하는 방식을 알 필요가 없는 것을 말한다.
N계층 아키텍처 사용
느슨하게 결합된 시스템을 구축하는데 사용할 수 있는 아키텍처 패턴은 n계층 아키텍처다.
n계층 아키텍처는 어플리케이션을 2개 이상의 논리 계층으로 나눈다. 아키텍처 측면에서 상위 계층은 하위 계층에서 서비스에 엑세스할 수 있지만, 하위 계츠에서 상위 계층에 엑세스해서는 안된다.
계층은 문제를 구분하는데 도움이 되며, 재사용이 가능하도록 이상적으로 설계되었다. 계층화된 아키텍처를 사용하면 유지관리도 간소화된다. 계층을 개별적으로 업데이트하거나 바꿀 수 있으며, 필요할 경우 새로운 계층을 삽입할 수도 있다.
예를들어 3계층이라고 하면 3개의 계층이 있는 어플리케이션을 말한다. 전자상거래 웹어플리케이션을 예로 들자면
- 웹계층 : 브라우저를 통해 사용자에게 웹 인터페이스 제공
- 어플리케이션 계층 : 비즈니스 논리 실행
- 데이터 계층 : 제품 정보 및 고객 주문을 저장하는 데이터베이스 및 기타 스토리지가 포함
아래는 가상 머신에서 전자상거래 사이트를 실행하는 경우를 가정해본 것이다. 가상머신이 3개가 있다.
Azure 지역이란?
특정 지리적 위치 내에 있는 하나 이상의 Azure 데이터 센터를 말한다. 미국 동부, 미국 서부, 북유럽이 그 예이다.
가상 네트워크 연결
가상 네트워크란 Azure에서 논리적으로 격리된 네트워크다. Azure 리소스에서 상호간 통신, 인터넷 통신 및 온프레미스 네트워크 통신을 안전하게 수행할 수 있게 한다. 가상 네트워크는 단일 지역으로 범위가 제한되지만 가상 네트워크 파이링을 사용하여 여러 지역의 여러 가상 네트워크를 연결할 수 있다.
가상 네트워크는 하나 이상의 서브넷으로 분할할 수 있는데, 서브넷을 통해 개별 섹션의 리소스를 구성하고 보호할 수 있다. 위의 사진을 보면 웹, 어플리케이션 및 데이터 계층에는 각각 단일의 VM이 있다. 3개의 모든 VM은 동일한 가상 네트워크의 별도 서브넷에 위치한다.
사용자는 웹계층과 직접 상호작용하므로 VM에는 프라이빗 IP주소와 함께 퍼블릭 IP 주소가 있다. 사용자는 각각의 VM에 프라이빗 IP 주소를 포함하도록 어플리케이션 또는 데이터 계층과 상호작용하지 않는다.
또한 서비스 또는 데이터 계층을 온프레미스 네트워크에 유지하여 웹계층을 글라우드에 배치하는 동시에 어플리케이션의 다른 측면을 엄격하게 제어할 수 있다. VPN 게이트웨이(또는 가상 네트워크 게이트웨이)를 사용하면 이 시나리오를 구현할 수 있다. 인터넷을 통해 Azure Virtual Network와 온프레미스 위치간의 안전한 연결을 제공할 수 있다.
네트워크 보안 그룹이란?
네트워크 보안그룹, 즉 NSG(Network Security Group)는 Azure 리소스에 대한 인바운드 네트워크 트래픽을 허용하거나 거부한다. 네트워크 보안 그룹은 네트워크의 클라우드 수준 방화벽으로 간주할 수 있다.
예를 들어 웹계층의 VM은 포트 22(SSH) 및 80(HTTP)의 인바운드 트래픽을 허용한다. 이 VM의 네트워크 보안그룹은 이 포트를 통해 들어오는 모든 소스의 인바운드 트래픽을 허용한다. 신뢰할 수 있는 IP 주소 등으로 알려진 소스에서 들어오는 트래픽만 허용하도록 네트워크 보안 그룹을 구성할 수 있다.
Azure Load Balancer를 통한 확장
웹사이트를 배포한다고 하자. 매주 유지관리를 수행해야할 때는 어떻게 할까? 유지관리 기간에는 서비스를 사용할 수 없다. 아니면 너무 많은 사용자가 동시에 연결한다면?
가용성 및 고가용성이란?
가용성은 서비스가 중단 없이 가동되어 실행되는 기간을 나타낸다. 고가용성 또는 가용성이 높다는 것은 오랜 기간동안 가동되어 실행되는 서비스를 나타낸다.
복원력이란?
복원력은 비정상적인 상태에서도 작동을 유지하는 시스템의 기능을 나타낸다.
자연재해, 악의적인 사용자로부터의 위협, 트래픽 급증 등의 잇가 발생할 때 처리 시스템의 허용 가능 범위를 초과하면서 느려지거나 중지될 때가 있다.
부하 분산 장치
부하분산장치는 트래픽을 Pool의 각 시스템 간에 균등하게 분할시킨다. 부하 분산 장치는 고가용성 및 복원력을 모두 달성하는 데 도움을 줄 수 있다.
각 계층에 동일하게 구성된 추가 VM을 추가하여 시작한다고 가정해보자. 한 시스템이 가동 중지되거나 너무 많은 사용자에게 서비스를 동시에 제공하는 경우에 대비하여 추가 시스템을 준비하는 것이 좋다.
여기서 문제는 각 VM에 자체 IP 주소가 있다는 것인데, 또한 한 시스템이 가동 중지되거나 사용량이 많은 경우에는 트래픽을 분산시킬 방법이 없다. 사용자에게 하나의 시스템으로 표시되도록 VM을 연결할 때 부하분산장치를 사용하여 트래픽을 분산시켜야한다.
부하분산장치는 사용자의 요청을 수신하고 웹 계층의 VM 중 하나에 해당 요청을 보낸다. VM을 사용할 수 없거나 응답을 중지하면 부하 분산 장치에서 트래픽을 보내지 안흔ㄴ다. 그런 다음, 부하 분산 장치는 트래픽을 응답성이 뛰어난 서버 중 하나로 보낸다.
부하분산을 통해 서비스를 중단하지 않고 유지관리 작업을 실행할 수 있다. 예를들어, 각 VM에 대한 유지관리 기간을 조정할 수 있다. 유지관리 기간에 부하분산장치는 VM에서 응답하지 않음을 검색하고 풀의 다른 VM으로 트래픽을 보낸다.
Azure Load Balancer란?
Azure Load Balancer는 사용자를 위한 유지관리를 담당하기 위해 제공하는 부하분산장치 서비스다. 인바운드 및 아웃바운드 시나리오를 제공하고, 짧은 대기시간과 높은처리량, 그리고 모든 TCP 및 UDP 어플리케이션에 대해 수백만개의 흐름으로 확장된다. 들어오는 인터넷 트래픽, Azure 서비스 간 내부 트래픽, 특정 트래픽의 포트 전달 또는 가상네트워크 내 VM의 아웃바운드 연결에 부하분산장치를 사용할 수 있다.
가상 머신에서 일반적인 부하분산 장치 소프트웨어를 수동으로 구성하는 경우 축로 시스템을 유지, 관리해야 하는 단점이 있다. 부하 분산 장치가 가동 중지되거나 일상적인 유지관리가 필요한 경우 원래 문제로 되돌아간다. Azure Load Balancer에서는 그런 걱정을 할 필요가 없는데, 유지관리할 인프라 또는 소프트웨어가 없어 그냥 대상 IP/포트 세트에 해당하는 원본 IP 및 포트에 따라 전달 규칙을 정의하면 된다.
Azure Application Gateway
모든 트래픽이 HTTP인 경우 Azure Application Gateway 를 사용하는 것이 더 나은 옵션이다. Application Gateway는 웹 어플리케이션 용으로 설계된 부하분산장치로, 전송 수준(TCP)에서 Azure Load Balancer를 사용하고, 정교한 URL 기반 라우팅 규칙을 적용하여 여러 고급 시나이로를 지원한다.
이러한 유형의 라우팅은 HTTP 메세지의 구조를 이해한다고 해서 어플리케이션레이어(OSI 레이어 7) 부하분산 이라고 한다. 장점은 아래와 같다.
- 쿠키 선호도. 동일한 백 엔드 서버에서 사용자 세션을 유지하려는 경우에 유용합니다.
- SSL 종료. Application Gateway는 사용자의 SSL 인증서를 관리하고 암호화되지 않은 트래픽을 백 엔드 서버로 전달하여 암호화/암호 해독 오버헤드를 방지할 수 있습니다. 또한 필요한 애플리케이션에 완벽한 엔드투엔드 암호화를 지원합니다.
- 웹 애플리케이션 방화벽. 애플리케이션 게이트웨이는 네트워크 인프라에 대한 악의적인 공격을 검색하는 세부적인 모니터링 및 로깅을 제공하는 정교한 방화벽(WAF)을 지원합니다.
- URL 규칙 기반 경로. Application Gateway를 사용하면 URL 패턴, 대상 IP 주소 및 포트에 해당하는 원본 IP 주소 및 포트에 따라 트래픽을 라우팅할 수 있습니다. 이는 _콘텐츠 전송 네트워크_를 설정하는 경우에 유용합니다.
- HTTP 헤더 다시 쓰기. 각 요청의 인바운드 및 아웃바운드 HTTP 헤더에서 정보를 추가하거나 제거하여 중요한 보안 시나리오를 구현하거나 서버 이름과 같은 민감한 정보를 스크럽할 수 있습니다.
콘텐츠 전송 네트워크란?
CDN(콘텐츠 전송 네트워크)은 사용자에게 웹 콘텐츠를 효율적으로 제공할 수 있는 서버의 분산 네트워크다. 대기시간을 최소화하기 위해 로컬 지역의 사용자에게 콘텐츠를 배달하는 방법이다. CDN은 Azure 또는 다른 위치에서 호스팅할 수 있다. 전 세계에서 전략적으로 배치된 물리적 노드에 콘텐츠를 캐시하고 최종 사용자에게 더 나은 성능을 제공할 수 있다. 일반적으로 사용 시나리오로는 멀티미디어 콘텐츠가 포함된 웹어플리케이션, 특정 지역의 제품 런칭 이벤츠 또는 특정 지역에 높은 대역폭 요구 사항이 예상되는 모든 이벤트가 포함된다.
DNS
DNS(Domain Name System)는 사용자에게 친숙한 이름(www~로 시작하는 주소)을 해당 IP 주소에 매핑하는 방법이다. DNS는 인터넷의 전화번호부라고 생각할 수 있다.
Azure Traffic Manager를 사용해 대기 시간 단축하기
네트워크 대기 시간이란?
대기시간은 데이터가 네트워크를 통해 이동하는 데 걸리는 시간을 나타낸다. 일반적으로 밀리초 단위로 측정된다.
대기시간은 대역폭과 비교되는데, 대역폭은 연결에 적합할 수 있는 데이터의 양을 나타낸다. 대기시간은 해당 데이터가 대상에 도달하는 데 걸리는 시간을 나타낸다. 사용하는 연결 형식 및 어플리케이션 디자인 방법과 같은 요인이 대기시간에 영향을 줄 수 있다.
대기시간에 영향을 줄 수 있는 여러 요인 중 가장 큰 것은 아무래도 ‘거리’가 되는데, 예를들어 미국 동부 지역에 있는 Azure 리전을 이용할 경우 같은 미국 대륙으로 전송하는 속도가 런던으로 전송하는 속도보다 훨씬 빠를 것이다.
그렇다면 지리적으로 멀리 떨어져 있는 사용자가 대기시간을 줄이려면 어떻게 해야할까?
Traffic Manager를 사용해 사용자를 가장 가까운 엔드포인트로 라우팅
대기시간을 줄이는 방법은 둘 이상의 지역에서 정확한 ‘복사본’을 제공하는것이 될 수 있겠다. 그래서 여러 지역에 같은 내용의 데이터가 입력되어있으면 요청이 들어왔을 때 가장 가까운 지역에서 데이터를 꺼내쓸 수 있도록 하는 것!
이때 필요한 것이 Azure Traffic Manager인데, 사용자에게 가장 가까운 DNS 서버를 사용하여 사용자 트래픽을 전역적으로 분산된 엔드포인트로 보낸다.
Traffic Manager는 클라이언트와 서버간에 전달되는 트래픽을 확인하지 않는다. 대신 클라이언트 웹 브라우저를 기본 설정 엔드포인트로 보낸다. Traffic Manager는 다양한 방법으로 트래픽을 라우팅하는데, 예를 들면 가장 대기시간이 짧은 엔드포인트로 라우팅한다.
Load Balancer와 Traffic Manager 비교
[##_Image | kage@blKB9E/btqEsWxT68i/Sn5AaWZ7kMQSvTFcwnu9w0/img.png | alignCenter | data-origin-width=”0” data-origin-height=”0” data-ke-mobilestyle=”widthContent” | _##] |
Azure Load Balancer는 동일한 지역 내의 트래픽을 분산시켜 서비스의 가용성과 복원력을 향상한다. Traffic Manager는 DNS 수준에서 작동하며 클라이언트를 기본 설정 엔드포인트로 보낸다. (이 엔드포인트는 사용자에게 가장 가까운 지역)
Load Balancer와 Traffic Manager는 모두 서비스의 복원력을 향상시키지만 그 방법은 다르다. Load Balancer는 응답하지 않는 VM을 감지하면 트래픽을 풀의 다른 VM으로 보낸다. Traffic Manager는 엔드포인트의 상태를 모니터링한다. Traffic Manager는 응답하지 않는 엔드포인트를 감지하면 트래픽을 응답하는 가장 가까운 다음 엔드포인트로 보낸다.