Azure를 사용하여 솔루션 설계
애플리케이션 아키텍처를 만들려면 기능 및 비기능적 요구 사항의 범위를 이해하고 해당 요구 사항을 해결할 수 있는 도구, 기술, 서비스와 해당 요구 사항을 연결해야 합니다.
버스 타기 시나리오에는 몇 가지 주요 요구 사항이 있습니다.
- 실시간 버스 위치를 모니터링하기 위한 웹 사이트
- 버스가 가까이 온 경우 알림
- 자동화된 배포 및 스케일링
이 시나리오에 대해 자세히 살펴보고 다양한 Azure 서비스를 사용하여 솔루션을 설계하는 방법을 살펴보겠습니다.
실시간 버스 데이터 검색
많은 도시에서 를 통해 대중 교통 데이터를 제공합니다. GTFS는 GTFS 실시간 참조 v2(GTFS-RT)라는 실시간 피드도 지원합니다. 피드는 다음 샘플(King County Metro(King County 지하철) 피드)과 같은 JSON 문서로 구성됩니다.
{
"id": "1618418866_4318",
"vehicle": {
"trip": {
"trip_id": "49195161",
"direction_id": 0,
"route_id": "100001",
"start_date": "20210414",
"schedule_relationship": "SCHEDULED"
},
"vehicle": {
"id": "4318",
"label": "4318"
},
"position": {
"latitude": 47.64524,
"longitude": -122.370171
},
"current_stop_sequence": 228,
"stop_id": "2010",
"current_status": "IN_TRANSIT_TO",
"timestamp": 1618418841
}
},
이러한 피드가 제공된다는 사실을 알고 있으면 그 다음에는 버스가 충분히 가까이 왔을 때 알림을 받는 방법을 파악해야 합니다. 그러면 제 시간에 버스를 타기 위해 버스 정류장으로 이동해야 시간을 알 수 있습니다. 그렇게 하기 위해 의도한 역 몇 정거장 전에 지오펜스를 만들 수 있습니다. 이렇게 하면 버스가 지오펜스에 들어오거나 나갈 때 알림을 받을 수 있습니다. 이런 상황에서 알림을 받을 수 있으면 지도에서 버스 위치를 계속 확인할 필요가 없습니다. 알림을 받으면 출발해야 하는 시간임을 알 수 있습니다.
Azure 서비스를 사용하여 솔루션 설계
다음은 시나리오와 이상적인 솔루션에 따라 가능한 아키텍처입니다.
아키텍처는 여러 가지 다양한 서비스를 사용하여 작성해야 하는 코드의 양을 최소화하고 Azure에서 제공하는 스케일링 성능 및 인프라 혜택을 최대한 활용합니다.
Well-Known Text는 지도에서 벡터 기하학적 위치를 나타내는 일반 텍스트 생성 언어입니다. WKT는 공간 데이터를 텍스트 형식으로 나타내는 데 사용되는 OGC(Open Geospatial Consortium) 표준입니다. 대부분의 OGC 규격 시스템은 Well-Known Text를 지원합니다.
여기서는 선택한 솔루션 구성 요소와 그것을 선택한 이유에 대해 간략하게 살펴봅니다. 그런 다음, 이 모듈에서는 데이터베이스 서비스에 집중합니다.
Azure SQL Database를 사용하여 데이터 저장 및 처리
Azure SQL Database는 이 시나리오에 매우 적합합니다. 그 이유를 살펴보겠습니다.
Azure SQL Database는 데이터베이스와 주고받는 데이터를 조작하는 데 필요한 코드의 양을 줄일 수 있는 네이티브 JSON을 지원합니다. JSON의 유연한 특성 덕분에 솔루션을 보다 민첩하게 만들고 쉽게 개선할 수도 있습니다. 또한 데이터 배열을 Azure SQL로 효율적으로 전달하고, 왕복을 최적화하고, 대기 시간을 줄일 수 있습니다.
Azure SQL은 지리 공간 기능도 완전하게 지원합니다. 지리 공간적 데이터 조작은 그리 쉬운 작업이 아니므로 이 기능은 매우 유용합니다. 데이터베이스 내에서 모든 기능을 갖춘 지리 공간 엔진을 사용하면 외부 라이브러리와 통합의 복잡성을 피할 수 있습니다. 예를 들어 버스가 정의된 지오펜스 내에 있는지 파악하기 위해 데이터를 이동할 필요가 없습니다. Azure SQL은 Open Geospatial Consortium 표준을 준수하므로 Azure SQL에 저장된 데이터를 OpenLayers와 같은 시각화 라이브러리와 쉽게 통합할 수 있습니다.
앞에서 언급한 기능은 관계형 모델의 견고한 기반에 빌드되며 최신 애플리케이션의 요구 사항을 충족하도록 몇 년에 걸친 개선 과정을 통해 발전되었습니다. Azure SQL Database는 하이퍼스케일 계층으로 최대 100TB까지 스케일링할 수 있습니다. 즉, 스토리지 집약적 애플리케이션(예: 대용량 데이터베이스)에 사용할 수 있습니다. Azure SQL Database는 자동 스케일링, 일시 중지 및 다시 시작을 지원하는 서버리스 계층을 사용하는 경우에도 비용 효율적입니다. 또한 Azure SQL은 매우 빠른 분석 쿼리에 대한 columnstore 인덱스, 복합 개체 관계 관리를 간소화하는 그래프 모델, 지속적으로 개선되고 있는 최신 쿼리 최적화 프로그램을 지원하며 오늘날의 다중 접속 온라인 게임에 필요한 워크로드처럼 가장 까다로운 워크로드도 처리할 수 있습니다.
Azure SQL을 사용하면 GTFS 표준에서 제공하는 경로 정보처럼 Azure Blob Storage 계정에 저장할 수 있는 정적 데이터에 쉽게 액세스할 수도 있습니다. Azure SQL의 OPENROWSET
함수를 사용하여 다른 서비스 없이 텍스트 파일에서 데이터를 가져올 수 있습니다. 이렇게 하면 솔루션 복잡성을 최소화할 수 있습니다.
이러한 이유로 Azure SQL Database는 버스 타기 앱처럼 JSON 및 지리 공간적 데이터를 처리하면서 엔진에 기본 제공되는 데이터 액세스 및 프로시저 기능도 활용하고자 하는 애플리케이션에 매우 적합합니다. Azure SQL Database 서버리스는 자동 스케일링 요구 사항을 충족하는 데 적합한 옵션으로, 하루 중 버스를 타려는 사람이 더 많은 바쁜 시간대를 애플리케이션에서 처리하도록 할 수 있습니다. Azure SQL Database는 Azure DevOps 및 GitHub Actions와 같이 배포 자동화를 간소화하는 CI/CD(연속 통합 및 지속적인 업데이트/지속적인 배포) 기술도 지원합니다.
Azure Functions를 사용하여 API 서비스 빌드
GTFS 피드에 액세스하여 사용하고, 버스가 지오펜스에 진입한 경우 사용자에게 알리고, 웹 애플리케이션에 데이터를 제공하는 데 API가 필요합니다. 단순함 및 서버리스 아키텍처로 인해 적합한 서비스로 Azure Functions를 선택했습니다. Azure Functions는 해당 서버리스 특성이 필요한 항목으로 자동 스케일링되는 뛰어난 서비스로, 거의 모든 인프라 측면이 Azure Functions에 그대로 유지됩니다. Azure Functions는 다양한 언어를 지원하므로 순수한 마이크로 서비스 접근 방식을 따르는 원하는 언어 또는 진행 중인 작업에 가장 적합한 언어를 선택할 수 있습니다.
Azure Logic Apps를 사용하여 알림 보내기
버스가 지오펜스 내에 진입하여 버스 정류장으로 이동을 시작해야 한다는 알림을 받으려면 Azure에서 Azure Logic Apps 옵션을 사용하면 됩니다. Azure Logic Apps에는 수많은 커넥터가 있어 다른 서비스와 통합할 수 있습니다. 예를 들어, Azure Logic Apps를 사용하여 SMS 메시지를 보내거나 Outlook 또는 Gmail 계정에서 메일을 보낼 수 있습니다. Azure Logic Apps에서 가장 뛰어난 점은 로우 코드 플랫폼/코드 없는 플랫폼이라는 점입니다. 따라서 버스 타기를 위한 알림 서비스 설정이 간단하며 몇 번의 마우스 동작만으로 할 수 있습니다.
Azure Static Web Apps를 사용하여 웹 애플리케이션 호스트
지오펜스 및 버스 위치를 지도에 나타내는 지리 공간적 데이터를 시각화하려면 잘 알려진 jQuery 및 OpenLayers 라이브러리를 사용하여 정적 HTML 페이지를 만들 수 있습니다. 정적 페이지는 또 다른 Azure 함수에서 제공하는 서버 쪽 REST API에서 데이터를 가져와야 합니다. 시각화 페이지를 작동하려면 클라이언트 파트와 백 엔드 파트가 모두 필요하므로 Azure Static Web Apps를 활용할 수 있습니다. Azure Static Web Apps는 Azure Web Apps 및 Azure Functions의 기능을 결합할 뿐만 아니라 GitHub Actions 기본 제공 기능과 통합되므로 솔루션을 쉽게 개발하고 배포할 수 있습니다.
GitHub Actions를 사용하여 배포 자동화
지금까지 살펴본 대로 전체 솔루션은 실시간 피드에서 데이터를 풀(pull)하는 백 엔드 서비스, 데이터를 저장, 처리, 제공하는 데이터베이스, 정적 HTML 파일 및 REST API 엔드포인트로 구성되는 프런트 엔드 시각화 솔루션 등 여러 가지 이동 파트로 구성됩니다. GitHub Actions를 통해 CI/CD 파이프라인을 사용하면 변경 내용을 커밋할 때마다 GitHub 및 Visual Studio Code를 통해 모든 부분의 배포를 자동화합니다. 데이터베이스 변경 내용(있는 경우)은 Azure Functions 및 Azure Static Web Apps 변경 내용과 함께 완전히 자동화되고 오케스트레이션된 방식으로 배포됩니다.