Express.js에서 Azure Functions로 전환
Express.js는 웹 개발자들에게 가장 인기 있는 Node.js 프레임워크 중 하나이며 API 엔드포인트를 제공하는 앱 빌드에 매우 적합합니다.
코드를 서버리스 아키텍처로 마이그레이션할 때 Express.js 엔드포인트를 리팩터링하면 다음 영역에 영향을 줍니다.
미들웨어: Express.js는 강력한 미들웨어 컬렉션을 제공합니다. Azure Functions 및 Azure API Management 기능을 고려하면 많은 미들웨어 모듈이 더 이상 필요하지 않습니다. 엔드포인트를 마이그레이션하기 전에 필수 미들웨어에서 처리한 모든 논리를 복제하거나 바꿀 수 있는지 확인하세요.
상이한 API: 요청 및 응답을 처리하는 데 사용되는 API는 Azure Functions와 Express.js에 따라 달라집니다. 다음 예에서는 필요한 변경 사항을 자세히 설명합니다.
기본 경로: 기본적으로 Azure Functions 엔드포인트는
api
경로 아래에 표시됩니다. 회람 규칙은 host.json 파일에서routePrefix
을 통해 구성할 수 있습니다구성 및 규칙: 함수 앱은 function.json 파일을 사용하여 HTTP 동사를 정의하고 보안 정책을 정의하며 함수의 입력 및 출력을 구성할 수 있습니다. 기본적으로 함수 파일이 포함된 폴더 이름은 엔드포이늩 이름을 정의하지만 function.json 파일의
route
속성을 통해 이름을 변경할 수 있습니다.
팁
대화형 튜토리얼을 통해 Azure Functions을 사용하여 서버리스 APIs로 Node.js 및 Express APIs의 리팩터링에 대해 자세히 알아보세요.
예시
Express.js
다음 예에서는 일반적인 Express.js GET
엔드포인트를 보여 줍니다.
// server.js
app.get('/hello', (req, res) => {
try {
res.send("Success!");
} catch(error) {
const err = JSON.stringify(error);
res.status(500).send(`Request error. ${err}`);
}
});
GET
요청이 /hello
에 전송되면 Success
가 포함된 HTTP 200
응답이 반환됩니다. 엔드포인트에 오류가 발생하는 경우 응답은 오류 세부 정보를 포함하는 HTTP 500
입니다.
Azure 기능
Azure Functions는 구성 및 코드 파일을 각 함수에 대한 단일 폴더로 구성합니다. 기본적으로 폴더 이름은 함수 이름을 지정합니다.
예를 들어 hello
함수에는 다음과 같은 파일을 포함하는 폴더가 있습니다.
| - hello
| - function.json
| - index.js
다음 예에서는 위의 Express.js 엔드포인트와 동일한 결과를 구현하지만 Azure Functions를 사용합니다.
// hello/index.js
module.exports = async function (context, req) {
try {
context.res = { body: "Success!" };
} catch(error) {
const err = JSON.stringify(error);
context.res = {
status: 500,
body: `Request error. ${err}`
};
}
};
함수로 이동할 때 다음 변경 내용이 적용됩니다.
모듈: 함수 코드가 JavaScript 모듈로 구현되었습니다.
컨텍스트 및 응답 개체:
context
를 사용하면 함수의 런타임과 통신할 수 있습니다. 컨텍스트에서 요청 데이터를 읽고 함수의 응답을 설정할 수 있습니다. 동기 코드에서는 실행을 완료하기 위해 1.xcontext.done()
을 호출해야 하지만 2.x+async
함수는 암시적으로 요청을 해결합니다.명명 규칙: Azure Functions 파일을 포함하는 데 사용되는 폴더 이름은 기본적으로 엔드포인트 이름으로 사용됩니다(이는 function.json에서 재정의할 수 있음).
구성:
POST
또는PUT
과 같은 function.json 파일에서 HTTP 동사를 정의합니다.
다음 function.json 파일에는 해당 함수에 대한 구성 정보가 포함되어 있습니다.
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": ["get"]
},
{
"type": "http",
"direction": "out",
"name": "res"
}
]
}
methods
배열에서 get
을 정의하면 HTTP GET
요청에 이 함수를 사용할 수 있습니다. API에서 지원 POST
요청을 수락하려면 배열에서 post
를 추가할 수 있습니다.
다음 단계
- 대화형 튜토리얼을 통해 Azure Functions를 사용하여 서버리스 APIs로 Node.js 및 Express APIs의 리팩터링에 대해 자세히 알아보세요.