이 문서에서는 Azure App Service의 Mobile Apps 기능에서 Node.js 백 엔드로 작업하는 방법을 보여 주는 자세한 정보 및 예제를 제공합니다.
소개
Mobile Apps는 웹 애플리케이션에 모바일 최적화 데이터 액세스 Web API를 추가하는 기능을 제공합니다. Mobile Apps SDK는 ASP.NET 및 Node.js 웹 애플리케이션에 대해 제공됩니다. SDK는 다음 작업을 제공합니다.
- 데이터 액세스를 위한 테이블 작업(읽기, 삽입, 업데이트, 삭제)
- 사용자 지정 API 작업
두 작업 모두 Azure App Service에서 허용하는 모든 ID 공급자에서 인증을 제공합니다. 이러한 공급자에는 Facebook, Twitter, Google 및 Microsoft와 같은 소셜 ID 공급자와 엔터프라이즈 ID용 Azure Active Directory가 포함됩니다.
GitHub의 샘플 디렉터리에서 각 사용 사례에 대한 샘플을 찾을 수 있습니다.
지원되는 플랫폼
Mobile Apps Node.js SDK는 노드의 현재 LTS 릴리스 이상을 지원합니다. 현재 최신 LTS 버전은 Node v4.5.0입니다. 다른 버전의 노드는 작동하지만 지원되지 않습니다.
Mobile Apps Node.js SDK는 두 개의 데이터베이스 드라이버를 지원합니다.
- node-mssql 드라이버는 Azure SQL Database 및 로컬 SQL Server 인스턴스를 지원합니다.
- sqlite3 드라이버는 단일 인스턴스에서만 SQLite 데이터베이스를 지원합니다.
명령줄을 사용하여 기본 Node.js 백 엔드 만들기
백 엔드를 Node.js 모든 Mobile Apps는 ExpressJS 애플리케이션으로 시작됩니다. ExpressJS는 Node.js사용할 수 있는 가장 인기 있는 웹 서비스 프레임워크입니다. 다음과 같이 기본 Express 애플리케이션을 만들 수 있습니다.
명령 또는 PowerShell 창에서 프로젝트에 대한 디렉터리를 만듭니다.
mkdir basicapp실행
npm init하여 패키지 구조를 초기화합니다.cd basicapp npm init이
npm init명령은 프로젝트를 초기화하기 위한 질문 집합을 묻습니다. 예제 출력을 참조하세요.
expressnpm 리포지토리에서 및azure-mobile-apps라이브러리를 설치합니다.npm install --save express azure-mobile-apps기본 모바일 서버를 구현하는 app.js 파일을 만듭니다.
var express = require('express'), azureMobileApps = require('azure-mobile-apps'); var app = express(), mobile = azureMobileApps(); // Define a TodoItem table. mobile.tables.add('TodoItem'); // Add the Mobile API so it is accessible as a Web API. app.use(mobile); // Start listening on HTTP. app.listen(process.env.PORT || 3000);
이 애플리케이션은 동적 스키마를 사용하여 기본 SQL 데이터 저장소에 대한 인증되지 않은 액세스를 제공하는 단일 엔드포인트(/tables/TodoItem)를 사용하여 모바일 최적화 Web API를 만듭니다. 클라이언트 라이브러리 빠른 시작을 따르는 데 적합합니다.
- Android 클라이언트 빠른 시작
- Apache Cordova 클라이언트 빠른 시작
- iOS 클라이언트 빠른 시작
- Windows 스토어 클라이언트 빠른 시작
- Xamarin.iOS 클라이언트 빠른 시작
- Xamarin.Android 클라이언트 빠른 시작
- Xamarin.Forms 클라이언트 빠른 시작
이 기본 애플리케이션에 대한 코드는 GitHub의 basicapp 샘플에서 찾을 수 있습니다.
Visual Studio 2015를 사용하여 Node.js 백 엔드 만들기
Visual Studio 2015에는 IDE 내에서 Node.js 애플리케이션을 개발하기 위한 확장이 필요합니다. 시작하려면 visual Studio용Node.js Tools 1.1을 설치합니다. 설치를 마치면 Express 4.x 애플리케이션을 만듭니다.
새 프로젝트파일에서>새>프로젝트 대화 상자를 엽니다.
템플릿 JavaScript>Node.js확장합니다>.
기본 Azure Node.js Express 4 애플리케이션을 선택합니다.
프로젝트 이름을 입력합니다. 확인을 선택합니다.
npm 노드를 마우스 오른쪽 단추로 클릭하고 새 npm 패키지 설치를 선택합니다.
첫 번째 Node.js 애플리케이션을 만든 후 npm 카탈로그를 새로 고쳐야 할 수 있습니다. 필요한 경우 새로 고침 을 선택합니다.
검색 상자에 azure-mobile-apps 를 입력합니다. azure-mobile-apps 2.0.0 패키지를 선택한 다음 패키지 설치를 선택합니다.
닫기를 선택합니다.
app.js 파일을 열어 Mobile Apps SDK에 대한 지원을 추가합니다. 라이브러리
require문의 아래쪽에 있는 6줄에서 다음 코드를 추가합니다.var bodyParser = require('body-parser'); var azureMobileApps = require('azure-mobile-apps');다른
app.use문 뒤의 약 27줄에서 다음 코드를 추가합니다.app.use('/users', users); // Mobile Apps initialization var mobile = azureMobileApps(); mobile.tables.add('TodoItem'); app.use(mobile);파일을 저장합니다.
애플리케이션을 로컬로 실행하거나(API가 제공됨) Azure에
https://localhost:3000게시합니다.
Azure 포털을 사용하여 Node.js 백 엔드를 생성하기
Azure Portal에서 Mobile Apps 백 엔드를 바로 만들 수 있습니다. 모바일 앱 만들기 자습서에 따라 다음 단계를 완료하거나 클라이언트와 서버를 함께 만들 수 있습니다. 이 자습서에는 이러한 지침의 간소화된 버전이 포함되어 있으며 개념 증명 프로젝트에 가장 적합합니다.
Azure Portal에 로그인합니다.
+NEW>Web + Mobile Mobile>App을 선택한 다음 Mobile Apps 백 엔드의 이름을 입력합니다.
리소스 그룹의 경우 기존 리소스 그룹을 선택하거나 앱과 동일한 이름을 사용하여 새 리소스 그룹을 만듭니다.
App Service 계획의 경우 기본 계획(표준 계층)이 선택됩니다. 다른 계획을 선택하거나 새 계획을 만들 수도 있습니다.
App Service 계획의 설정은 앱 과 연결된 위치, 기능, 비용 및 컴퓨팅 리소스를 결정합니다 . App Service 계획 및 다른 가격 책정 계층 및 원하는 위치에서 새 계획을 만드는 방법에 대한 자세한 내용은 Azure App Service 계획의 심층 개요를 참조하세요.
선택하고생성합니다. 이 단계에서는 Mobile Apps 백 엔드를 만듭니다.
새 Mobile Apps 백 엔드에 대한 설정 창에서 클라이언트 앱 플랫폼 >> 선택합니다.
데이터 연결 추가 창에서 SQL Database>새 데이터베이스 만들기를 선택합니다. 데이터베이스 이름을 입력하고 가격 책정 계층을 선택한 다음 서버를 선택합니다. 이 새 데이터베이스를 다시 사용할 수 있습니다. 동일한 위치에 데이터베이스가 이미 있는 경우 기존 데이터베이스 사용을 대신 선택할 수 있습니다. 대역폭 비용과 더 높은 대기 시간으로 인해 다른 위치에 데이터베이스를 사용하지 않는 것이 좋습니다.
새 서버 창에서 서버 이름 상자에 고유한 서버 이름을 입력하고, 로그인 및 암호를 제공하고, Azure 서비스에서 서버에 액세스하도록 허용을 선택하고, 확인을 선택합니다. 이 단계에서는 새 데이터베이스를 만듭니다.
데이터 연결 추가 창으로 돌아가서 연결 문자열을 선택하고 데이터베이스에 대한 로그인 및 암호 값을 입력한 다음 확인을 선택합니다.
계속하기 전에 데이터베이스가 성공적으로 배포될 때까지 몇 분 정도 기다립니다.
시작 창으로 돌아가서 테이블 API 만들기에서 Node.js 백 엔드 언어로 선택합니다. 모든 사이트 콘텐츠를 덮어쓰는 것을 승인하는 상자를 선택한 다음 TodoItem 테이블 만들기를 선택합니다.
Git을 사용하여 Node.js 백 엔드 빠른 시작 코드 프로젝트 다운로드
포털의 빠른 시작 창을 사용하여 Node.js Mobile Apps 백 엔드를 만들면 Node.js 프로젝트가 만들어지고 사이트에 배포됩니다. 포털에서 테이블 및 API를 추가하고 Node.js 백 엔드에 대한 코드 파일을 편집할 수 있습니다. 또한 다양한 배포 도구를 사용하여 백 엔드 프로젝트를 다운로드하여 테이블 및 API를 추가하거나 수정한 다음 프로젝트를 다시 게시할 수 있습니다. 자세한 내용은 Azure App Service 배포 가이드를 참조하세요.
다음 절차에서는 Git 리포지토리를 사용하여 빠른 시작 프로젝트 코드를 다운로드합니다.
아직 설치하지 않은 경우 Git을 설치합니다. Git을 설치하는 데 필요한 단계는 운영 체제마다 다릅니다. 운영 체제별 배포 및 설치 지침은 Git 설치를 참조하세요.
백 엔드 사이트에 Git 레포지토리를 사용하도록 설정하려면 레포지토리를 준비하세요를 참조하세요. 배포 사용자 이름 및 암호를 기록해 둡다.
Mobile Apps 백 엔드 창에서 Git 복제 URL 설정을 기록해 둡니다.
git cloneGit 복제 URL을 사용하여 명령을 실행합니다. 다음 예제와 같이 필요한 경우 암호를 입력합니다.$ git clone https://username@todolist.scm.azurewebsites.net:443/todolist.git이전 예제에서 로컬 디렉터리
/todolist로 이동하여 프로젝트 파일이 다운로드되었음을 확인합니다. 디렉터리에서/tablestodoitem.json 파일을 찾습니다. 이 파일은 테이블에 대한 권한을 정의합니다. 또한 동일한 디렉터리에서 todoitem.js 파일을 찾습니다. 테이블에 대한 CRUD 작업 스크립트를 정의합니다.프로젝트 파일을 변경한 후 다음 명령을 실행하여 사이트에 변경 내용을 추가, 커밋 및 업로드합니다.
$ git commit -m "updated the table script" $ git push origin master프로젝트에 새 파일을 추가할 때 먼저 명령을 실행
git add .해야 합니다.
사이트에 새 커밋 집합이 푸시될 때마다 사이트가 다시 게시됩니다.
Azure에 당신의 Node.js 백 엔드를 게시하십시오
Microsoft Azure는 Mobile Apps Node.js 백 엔드를 Azure 서비스에 게시하기 위한 다양한 메커니즘을 제공합니다. 이러한 메커니즘에는 Visual Studio에 통합된 배포 도구, 명령줄 도구 및 소스 제어를 기반으로 하는 지속적인 배포 옵션이 포함됩니다. 자세한 내용은 Azure App Service 배포 가이드를 참조하세요.
Azure App Service에는 백 엔드를 게시하기 전에 검토해야 하는 Node.js 애플리케이션에 대한 구체적인 조언이 있습니다.
- 노드 버전을 지정하는 방법
- 노드 모듈을 사용하는 방법
애플리케이션에 홈페이지 사용
많은 애플리케이션은 웹 및 모바일 앱의 조합입니다. ExpressJS 프레임워크를 사용하여 두 패싯을 결합할 수 있습니다. 그러나 경우에 따라 모바일 인터페이스만 구현하려고 할 수 있습니다. 앱 서비스가 실행 중인지 확인하기 위해 홈페이지를 제공하는 것이 유용합니다. 사용자 고유의 홈페이지를 제공하거나 임시 홈페이지를 사용하도록 설정할 수 있습니다. 임시 홈페이지를 사용하도록 설정하려면 다음 코드를 사용하여 Mobile Apps를 인스턴스화합니다.
var mobile = azureMobileApps({ homePage: true });
로컬로 개발할 때만 이 옵션을 사용할 수 있도록 하려면 이 설정을 azureMobile.js 파일에 추가할 수 있습니다.
테이블 작업
Azure-mobile-apps Node.js Server SDK는 Azure SQL Database에 저장된 데이터 테이블을 Web API로 노출하는 메커니즘을 제공합니다. 다음 5가지 작업을 제공합니다.
| 수술 | 설명 |
|---|---|
| GET /tables/tablename | 테이블의 모든 레코드를 가져옵니다. |
| GET /tables/tablename/:id | 테이블에서 특정 레코드를 가져옵니다. |
| POST /tables/tablename | 테이블에 레코드를 만듭니다. |
| PATCH /tables/tablename/:id | 테이블의 레코드를 업데이트합니다. |
| DELETE /tables/tablename/:id | 테이블에서 레코드를 삭제합니다. |
이 Web API는 OData 를 지원하고 테이블 스키마를 확장하여 오프라인 데이터 동기화를 지원합니다.
동적 스키마를 사용하여 테이블 정의
테이블을 사용하려면 먼저 테이블을 정의해야 합니다. 정적 스키마(스키마에서 열을 정의하는 위치)를 사용하거나 동적으로(SDK가 들어오는 요청에 따라 스키마를 제어하는 경우) 테이블을 정의할 수 있습니다. 또한 정의에 JavaScript 코드를 추가하여 Web API의 특정 측면을 제어할 수 있습니다.
모범 사례로, 디렉터리의 JavaScript 파일에서 tables 각 테이블을 정의한 다음, 메서드를 tables.import() 사용하여 테이블을 가져와야 합니다. 기본 앱 샘플을 확장하면 app.js 파일을 조정합니다.
var express = require('express'),
azureMobileApps = require('azure-mobile-apps');
var app = express(),
mobile = azureMobileApps();
// Define the database schema that is exposed.
mobile.tables.import('./tables');
// Provide initialization of any tables that are statically defined.
mobile.tables.initialize().then(function () {
// Add the Mobile API so it is accessible as a Web API.
app.use(mobile);
// Start listening on HTTP.
app.listen(process.env.PORT || 3000);
});
./tables/TodoItem.js테이블을 정의합니다.
var azureMobileApps = require('azure-mobile-apps');
var table = azureMobileApps.table();
// Additional configuration for the table goes here.
module.exports = table;
테이블은 기본적으로 동적 스키마를 사용합니다. 동적 스키마를 전역적으로 해제하려면 Azure Portal에서 앱 설정을 false로 설정합니다 MS_DynamicSchema .
GitHub의 할 일 샘플에서 전체 예제를 찾을 수 있습니다.
정적 스키마를 사용하여 테이블 정의
Web API를 통해 노출할 열을 명시적으로 정의할 수 있습니다. azure-mobile-apps Node.js SDK는 사용자가 제공하는 목록에 오프라인 데이터 동기화에 필요한 모든 추가 열을 자동으로 추가합니다. 예를 들어 퀵스타트 클라이언트 애플리케이션에는 두 개의 열 text(문자열) 및 complete(부울)이 있는 테이블이 필요합니다.
테이블 정의 JavaScript 파일(디렉터리에 있음)은 tables 다음과 같이 정의할 수 있습니다.
var azureMobileApps = require('azure-mobile-apps');
var table = azureMobileApps.table();
// Define the columns within the table.
table.columns = {
"text": "string",
"complete": "boolean"
};
// Turn off the dynamic schema.
table.dynamicSchema = false;
module.exports = table;
테이블을 정적으로 정의하는 경우 시작 시 tables.initialize() 데이터베이스 스키마를 만드는 메서드도 호출해야 합니다. 이 메서드는 tables.initialize() 데이터베이스가 초기화되기 전에 웹 서비스가 요청을 처리하지 않도록 프라미스 를 반환합니다.
SQL Server Express를 로컬 컴퓨터의 개발 데이터 저장소로 사용
Mobile Apps Node.js SDK는 데이터를 바로 제공하는 세 가지 옵션을 제공합니다.
- 메모리 드라이버를 사용하여 비영구 예제 저장소를 제공합니다.
- mssql 드라이버를 사용하여 개발을 위한 SQL Server Express 데이터 저장소를 제공합니다.
- mssql 드라이버를 사용하여 프로덕션용 Azure SQL Database 데이터 저장소를 제공합니다.
Mobile Apps Node.js SDK는 mssql Node.js 패키지를 사용하여 SQL Server Express 및 SQL Database에 대한 연결을 설정하고 사용합니다. 이 패키지를 사용하려면 SQL Server Express 인스턴스에서 TCP 연결을 사용하도록 설정해야 합니다.
팁 (조언)
메모리 드라이버는 테스트를 위한 전체 기능 집합을 제공하지 않습니다. 백 엔드를 로컬로 테스트하려면 SQL Server Express 데이터 저장소 및 mssql 드라이버를 사용하는 것이 좋습니다.
Microsoft SQL Server 2014 Express를 다운로드하여 설치합니다. SQL Server 2014 Express with Tools 버전을 설치해야 합니다. 64비트 지원을 명시적으로 요구하지 않는 한 32비트 버전은 실행할 때 더 적은 메모리를 사용합니다.
SQL Server 2014 Configuration Manager를 실행합니다.
a. 트리 메뉴에서 SQL Server 네트워크 구성 노드를 확장합니다.
b. SQLEXPRESS에 대한 프로토콜을 선택합니다.
다. TCP/IP를 마우스 오른쪽 단추로 클릭하고 사용을 선택합니다. 팝업 대화 상자에서 확인을 선택합니다.
다. TCP/IP를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.
이. IP 주소 탭을 선택합니다.
에프. IPAll 노드를 찾습니다. TCP 포트 필드에 1433을 입력합니다.
그램 (g) 확인을 선택합니다. 팝업 대화 상자에서 확인을 선택합니다.
ㅎ. 트리 메뉴에서 SQL Server 서비스를 선택합니다.
(i) SQL Server(SQLEXPRESS)를 마우스 오른쪽 단추로 클릭하고 다시 시작을 선택합니다.
j. SQL Server 2014 Configuration Manager를 닫습니다.
SQL Server 2014 Management Studio를 실행하고 로컬 SQL Server Express 인스턴스에 연결합니다.
개체 탐색기에서 인스턴스를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.
보안 페이지를 선택합니다.
SQL Server 및 Windows 인증 모드가 선택되어 있는지 확인합니다.
확인을 선택합니다.
개체 탐색기에서 보안>로그인 을 확장합니다.
로그인을 마우스 오른쪽 단추 로 클릭하고 새 로그인을 선택합니다.
로그인 이름을 입력합니다. SQL Server 인증을 선택합니다. 암호를 입력한 다음 암호 확인에 동일한 암호를 입력 합니다. 암호는 Windows 복잡성 요구 사항을 충족해야 합니다.
확인을 선택합니다.
새 로그인을 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.
서버 역할 페이지를 선택합니다.
dbcreator 서버 역할에 대한 확인란을 선택합니다.
확인을 선택합니다.
SQL Server 2015 Management Studio를 닫습니다.
선택한 사용자 이름 및 암호를 기록해야 합니다. 데이터베이스 요구 사항에 따라 추가 서버 역할 또는 권한을 할당해야 할 수 있습니다.
Node.js 애플리케이션은 이 데이터베이스의 SQLCONNSTR_MS_TableConnectionString 연결 문자열에 대한 환경 변수를 읽습니다. 사용자 환경에서 이 변수를 설정할 수 있습니다. 예를 들어 PowerShell을 사용하여 이 환경 변수를 설정할 수 있습니다.
$env:SQLCONNSTR_MS_TableConnectionString = "Server=127.0.0.1; Database=mytestdatabase; User Id=azuremobile; Password=T3stPa55word;"
TCP/IP 연결을 통해 데이터베이스에 액세스합니다. 연결에 대한 사용자 이름 및 암호를 제공합니다.
로컬 개발을 위한 프로젝트 구성
Mobile Apps는 로컬 파일 시스템에서 azureMobile.js JavaScript 파일을 읽습니다. 이 파일을 사용하여 프로덕션 환경에서 Mobile Apps SDK를 구성하지 마세요. 대신 Azure Portal에서 앱 설정을 사용합니다.
azureMobile.js 파일은 구성 개체를 내보내야 합니다. 가장 일반적인 설정은 다음과 같습니다.
- 데이터베이스 설정
- 진단 로깅 설정
- 대체 CORS 설정
이 예제 azureMobile.js 파일은 이전 데이터베이스 설정을 구현합니다.
module.exports = {
cors: {
origins: [ 'localhost' ]
},
data: {
provider: 'mssql',
server: '127.0.0.1',
database: 'mytestdatabase',
user: 'azuremobile',
password: 'T3stPa55word'
},
logging: {
level: 'verbose'
}
};
암호가 클라우드에 저장 되지 않도록 .gitignore 파일(또는 기타 소스 코드 제어 무시 파일)에azureMobile.js추가하는 것이 좋습니다. Azure Portal 내의 앱 설정에서 항상 프로덕션 설정을 구성합니다.
모바일 앱에 대한 앱 설정 구성
azureMobile.js 파일의 대부분의 설정에는 Azure Portal에서 동일한 앱 설정이 있습니다. 다음 목록을 사용하여 앱 설정에서 앱을 구성합니다.
| 앱 설정 | azureMobile.js 설정 | 설명 | 유효한 값 |
|---|---|---|---|
| MS_MobileAppName | 이름 | 앱의 이름 | 문자열 |
| MS_모바일로깅레벨 | logging.level | 기록할 메시지의 최소 로그 수준 | 오류, 경고, 정보, 자세한 정보, 디버그, 바보 같은 |
| MS_DebugMode | 디버그 | 디버그 모드를 사용하거나 사용하지 않도록 설정 | 참, 거짓 |
| MS_TableSchema | 데이터 스키마 | SQL 테이블의 기본 스키마 이름 | string(기본값: dbo) |
| MS_DynamicSchema | data.dynamicSchema | 디버그 모드를 사용하거나 사용하지 않도록 설정 | true, false |
| MS_DisableVersionHeader | 버전(정의되지 않음으로 설정) | X-ZUMO-Server-Version 헤더를 사용하지 않도록 설정 | 참, 거짓 |
| MS_SkipVersionCheck | skipversioncheck | 클라이언트 API 버전 검사를 사용하지 않도록 설정 | 참, 거짓 |
앱 설정을 설정하려면 다음을 수행합니다.
- Azure Portal에 로그인합니다.
- 모든 리소스 또는 App Services를 선택한 다음 모바일 앱의 이름을 선택합니다.
- 설정 창이 기본적으로 열립니다. 그렇지 않은 경우 설정을 선택하세요.
- 일반 메뉴에서 애플리케이션 설정을 선택합니다.
- 앱 설정 섹션으로 스크롤합니다.
- 앱 설정이 이미 있는 경우 앱 설정의 값을 선택하여 값을 편집합니다. 앱 설정이 없으면 키 상자에 앱 설정을 입력하고 값 상자에 값을 입력합니다.
- 저장을 선택합니다.
대부분의 앱 설정을 변경하려면 서비스를 다시 시작해야 합니다.
프로덕션 데이터 저장소로 SQL Database 사용
Azure SQL Database를 데이터 저장소로 사용하는 것은 모든 Azure App Service 애플리케이션 유형에서 동일합니다. 아직 수행하지 않은 경우 다음 단계에 따라 Mobile Apps 백 엔드를 만듭니다.
Azure Portal에 로그인합니다.
창의 왼쪽 위에서 +NEW 버튼 >웹 + 모바일>모바일 앱을 선택한 다음, Mobile Apps 백엔드의 이름을 제공합니다.
리소스 그룹 상자에 앱과 동일한 이름을 입력합니다.
기본 App Service 계획이 선택됩니다. App Service 계획을 변경하려는 경우:
a. App Service 계획>+새로 만들기를 선택합니다.
b. 새 App Service 계획의 이름을 제공하고 적절한 위치를 선택합니다.
다. 서비스에 적절한 가격 책정 계층을 선택합니다. 모두 보기를 선택하여 무료 및 공유와 같은 더 많은 가격 책정 옵션을 봅니다.
다. 선택 단추를 클릭합니다.
이. App Service 계획 창으로 돌아간 다음, 확인을 선택합니다.
선택하고생성합니다.
Mobile Apps 백 엔드를 프로비전하는 데 몇 분 정도 걸릴 수 있습니다. Mobile Apps 백 엔드가 프로비전되면 포털에서 Mobile Apps 백 엔드에 대한 설정 창을 엽니다.
기존 SQL 데이터베이스를 Mobile Apps 백 엔드에 연결하거나 새 SQL 데이터베이스를 만들도록 선택할 수 있습니다. 이 섹션에서는 SQL 데이터베이스를 만듭니다.
비고
Mobile Apps 백 엔드와 동일한 위치에 데이터베이스가 이미 있는 경우 대신 기존 데이터베이스 사용을 선택한 다음 해당 데이터베이스를 선택할 수 있습니다. 대기 시간이 높기 때문에 다른 위치에 데이터베이스를 사용하지 않는 것이 좋습니다.
새 Mobile Apps 백 엔드에서 설정>모바일 앱>데이터>+추가를 선택합니다.
데이터 연결 추가 창에서 SQL Database - 필요한 설정> 구성새 데이터베이스 만들기를 선택합니다. 이름 상자에 새 데이터베이스의 이름을 입력합니다.
서버를 선택합니다. 새 서버 창에서 서버 이름 상자에 고유한 서버 이름을 입력하고 적절한 서버 관리자 로그인 및 암호를 제공합니다. Azure 서비스에서 서버에 액세스하도록 허용이 선택되어 있는지 확인합니다. 확인을 선택합니다.
새 데이터베이스 창에서 확인을 선택합니다.
데이터 연결 추가 창으로 돌아가서 연결 문자열을 선택하고 데이터베이스를 만들 때 제공한 로그인 및 암호를 입력합니다. 기존 데이터베이스를 사용하는 경우 해당 데이터베이스에 대한 로그인 자격 증명을 제공합니다. 확인을 선택합니다.
데이터 연결 추가 창으로 다시 돌아가서 확인을 선택하여 데이터베이스를 만듭니다.
데이터베이스를 만드는 데 몇 분 정도 걸릴 수 있습니다. 알림 영역을 사용하여 배포 진행률을 모니터링합니다. 데이터베이스가 성공적으로 배포될 때까지 진행하지 마세요. 데이터베이스가 배포되면 Mobile Apps 백 엔드 앱 설정에서 SQL Database 인스턴스에 대한 연결 문자열이 만들어집니다. 설정> 애플리케이션 설정연결 문자열에서 이 앱설정을> 볼 수 있습니다.
테이블에 액세스하려면 인증 필요
엔드포인트에서 App Service 인증을 tables 사용하려면 먼저 Azure Portal에서 App Service 인증을 구성해야 합니다. 자세한 내용은 사용하려는 ID 공급자에 대한 구성 가이드를 참조하세요.
각 테이블에는 테이블에 대한 액세스를 제어하는 데 사용할 수 있는 액세스 속성이 있습니다. 다음 샘플에서는 인증이 필요한 정적으로 정의된 테이블을 보여 줍니다.
var azureMobileApps = require('azure-mobile-apps');
var table = azureMobileApps.table();
// Define the columns within the table.
table.columns = {
"text": "string",
"complete": "boolean"
};
// Turn off the dynamic schema.
table.dynamicSchema = false;
// Require authentication to access the table.
table.access = 'authenticated';
module.exports = table;
access 속성은 다음 세 가지 값 중 하나를 사용할 수 있습니다.
- 익명 은 클라이언트 애플리케이션이 인증 없이 데이터를 읽을 수 있음을 나타냅니다.
- 인증됨 은 클라이언트 애플리케이션이 요청과 함께 유효한 인증 토큰을 보내야 임을 나타냅니다.
- disabled 는 이 테이블이 현재 사용하지 않도록 설정되어 있음을 나타냅니다.
액세스 속성이 정의되지 않은 경우 인증되지 않은 액세스가 허용됩니다.
귀하의 테이블과 인증 클레임을 사용하십시오
인증을 설정할 때 요청되는 다양한 클레임을 설정할 수 있습니다. 일반적으로 이러한 클레임은 context.user 객체를 통해 사용할 수 없습니다. 그러나 context.user.getIdentity() 메서드를 사용하여 검색할 수 있습니다. 이 메서드는 getIdentity() 개체로 확인되는 프라미스를 반환합니다. 개체는 인증 방법(facebook, , google또는twittermicrosoftaccountaad)으로 키 지정됩니다.
예를 들어 Microsoft 계정 인증을 설정하고 이메일 주소 클레임을 요청하는 경우 다음 테이블 컨트롤러를 사용하여 레코드에 전자 메일 주소를 추가할 수 있습니다.
var azureMobileApps = require('azure-mobile-apps');
// Create a new table definition.
var table = azureMobileApps.table();
table.columns = {
"emailAddress": "string",
"text": "string",
"complete": "boolean"
};
table.dynamicSchema = false;
table.access = 'authenticated';
/**
* Limit the context query to those records with the authenticated user email address
* @param {Context} context the operation context
* @returns {Promise} context execution Promise
*/
function queryContextForEmail(context) {
return context.user.getIdentity().then((data) => {
context.query.where({ emailAddress: data.microsoftaccount.claims.emailaddress });
return context.execute();
});
}
/**
* Adds the email address from the claims to the context item - used for
* insert operations
* @param {Context} context the operation context
* @returns {Promise} context execution Promise
*/
function addEmailToContext(context) {
return context.user.getIdentity().then((data) => {
context.item.emailAddress = data.microsoftaccount.claims.emailaddress;
return context.execute();
});
}
// Configure specific code when the client does a request.
// READ: only return records that belong to the authenticated user.
table.read(queryContextForEmail);
// CREATE: add or overwrite the userId based on the authenticated user.
table.insert(addEmailToContext);
// UPDATE: only allow updating of records that belong to the authenticated user.
table.update(queryContextForEmail);
// DELETE: only allow deletion of records that belong to the authenticated user.
table.delete(queryContextForEmail);
module.exports = table;
사용 가능한 클레임을 확인하려면 웹 브라우저를 통해 사이트의 /.auth/me 엔드포인트를 확인합니다.
특정 테이블 작업에 대한 접근을 비활성화합니다.
테이블에 표시되는 것 외에도 액세스 속성을 사용하여 개별 작업을 제어할 수 있습니다. 다음 네 가지 작업이 있습니다.
-
read는 테이블에 대한 RESTful GET 작업입니다. -
insert는 테이블의 RESTful POST 작업입니다. -
update는 RESTful PATCH 작업을 테이블에 수행합니다. -
delete는 테이블의 RESTful DELETE 작업입니다.
예를 들어 읽기 전용 인증되지 않은 테이블을 제공할 수 있습니다.
var azureMobileApps = require('azure-mobile-apps');
var table = azureMobileApps.table();
// Read-only table. Only allow READ operations.
table.read.access = 'anonymous';
table.insert.access = 'disabled';
table.update.access = 'disabled';
table.delete.access = 'disabled';
module.exports = table;
테이블 작업에 사용되는 쿼리 조정
테이블 작업에 대한 일반적인 요구 사항은 데이터의 제한된 보기를 제공하는 것입니다. 예를 들어 사용자 고유의 레코드만 읽거나 업데이트할 수 있도록 인증된 사용자 ID로 태그가 지정된 테이블을 제공할 수 있습니다. 다음 표 정의는 이 기능을 제공합니다.
var azureMobileApps = require('azure-mobile-apps');
var table = azureMobileApps.table();
// Define a static schema for the table.
table.columns = {
"userId": "string",
"text": "string",
"complete": "boolean"
};
table.dynamicSchema = false;
// Require authentication for this table.
table.access = 'authenticated';
// Ensure that only records for the authenticated user are retrieved.
table.read(function (context) {
context.query.where({ userId: context.user.id });
return context.execute();
});
// When adding records, add or overwrite the userId with the authenticated user.
table.insert(function (context) {
context.item.userId = context.user.id;
return context.execute();
});
module.exports = table;
일반적으로 쿼리를 실행하는 작업에는 절을 사용하여 조정할 수 있는 쿼리 속성이 있습니다 where . 쿼리 속성은 OData 쿼리를 데이터 백 엔드에서 처리할 수 있는 쿼리로 변환하는 데 사용되는 QueryJS 개체입니다. 이전과 같은 단순 같음 사례의 경우 맵을 사용할 수 있습니다. 특정 SQL 절을 추가할 수도 있습니다.
context.query.where('myfield eq ?', 'value');
테이블에서 일시 삭제 구성
일시 삭제는 실제로 레코드를 삭제하지 않습니다. 대신 삭제된 열을 true로 설정하여 데이터베이스 내에서 삭제된 것으로 표시합니다. Mobile Apps SDK는 Mobile Client SDK가 IncludeDeleted()을 사용하는 경우가 아니라면 결과에서 일시 삭제된 레코드를 자동으로 제거합니다. 일시 삭제에 대한 테이블을 구성하려면 테이블 정의 파일에서 속성을 설정합니다 softDelete .
var azureMobileApps = require('azure-mobile-apps');
var table = azureMobileApps.table();
// Define the columns within the table.
table.columns = {
"text": "string",
"complete": "boolean"
};
// Turn off the dynamic schema.
table.dynamicSchema = false;
// Turn on soft delete.
table.softDelete = true;
// Require authentication to access the table.
table.access = 'authenticated';
module.exports = table;
레코드를 삭제하기 위한 메커니즘(클라이언트 애플리케이션, WebJob, Azure 함수 또는 사용자 지정 API)을 설정해야 합니다.
데이터베이스에 데이터를 시드하다
새 애플리케이션을 만들 때 데이터를 사용하여 테이블을 시드할 수 있습니다. 다음과 같이 테이블 정의 JavaScript 파일 내에서 이 작업을 수행할 수 있습니다.
var azureMobileApps = require('azure-mobile-apps');
var table = azureMobileApps.table();
// Define the columns within the table.
table.columns = {
"text": "string",
"complete": "boolean"
};
table.seed = [
{ text: 'Example 1', complete: false },
{ text: 'Example 2', complete: true }
];
// Turn off the dynamic schema.
table.dynamicSchema = false;
// Require authentication to access the table.
table.access = 'authenticated';
module.exports = table;
데이터 시드는 Mobile Apps SDK를 사용하여 테이블을 만든 경우에만 발생합니다. 테이블이 데이터베이스에 이미 있는 경우 테이블에 데이터가 삽입되지 않습니다. 동적 스키마가 켜져 있으면 스키마가 시드된 데이터에서 유추됩니다.
서비스를 실행하기 시작할 때 명시적으로 메서드를 호출 tables.initialize() 하여 테이블을 만드는 것이 좋습니다.
Swagger 지원 사용
Mobile Apps에는 기본 제공 Swagger 지원이 제공됩니다. Swagger 지원을 사용하도록 설정하려면 먼저 swagger-ui를 종속성으로 설치합니다.
npm install --save swagger-ui
그런 다음 Mobile Apps 생성자에서 Swagger 지원을 사용하도록 설정할 수 있습니다.
var mobile = azureMobileApps({ swagger: true });
개발 버전에서만 Swagger 지원을 사용하도록 설정하려고 할 수 있습니다. 앱 설정을 사용하여 NODE_ENV 이 작업을 수행할 수 있습니다.
var mobile = azureMobileApps({ swagger: process.env.NODE_ENV !== 'production' });
swagger 엔드포인트는 http:// yoursite.azurewebsites.net/swagger 있습니다. Swagger UI에 /swagger/ui 엔드포인트를 통해 액세스할 수 있습니다. 전체 애플리케이션에서 인증을 요구하도록 선택하면 Swagger에서 오류가 발생합니다. 최상의 결과를 위해 Azure App Service 인증/권한 부여 설정에서 인증되지 않은 요청을 허용하도록 선택한 다음, 속성을 사용하여 인증을 table.access 제어합니다.
로컬 개발을 위한 Swagger 지원만 원하는 경우 azureMobile.js 파일에 Swagger 옵션을 추가할 수도 있습니다.
푸시 알림
Mobile Apps는 Azure Notification Hubs와 통합되므로 모든 주요 플랫폼에서 수백만 개의 디바이스에 대상 푸시 알림을 보낼 수 있습니다. Notification Hubs를 사용하여 iOS, Android 및 Windows 디바이스에 푸시 알림을 보낼 수 있습니다. Notification Hubs로 수행할 수 있는 모든 작업을 자세히 알아보려면 Notification Hubs 개요를 참조하세요.
푸시 알림 보내기
다음 코드에서는 개체를 push 사용하여 등록된 iOS 디바이스에 브로드캐스트 푸시 알림을 보내는 방법을 보여줍니다.
// Create an APNS payload.
var payload = '{"aps": {"alert": "This is an APNS payload."}}';
// Only do the push if configured.
if (context.push) {
// Send a push notification by using APNS.
context.push.apns.send(null, payload, function (error) {
if (error) {
// Do something or log the error.
}
});
}
클라이언트에서 템플릿 푸시 등록을 만들면 지원되는 모든 플랫폼의 디바이스에 템플릿 푸시 메시지를 대신 보낼 수 있습니다. 다음 코드는 템플릿 알림을 보내는 방법을 보여줍니다.
// Define the template payload.
var payload = '{"messageParam": "This is a template payload."}';
// Only do the push if configured.
if (context.push) {
// Send a template notification.
context.push.send(null, payload, function (error) {
if (error) {
// Do something or log the error.
}
});
}
태그를 사용하여 인증된 사용자에게 푸시 알림 보내기
인증된 사용자가 푸시 알림을 등록하면 사용자 ID 태그가 등록에 자동으로 추가됩니다. 이 태그를 사용하여 특정 사용자가 등록한 모든 디바이스에 푸시 알림을 보낼 수 있습니다. 다음 코드는 요청을 하는 사용자의 SID를 가져오고 해당 사용자의 모든 디바이스 등록에 템플릿 푸시 알림을 보냅니다.
// Only do the push if configured.
if (context.push) {
// Send a notification to the current user.
context.push.send(context.user.id, payload, function (error) {
if (error) {
// Do something or log the error.
}
});
}
인증된 클라이언트에서 푸시 알림을 등록하는 경우 등록을 시도하기 전에 인증이 완료되었는지 확인합니다.
사용자 지정 API
사용자 지정 API 정의
Mobile Apps는 엔드포인트를 통한 /tables 데이터 액세스 API 외에도 사용자 지정 API 범위를 제공할 수 있습니다. 사용자 지정 API는 테이블 정의와 비슷한 방식으로 정의되며 인증을 비롯한 모든 동일한 기능에 액세스할 수 있습니다.
사용자 지정 API에서 App Service 인증을 사용하려면 먼저 Azure Portal에서 App Service 인증을 구성해야 합니다. 자세한 내용은 사용하려는 ID 공급자에 대한 구성 가이드를 참조하세요.
사용자 지정 API는 테이블 API와 거의 동일한 방식으로 정의됩니다.
-
api디렉터리를 만듭니다. - 디렉터리에 API 정의 JavaScript 파일을
api만듭니다. - 가져오기 메서드를 사용하여 디렉터리를 가져옵니다
api.
앞에서 사용한 기본 앱 샘플을 기반으로 하는 프로토타입 API 정의는 다음과 같습니다.
var express = require('express'),
azureMobileApps = require('azure-mobile-apps');
var app = express(),
mobile = azureMobileApps();
// Import the custom API.
mobile.api.import('./api');
// Add the Mobile API so it is accessible as a Web API.
app.use(mobile);
// Start listening on HTTP
app.listen(process.env.PORT || 3000);
메서드를 사용하여 서버 날짜를 반환하는 예제 API를 Date.now() 살펴보겠습니다. api/date.js 파일은 다음과 같습니다.
var api = {
get: function (req, res, next) {
var date = { currentTime: Date.now() };
res.status(200).type('application/json').send(date);
});
};
module.exports = api;
각 매개 변수는 표준 RESTful 동사(GET, POST, PATCH 또는 DELETE) 중 하나입니다. 이 메서드는 필요한 출력을 보내는 표준 ExpressJS 미들웨어 함수입니다.
사용자 지정 API에 액세스하려면 인증 필요
Mobile Apps SDK는 엔드포인트 및 사용자 지정 API에 대해 동일한 방식으로 인증을 tables 구현합니다. 이전 섹션에서 개발한 API에 인증을 추가하려면 다음 속성을 추가 access 합니다.
var api = {
get: function (req, res, next) {
var date = { currentTime: Date.now() };
res.status(200).type('application/json').send(date);
});
};
// All methods must be authenticated.
api.access = 'authenticated';
module.exports = api;
특정 작업에서 인증을 지정할 수도 있습니다.
var api = {
get: function (req, res, next) {
var date = { currentTime: Date.now() };
res.status(200).type('application/json').send(date);
}
};
// The GET methods must be authenticated.
api.get.access = 'authenticated';
module.exports = api;
엔드포인트에 tables 사용되는 동일한 토큰은 인증이 필요한 사용자 지정 API에 사용해야 합니다.
대용량 파일 업로드 처리
Mobile Apps SDK는 본문 파서 미들웨어 를 사용하여 제출에서 본문 콘텐츠를 수락하고 디코딩합니다. 더 큰 파일 업로드를 허용하도록 본문 파서 미리 구성할 수 있습니다.
var express = require('express'),
bodyParser = require('body-parser'),
azureMobileApps = require('azure-mobile-apps');
var app = express(),
mobile = azureMobileApps();
// Set up large body content handling.
app.use(bodyParser.json({ limit: '50mb' }));
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));
// Import the custom API.
mobile.api.import('./api');
// Add the Mobile API so it is accessible as a Web API.
app.use(mobile);
// Start listening on HTTP.
app.listen(process.env.PORT || 3000);
파일은 전송 전에 base-64로 인코딩됩니다. 이 인코딩은 실제 업로드의 크기(및 고려해야 할 크기)를 증가합니다.
사용자 지정 SQL 문 실행
Mobile Apps SDK를 사용하면 요청 개체를 통해 전체 컨텍스트에 액세스할 수 있습니다. 매개 변수가 있는 SQL 문을 정의된 데이터 공급자에 쉽게 실행할 수 있습니다.
var api = {
get: function (request, response, next) {
// Check for parameters. If not there, pass on to a later API call.
if (typeof request.params.completed === 'undefined')
return next();
// Define the query. Anything that the mssql
// driver can handle is allowed.
var query = {
sql: 'UPDATE TodoItem SET complete=@completed',
parameters: [{
completed: request.params.completed
}]
};
// Execute the query. The context for Mobile Apps is available through
// request.azureMobile. The data object contains the configured data provider.
request.azureMobile.data.execute(query)
.then(function (results) {
response.json(results);
});
}
};
api.get.access = 'authenticated';
module.exports = api;
디버깅
Mobile Apps 디버그, 진단 및 문제 해결
Azure App Service는 Node.js 애플리케이션에 대한 몇 가지 디버깅 및 문제 해결 기술을 제공합니다. Node.js Mobile Apps 백 엔드 문제 해결을 시작하려면 다음 문서를 참조하세요.
Node.js 애플리케이션은 광범위한 진단 로그 도구에 액세스할 수 있습니다. 내부적으로 Mobile Apps Node.js SDK는 진단 로깅에 Winston 을 사용합니다. Azure Portal에서 디버그 모드를 사용하도록 설정하거나 앱 설정을 true로 설정 MS_DebugMode 하면 로 깅이 자동으로 활성화됩니다. 생성된 로그는 Azure Portal의 진단 로그에 표시됩니다.