Azure Functions를 사용하여 Node.js 서버리스 솔루션 개발

Azure Functions가 제공하는 서버리스 코드 인프라로 응답성이 뛰어난 주문형 HTTP 엔드포인트를 만들 수 있습니다. 서버리스 앱은 다양한 이벤트에 대한 응답으로 실행되는 JavaScript 또는 TypeScript 코드로 구성됩니다.

함수는 다음을 제공합니다.

  • 웹 서비스 추상화 - 인프라가 아닌 코드에 집중합니다.

  • Azure 서비스와 통합 - 이벤트를 사용하여 Azure 서비스 내부 또는 외부로 작업 트리거

  • JavaScript 패키지와 통합 - 서버리스 코드와 함께 즐겨 찾는 npm 패키지 사용

  • 샘플의 Azure 서버리스 커뮤니티 라이브러리

함수 리소스란?

Azure Function 리소스는 단일 Azure 지리적 위치에 있는 모든 관련 함수에 대한 논리 단위입니다. 리소스는 서로 독립적이거나 입력 또는 출력 바인딩과 관련될 수 있는 단일 함수 또는 여러 함수를 포함할 수 있습니다. 여러 일반적인 함수 중에서 선택하거나 직접 만들 수 있습니다.

함수 리소스 설정에는 환경 변수, 인증, 로깅 및 CORS를 비롯한 일반적인 서버리스 구성이 포함됩니다.

지속성 상태 저장 함수

Durable Functions는 상태를 유지하거나 Azure에서 장기 실행 함수를 관리합니다. JavaScript에서 첫 번째 지속성 함수를 만듭니다.

정적 웹앱에는 함수가 포함됩니다.

서버리스 API가 필요한 정적 프런트 엔드 클라이언트 애플리케이션(예: Angular, React 또는 Vue)을 개발할 때 함수와 함께 정적 웹앱을 사용하여 둘 다 함께 묶습니다.

클라이언트 앱에서 API로 프록시

정적 웹앱을 사용하여 API를 배포하려는 경우 클라이언트 애플리케이션의 API 호출을 프록시할 필요가 없습니다. 프록시는 로컬 및 원격 개발을 포함하여 사용자를 위해 설정됩니다.

정적 웹앱 및 Azure Functions 를 사용하여 로컬로 개발하는 경우 Azure Static Web App CLI 는 로컬 프록시를 제공합니다.

Azure Function에 대해 구성해야 하는 일반적인 보안 설정

Azure Function 보안을 유지하려면 다음과 같은 일반적인 설정을 구성해야 합니다.

  • 구성 설정
    • 구성 설정 - 보안에 영향을 주지 않는 설정에 대한 애플리케이션 설정을 만듭니다.
    • 비밀 및 키 - 보안에 영향을 주는 모든 설정에 대해 Azure Key Vault를 만들고 Key Vault에서 해당 설정을 가져옵니다.
    • 플랫폼 설정의 FTP 상태 - 기본적으로 모두 허용됩니다. 보안을 향상하려면 FTPS만 선택하거나 FTP를 완전히 사용하지 않도록 설정해야 합니다.
  • API CORS - 클라이언트 도메인을 구성합니다. 모든 작업을 나타내는 기본 사용하지 *마세요.
  • HTTPS에 대한 TLS/SSL 설정 - 기본적으로 API는 HTTP 및 HTTPS 요청을 수락합니다. TLS/SSL 설정에서 HTTPS만을 사용합니다. 함수 앱은 보안 하위 기본 호스트되므로 즉시(함께https) 사용할 수 있으며 할 일기본 이름 구매 및 준비가 될 때까지 할 일기본 인증서 사용을 지연할 수 있습니다.
  • 배포 슬롯 - 해당 슬롯과 같은 stage 배포 슬롯을 preflight 만들고 푸시합니다. 준비가 되면 이 스테이지 슬롯을 프로덕션으로 전환합니다. 수동으로 프로덕션에 푸시하는 습관을 품지 마세요. 코드 베이스는 슬롯에 있는 버전 또는 커밋을 나타낼 수 있어야 합니다.

Azure Functions 개발을 위한 필수 구성 요소

HTTP 요청에 대한 간단한 JavaScript 함수

함수는 요청 및 컨텍스트 정보를 사용하여 내보낸 비동기 함수입니다. Azure Portal의 다음과 같은 부분 스크린샷은 함수 코드를 보여 줍니다.

import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions";

export async function status(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    context.log(`Http function processed request for url "${request.url}"`);

    return {
        status: 200,
        jsonBody: {
            env: process.env
        }
    };
};

app.http('status', {
    route: "status",
    methods: ['GET'],
    authLevel: 'anonymous',
    handler: status
});

Visual Studio Code 및 확장을 사용하여 로컬로 함수 개발

Visual Studio Code를 사용하여 첫 번째 함수를 만듭니다. Visual Studio Code는 Azure Functions 확장을 사용하여 많은 세부 사항을 간소화합니다.

이 확장은 일반적인 템플릿을 사용하여 JavaScript 및 TypeScript 함수를 만드는 데 도움이 됩니다.

다른 Azure 서비스와 통합

서버리스 함수는 필요한 코드에만 집중할 수 있도록 서버 구성 및 관리의 대부분을 제거합니다.

  • 하위 코드 함수: Azure Functions를 사용하면 다른 Azure 서비스에 의해 트리거되거나 트리거 바인딩을 사용하여 다른 Azure 서비스에 출력되는 함수를 만들 수 있습니다.
  • 상위 코드 함수: 더 많은 제어를 위해 Azure SDK를 사용하여 다른 Azure 서비스를 조정하고 제어합니다.

다음 단계

다음 표를 사용하여 Node.js Azure Functions에 대해 자세히 알아보세요.

배우기에 샘플
Contoso 부동산이란? Contoso 부동산
Azure Functions를 사용하여 서버리스 API 빌드 MicrosoftDocs/mslearn-build-api-azure-functions
Node.js Express API를 서버리스 Azure Functions API로 리팩터링 MicrosoftDocs/mslearn-module-shifting-nodejs-express-api-to-serverless
Azure Functions 및 Blob Storage를 사용하여 파일 업로드 및 분석 Azure-Samples/msdocs-storage-bind-function-service