Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

튜토리얼: Azure Functions와 함께 MongoDB 사용

이 튜토리얼에서는 MongoDB Node.js 운전자 사용하여 MongoDB Atlas 에서 데이터를 쿼리하는 HTTP 트리거 Azure 함수를 만듭니다. 또한 서버리스 컨텍스트에서 데이터베이스 연결을 관리 하고 함수를 Azure cloud 에 배포 방법도 학습 .

시작하기 전에 다음 단계를 완료하세요.

  • MongoDB Atlas cluster 배포하고, 네트워크 액세스 및 데이터베이스 사용자를 구성하고, 샘플 데이터 세트를 로드합니다. 방법을 학습 MongoDB 시작하기 가이드 참조하세요.

  • Azure CLI 설치하고 구성합니다.

  • Azure Functions 핵심 도구를 설치하고 구성합니다.

  • Node.js 버전 이상을 18 설치합니다.

이 튜토리얼에서는 다음 단계를 가이드합니다.

  • Azure cloud 리소스를 생성합니다.

  • 로컬 프로젝트 초기화합니다.

  • MongoDB Node.js 운전자 설치합니다.

  • sample_mflix 데이터베이스 에 대한 데이터베이스 연결을 구성합니다.

  • sample_mflix.movies 컬렉션 쿼리 하고 영화를 나타내는 문서를 조회 하는 함수를 작성합니다.

  • 로컬에서 함수를 테스트합니다.

  • Azure 에 배포합니다.

1

다음 명령을 실행하여 리소스 그룹 만들고 <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>
2

다음 명령을 실행하여 로컬 함수 프로젝트 초기화합니다.

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 파일 채웁니다.

3

프로젝트 루트에서 다음 명령을 실행 MongoDB Node.js 운전자 설치합니다.

npm install mongodb

이 명령은 프로젝트 에 운전자 추가하고 package.json 에 기록하여 배포 때 운전자 사용할 수 있도록 합니다.

4

src/functions/GetMovies.js 를 열고 해당 내용을 다음 코드로 바꿉니다.

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 파일 에 다음 코드를 추가합니다.

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 설명서에서 연결 문자열 구성을 참조하세요.

5

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 응답을 반환합니다.

6

프로젝트 루트에서 다음 명령을 실행 함수를 시작합니다.

func start

서버 시작되면 CLI 에 함수의 로컬 URL 표시됩니다. 브라우저에서 http://localhost:7071/api/GetMovies (으)로 이동하거나 cURL 또는 Postman과 같은 도구를 사용하여 요청 보냅니다.

참고

서버 시작되었지만 데이터를 조회 할 수 없는 경우 로컬 IP 주소 Atlas 네트워크 액세스 목록에 포함되어 있는지 확인하세요. 프로덕션용으로 구성한 Azure 데이터 센터 IP 규칙은 로컬에서 테스트할 때는 적용 되지 않습니다. 자세한 내용은 IP 액세스 목록 항목 구성을 참조하세요.

7

다음 명령을 실행 하여 각 자리 표시자를 실제 값으로 바꿔 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 문서에서 액세스 키로 작업을 참조하세요.

이 튜토리얼에서 다루는 개념에 대해 자세히 학습 다음 리소스를 참조하세요.

돌아가기

Vercel에 애플리케이션 배포

이 페이지의 내용