Azure 클라우드 환경 소프트웨어 아키텍처(Azure)

 마이크로소프트 Azure 클라우드 환경에서 시스템 구축을 위해서는 먼저 Azure 서비스 유형 중 어떤 유형을 기반으로 할 것인가를 정할 필요가 있다. Azure는 IaaS 유형 서비스와 PaaS 유형 서비스를 모두 제공하고 있으며, Azure는 PaaS에 강점이 있는Cloud Service Provider로 알려져 있다.

또한 Azure 에서 대부분의 시스템에 적합한 유형으로 PaaS 서비스인 앱 서비스(App Service)를 추천하고는 있으나 구축하고자 하는 시스템 특성이나 요건에 따라 적합한 유형이 달라질 수 있음을 감안하여 Azure 서비스 유형 중 선택하도록 한다.

1.  Azure 서비스 유형


마이크로소프트 Azure 서비스에 대한 인포그래픽을 보면 Azure 서비스를 크게 3가지 유형으로 분류하고 있다.

  • Virtual Machines : OS의 완벽한 제어와 더불어 사용자 지정된 Windows 및 Linux VM
  • Cloud Services : 운영 체제의 향상된 제어를 통한 고가용성의 확장 가능한 N 계층 클라우드 앱
  • App Service : 모든 장치에 대한 확장 가능한 웹앱, 모바일 앱, API 앱 및 논리 앱

 

참조 페이지 : Microsoft Azure 개요 :

https://azure.microsoft.com/ko-kr/resources/infographics/azure/

 

위 3가지 유형 외에 마이크로서비스에 적합한 “Service Fabric” 유형도 있으며 그 특징은 아래와 같다.

  •   Service Fabric은 새 앱을 만들거나 마이크로 서비스 아키텍처를 사용하도록 기존 앱을 다시 작성하는 경우에 적합하다.
  •   컴퓨터의 공유 풀에서 실행하는 앱은 작게 시작하고 필요에 따라 수백 또는 수천 대의 컴퓨터로 대규모로 확장할 수 있다.
  •   상태 저장 서비스를 통해 일관되고 안정적으로 앱 상태를 손쉽게 저장하고 Service Fabric은 서비스 분할, 크기 조정 및 가용성을 자동으로 관리한다.
  •   Service Fabric은 OWIN(Open Web Interface for .NET) 및 ASP.NET Core를 사용하여 WebAPI를 지원한다. App Service에 비해 Service Fabric은 기본 인프라에 대한 더 많은 제어 기능 또는 직접 액세스를 지원한다. 서버로 원격으로 연결하거나 서버 시작 작업을 구성할 수 있다.
  •   Cloud Services는 제어 수준과 사용 편이성에서 Service Fabric과 비슷하지만 이제는 레거시 서비스이므로 Service Fabric을 새로운 개발에 사용하는 것이 좋다.

 

아래 표 1는 세가지 유형에 대한 설명과 서비스별로 적합한 유형을 표시한 것이다.

유형

내용

적합한 유형

Virtual   Machines

  • Window/Linux VM을 생성하여 자유롭게 어플리케이션을 구축할 수 있는 유형

IaaS   - Lift & Shift 유형에 적합

Cloud   Services

  • Window VM 환경만 가능
  • .NET, Node.js, PHP, Python으로 서비스앱 만들기가 가능하며 Java는 안되는 것으로   보임(Azure 홈페이지)

PaaS   - .NET 환경 개발 시 검토

App   Services

  • Window/Linux VM 가능
  • .NET,   Node.js, PHP, Java, Python 지원

PaaS   - 대부분의   사례에 적합한 유형

표 1. Azure 서비스 유형


아래 그림 1은 Azure 서비스 3가지 유형에 대한 구성도이다.


그림 1. Azure 서비스 3가지 유형 구성도


위 세 유형에 대한 비교는 아래 자료를 참고한다.

 

Azure App Service, 가상 컴퓨터, Service Fabric 및 Cloud Services 비교 :

https://docs.microsoft.com/ko-kr/azure/app-service-web/choose-web-site-cloud-service-vm

2.  Virtual Machines 아키텍처


2.1.  구성도

Virtual Machines 유형의 경우 OS, 미들웨어 등을 자유롭게 설치해서 사용하는 유형이라 다양한 아키텍처 구성이 가능하나, 아래는 N계층 어플리케이션을 위한 Linux Virtual Machines 참조 아키텍처이다.

 

https://docs.microsoft.com/ko-kr/azure/architecture/reference-architectures/virtual-machines-linux/n-tier

그림 2. N계층 어플리케이션용 리눅스 Virtual Machines 참조 아키텍처


2.2.  구성 특징

아키텍처

구성 요소

구성 내용

비고

서브넷

계층별로 별개의 서브넷을 생성한다. CIDR 표기법을 사용하여 주소 범위와 서브넷 마스크를 지정한다.

-        

가용성 집합

계층별로 가용성 집합을 만들고 계층당 최소 2개의 VM을 프로비전한다. 이를 통해 해당 VM들은 더 높은 서비스 수준 계약(SLA) 요건을 충족한다.

-        

웹티어 서브넷

프리젠테이션 로직을 처리하는 역할 수행

-        

비즈니스 티어 서브넷

비즈니스 로직을 처리하는 역할 수행

-        

데이터 티어 서브넷

예를 들어 아파치 카산드라와 같은 NOSQL DB 등을 활용하여 고가용성을 제공할 수 있음

-        

로드 밸런서

인터넷 연결 부하 분산 장치를 통해 들어오는 인터넷 트래픽을 웹 계층에 분산시키고 내부 부하 분산 장치를 통해 웹 계층의 네트워크 트래픽을 비즈니스 계층에 분산시킴

-        

관리 서브넷

Nagios, Zabbix 또는 Icinga와 같은 모니터링 소프트웨어를 사용하여 응답 시간, VM 가동 시간, 전반적인 시스템 상태에 대한 정보를 파악한다. 모니터링 소프트웨어는 별도의 관리 서브넷에 위치한 VM 상에 설치한다.

-        

표 2. Virtual Machines 구성 내용

3.  Cloud Services 아키텍처


3.1.  구성도

클라우드 서비스는 Azure에서 제공하는 PaaS(Platform-as-a-Service) 서비스이며 구성도는 그림 3와 같다.  

그림 3. Cloud Services 구성도

3.2.  구성 특징

클라우드 서비스는 앱 서비스와 마찬가지로 VM에서 호스트되지만 앱서비스보다 VM에 대한 제어가 가능하여 클라우드 서비스 VM에 원하는 소프트웨어를 설치하여 원격으로 실행할 수 있다. 예를 들면 앱 서비스의 경우 WAS를 Tomcat과 Jetty 중에 선택해야 하나 클라우드서비스는 원하는 WAS를 선택할 수 있다.

그런데 더 제어할수 있는 부분이 많을 수록 사용 편의성은 낮아지므로 추가 제어 옵션이 필요한 경우가 아니면 일반적으로는 클라우드 서비스에 비해 앱 서비스의 웹앱에서 웹 응용 프로그램을 작동하고 실행하는 것이 더 빠르고 간편하다.

 

아키텍처

구성 요소

구성 내용

비고

Web roles

  • IIS를 통해 앱을 자동으로 배포하고 호스팅함
  • 복잡한 응용 프로그램의 경우 사용자 요청을 받아 Worker roles에 전달하여 처리함
  • 온라인 서비스 성격
  • 서비스 버스나 Azure 큐로 Worker roels에 전달

Worker roles

  • IIS를 사용하지 않고 앱을 독립 실행형으로 실행함
  • 배치 서비스 성격

VM 생성 방법

  • 웹 역할 인스턴스 개수, 작업자 역할 인스턴스 개수 지정하여 생성
  • VM 크기 선택


응용 프로그램

반영

  • 1단계 : 준비 영역에 업로드
  • 2단계 : 준비 영역을 프로덕션으로 변경하여 반영

        

모니터링

  • 오류가 발생한 물리적 서버를 검색하여 해당 서버에서 실행 중이었던 VM을 새 컴퓨터에서 다시 시작
  • VM 파일 시스템 종속성 제거 필요

표 3. Cloud Services 구성 내용


4.  App Services 아키텍처


4.1.  구성도

App Serivces 유형의 경우 .net, Java, PHP 등 다양한 언어로 어플리케이션 작성 가능하나 애저 사이트에 웹앱 참조 아키텍처는 그림 4와 같다.

 

그림 4. Managed 웹 앱- 확장성 개선 참조 아키텍처

4.2.  구성 특징

앱서비스는 애저의 PaaS 서비스이며, 다양한 앱을 서비스할 수 있는 기반이 되며, 앱서비스 생성 시 그림 5와 같이 다양한 앱 유형을 선택하여 해당 유형을 서비스할 수 있는 앱서비스를 만들 수 있다.


그림 5. 앱서비스에서 생성 가능한 다양한 앱


앱서비스의 구성요소는 아래와 같다.

아키텍처

구성 요소

구성 내용

비고

앱 서비스

  • Microsoft Azure의 PaaS( platform-as-a-service ) 제품


  • 워크로드를 전용으로 실행하는 호스팅 리소스를 의미.
  • 예를 들어 "웹앱"의 경우 함께 Azure에서 응용 프로그램 코드를 호스팅하기 위해 제공하는 계산 리소스
  • 웹앱, 모바일앱, API앱, 로직앱 등 존재
  • 언어는 ASP.NET, Node.js, Java, PHP 및 Python 지원

앱 서비스

플랜

  • 앱을 호스트하는 데 사용되는 실제 리소스의 컬렉션
  • 여러 앱을 하나에 앱 서비스 플랜에 호스팅할 수 있음
  • 앱서비스 플랜에서 정의하는 내용

1. 지역(미국 서부, 미국 동부 등)

2. 확장 개수(1, 2, 3개 인스턴스 등)

3. 인스턴스 크기(소, 중, 대)

4. SKU(무료, 공유, 기본, 표준, 프리미엄)

 

리소스 그룹

  • Azure 에서 관리하는 단위로 네트워크, 저장소, 컴퓨팅이라는 세 가지 주요 리소스 공급자가 제공하는 리소스의 집합


표 4. App Services 구성 내용

4.3.  App Services 생성

새로만들기, 웹 + 모바일, 웹앱을 순서대로 클릭한 후 앱 이름을 입력하고 만들기를 클릭하면 웹앱 서비스가 생성된다. 

그림 6. 앱 서비스를 생성하는 화면


응용 프로그램 설정화면에서 Java 버전을 선택하여 Java 어플리케이션이 동작하도록 설정한다. 

그림 7. 앱 서비스를 Java 어플리케이션으로 설정하는 화면


배포 자격 증명 화면에서 FTP 배포를 위한 접속 계정 및 패스워드 입력한다. 

그림 8. 앱서비스 배포 위한 FTP 계정 설정 화면


배포할 프로젝트의 WAR파일을 생성한다. 

그림 9. 이클립스에서 WAR파일 생성하는 화면


개요화면에서 FTP 접속 정보를 확인한다.

그림 10. 앱 서비스 FTP 접속 정보 확인 화면


Filezilla 등 FTP 툴 이용하여 URL에 접속 후 /site/wwwroot/webapps 위치에war 파일을 업로드한다.

그림 11. FTP을 이용하여 앱서비스에 배포하는 화면

URL 접속 확인

-      http://jpetstore2.azurewebsites.net/petstore 에 처음 접속시 WAR 파일을 자동으로 배포하게되는데 약 30초 가량 소요되고 30초 후 URL을 다시 접속하면 아래와 같이 화면이 보여진다.

그림 12. 배포된 앱서비스 접속 화면


새로만들기 > Database > MySQL용 Azure 데이터베이스 클릭 후 서버 이름, 계정, 패스워드를입력하여 MySQL 서비스를 생성한다.

그림 13. MySQL 서버 생성 화면


연결 보안 화면에서 Local IP, Azure Was 서버 등 IP를 방화벽 규칙에 추가하여야 접속이 가능하다.

그림 14. MySQL서버 방화벽 규칙 추가 화면


MySQL DB 접속방법  

1)    Azure의 CLI Tool 이용하여 접속한다.

: mysql -u petstore@petstore -h petstore.mysql.database.azure.com -P 3306 –p

그림 15. MySQL 서버 CLI 접속 화면

2)    MySQL WorkBench 이용하여 접속한다. 

그림 16. MySQL Workbench를 이용하여 Azure MySQL 서버에 접속하는 화면

5. App Services 에 Java 어플리케이션 디플로이


Java 어플리케이션을 생성하여 앱 서비스에 디플로이 하는 방법은 아래 자료를 참고한다.

https://docs.microsoft.com/en-us/azure/app-service-web/app-service-web-get-started-java

 AWS POC에 사용한 JPetstore를 위 자료에 나와있는 것처럼 이클립스 Azure 플러그인을 사용해서 디플로이 한다.

그림 17. JPetStore 이클립스 디플로이 화면

 

디플로이 후 결과 화면은 아래와 같다.

그림 18. JPetstore Azure 앱서비스에 디플로이 결과


위 화면은 PC 환경에서 PC에 설치된 mysql DB에 접속하여 실행되는 어플리케이션을 그대로 디플로이한 화면이며, 위에 보이는 메인 화면은 DB 조회 없이 보여지는 화면이라 에러 없이 정상표시 되었다.

위 화면에서 “Fish”나 “Dogs”와 같이 DB에서 데이터를 읽어서 보여주는 메뉴를 클릭한 경우 Azure에 데이터베이스에 연결이 되지 않아 오류가 발생하며, DB 연결 부분을 Azure 환경에 맞게 변경하고 디플로이하면 된다.

 

앱서비스에서 DB 연결을 위해서는 아래와 같이 앱서비스 생성시 “웹앱+SQL” 유형으로 생성하고 데이터베이스를 생성하면 된다.

그림 19. 웹앱+SQL 생성


생성된 데이터베이스는 대시보드에서 아래와 같이 조회할 수 있다. 해당 데이터베이스 연결을 위해서는 “데이터베이스 연결 문자열 표시”를 누르면 나오는 정보를 활용하여 연결한다.

그림 20. 생성된 데이터베이스 상세 조회(대시보드)


대시보드에서 앱서비스를 중지하고 서비스 페이지 주소로 접근하면 아래와 같이 표시된다.

그림 21. 앱서비스 중지 시 응답



댓글

이 블로그의 인기 게시물

파일처리(한번에 모두읽기, 라인단위로 읽기, 쓰기, 리스트처리, 특정길이만큼 읽기)

AWS 가용성,확장성

Serverless computing 도입시 고려사항