개요
이 튜토리얼에서는 MongoDB Node.js 운전자 사용하여 MongoDB Atlas 에서 데이터를 쿼리하는 HTTP 트리거 Azure 함수를 만듭니다. 또한 서버리스 컨텍스트에서 데이터베이스 연결을 관리 하고 함수를 Azure cloud 에 배포 방법도 학습 .
전제 조건
시작하기 전에 다음 단계를 완료하세요.
MongoDB Atlas cluster 배포하고, 네트워크 액세스 및 데이터베이스 사용자를 구성하고, 샘플 데이터 세트를 로드합니다. 방법을 학습 MongoDB 시작하기 가이드 참조하세요.
Node.js 버전 이상을 18 설치합니다.
튜토리얼
이 튜토리얼에서는 다음 단계를 가이드합니다.
Azure cloud 리소스를 생성합니다.
로컬 프로젝트 초기화합니다.
MongoDB Node.js 운전자 설치합니다.
sample_mflix데이터베이스 에 대한 데이터베이스 연결을 구성합니다.sample_mflix.movies컬렉션 쿼리 하고 영화를 나타내는 문서를 조회 하는 함수를 작성합니다.로컬에서 함수를 테스트합니다.
Azure 에 배포합니다.
Azure cloud 리소스를 생성합니다.
다음 명령을 실행하여 리소스 그룹 만들고 <GROUP_NAME> 을 그룹 이름으로 바꾸고 <AZURE_REGION> 을 지원되는 Azure 리전 으로 바꿉니다.
az group create \ --name <GROUP_NAME> \ --location <AZURE_REGION>
선택적으로 Azure 처음 사용하는 경우 다음 명령을 실행 함수 리소스 제공자 등록해야 할 수 있습니다.
az provider register --namespace Microsoft.Storage az provider register --namespace Microsoft.Web
그런 다음 다음 명령을 실행 저장 계정을 만듭니다. 이전 코드와 동일한 리전 및 그룹 이름을 사용하고 저장 계정에 고유한 이름을 제공하고 <STORAGE_NAME> 자리 표시자를 이 고유한 이름으로 바꿉니다.
az storage account create \ --name <STORAGE_NAME> \ --location <AZURE_REGION> \ --resource-group <GROUP_NAME> \ --sku Standard_LRS
마지막으로 다음 명령을 실행 함수 앱 만듭니다.
az functionapp create \ --resource-group <GROUP_NAME> \ --consumption-plan-location <AZURE_REGION> \ --runtime node \ --functions-version 4 \ --name <APP_NAME> \ --storage-account <STORAGE_NAME>
로컬 프로젝트 초기화합니다.
다음 명령을 실행하여 로컬 함수 프로젝트 초기화합니다.
func init MongoExample
메시지가 표시되면 작업자 런타임으로 node 을 선택하고 언어 로 javascript 을 선택합니다.
다음 명령을 실행하여 프로젝트 디렉토리 로 이동하여 새 HTTP 트리거 함수를 만듭니다.
cd MongoExample func new --name GetMovies --template "HTTP trigger"
이 명령은 이후 단계에서 편집하는 src/functions/GetMovies.js 파일 생성합니다.
로컬 프로젝트 Azure Function 앱 에 연결하려면 프로젝트 디렉토리 에서 다음 명령을 실행 .
func azure functionapp fetch-app-settings <APP_NAME>
이 명령은 저장 계정 구성을 포함하여 Azure 에서 모든 애플리케이션 설정을 다운로드하고 프로젝트의 local.settings.json 파일 채웁니다.
데이터베이스 연결을 구성합니다.
src/functions/GetMovies.js 를 열고 해당 내용을 다음 코드로 바꿉니다.
const { app } = require("@azure/functions"); const { MongoClient } = require("mongodb"); const mongoClient = new MongoClient( process.env.MONGODB_ATLAS_URI ); app.http("GetMovies", { methods: ["GET"], authLevel: "anonymous", handler: async (request, context) => { // Query logic added in the next step } });
팁
핸들러 함수 외부에서 mongoClient 를 정의하여 호출 전반에서 기존 연결을 재사용합니다. 핸들러 내에서 새 연결을 만들면 호출할 때마다 새 연결이 열리고 데이터베이스 지원하는 최대 동시 연결 수가 소진될 위험이 있습니다. 모듈 수준에서 클라이언트 정의하면 연결 수가 트래픽에 비례하게 유지됩니다.
Node.js 버전에 따라 MongoDB 에 연결하려고 할 때 DNS 확인과 관련된 오류가 발생할 수 있습니다. 이 경우 MongoClient 인스턴스 만들기 전에 src/functions/GetMovies.js 파일 에 다음 코드를 추가합니다.
const { app } = require("@azure/functions"); const { MongoClient } = require("mongodb"); // Forces DNS servers explicitly before connecting to MongoDB require("node:dns/promises").setServers(["1.1.1.1", "8.8.8.8"]); const mongoClient = new MongoClient( process.env.MONGODB_ATLAS_URI ); app.http("GetMovies", { methods: ["GET"], authLevel: "anonymous", handler: async (request, context) => { // Query logic added in the next step } });
local.settings.json 를 열고 Values 객체 에 다음 필드를 추가하고 각 자리 표시자를 실제 값으로 바꿉니다.
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "<storage-connection-string>", "FUNCTIONS_WORKER_RUNTIME": "node", "MONGODB_ATLAS_URI": "<atlas-connection-string>", "MONGODB_ATLAS_DATABASE": "sample_mflix", "MONGODB_ATLAS_COLLECTION": "movies" }, "ConnectionStrings": {} }
MongoDB Atlas 연결 문자열 조회 하려면 Atlas 대시보드 로 이동하여 클러스터 를 선택하고 을 Connect 클릭합니다. Azure 저장 연결 문자열 조회 방법을 학습 Azure 설명서에서 연결 문자열 구성을 참조하세요.
MongoDB 쿼리 하는 함수를 작성합니다.
src/functions/GetMovies.js에서 핸들러 내의 // Query logic added in the next step 주석을 다음 코드로 바꿉니다.
try { const database = mongoClient.db( process.env.MONGODB_ATLAS_DATABASE ); const collection = database.collection( process.env.MONGODB_ATLAS_COLLECTION ); const results = await collection .find({}) .limit(10) .toArray(); return { jsonBody: results }; } catch (error) { return { status: 500, jsonBody: { message: "Internal server error." } }; }
함수가 요청 받으면 환경 변수에 지정된 데이터베이스 및 컬렉션 에 연결하여 최대 10 개의 문서를 반환합니다. 오류가 발생하면 함수는 오류 메시지가 포함된 500 응답을 반환합니다.
로컬에서 함수를 테스트합니다.
프로젝트 루트에서 다음 명령을 실행 함수를 시작합니다.
func start
서버 시작되면 CLI 에 함수의 로컬 URL 표시됩니다. 브라우저에서 http://localhost:7071/api/GetMovies (으)로 이동하거나 cURL 또는 Postman과 같은 도구를 사용하여 요청 보냅니다.
참고
서버 시작되었지만 데이터를 조회 할 수 없는 경우 로컬 IP 주소 Atlas 네트워크 액세스 목록에 포함되어 있는지 확인하세요. 프로덕션용으로 구성한 Azure 데이터 센터 IP 규칙은 로컬에서 테스트할 때는 적용 되지 않습니다. 자세한 내용은 IP 액세스 목록 항목 구성을 참조하세요.
Azure 에 배포합니다.
다음 명령을 실행 하여 각 자리 표시자를 실제 값으로 바꿔 Azure 에서 환경 변수를 설정합니다.
az functionapp config appsettings set \ --name <APP_NAME> \ --resource-group <GROUP_NAME> \ --settings MONGODB_ATLAS_URI=<atlas-connection-string> az functionapp config appsettings set \ --name <APP_NAME> \ --resource-group <GROUP_NAME> \ --settings MONGODB_ATLAS_DATABASE=sample_mflix az functionapp config appsettings set \ --name <APP_NAME> \ --resource-group <GROUP_NAME> \ --settings MONGODB_ATLAS_COLLECTION=movies
다음 명령을 실행 하여 함수를 배포합니다.
func azure functionapp publish <APP_NAME>
Deployment successful. Remote build succeeded! Syncing triggers... Functions in <APP_NAME>: GetMovies - [httpTrigger] Invoke url: https://<APP_NAME>.azurewebsites.net/api/getmovies
배포서버 완료되면 CLI 에 함수의 공개 URL 표시됩니다. 이 함수는 authLevel: "anonymous"를 사용하므로 키 없이 액세스할 수 있습니다.
참고
프로덕션 배포의 경우 authLevel 를 "function" 또는 로 변경하고 권한이 "admin" 부여된 클라이언트에게 적절한 키를 배포하는 것이 좋습니다.자세한 학습 은 Azure Functions 문서에서 액세스 키로 작업을 참조하세요.
자세히 알아보기
이 튜토리얼에서 다루는 개념에 대해 자세히 학습 다음 리소스를 참조하세요.
연결 권장사항 에 대해 학습 Atlas 문서에서 Azure Functions로 연결 관리를 참조하세요.
Functions에 대해 자세히 학습 Azure Functions 설명서를 참조하세요.