Node.js로 서버리스를 실행하는 방법 알아보기
소개
대부분의 웹 애플리케이션은 유지 관리가 필요한 서버에서 실행됩니다. 오늘날 소프트웨어 엔지니어링 팀에는 이러한 서버를 관리, 프로비저닝 및 유지 관리하는 데 도움이 되는 전담 DevOps/인프라 엔지니어가 있습니다. 관련된 문제로 인해 대체 솔루션을 추진해야 할 필요성이 대두되었습니다. 서버리스 애플리케이션은 이와 관련하여 빛을 발합니다.
프레임워크로서 마이크로 서비스 및 전체 스택 기반 애플리케이션을 모두 구축하는 데 도움이 되며 대규모 서버 설정, 유지 관리 및 구성을 위한 프로비저닝 프로세스에서 모든 규모의 조직을 자유롭게 합니다.
소비한 정확한 리소스에 대해 비용을 지불하는 것이 어떻습니까? 프레임워크로서의 서버리스의 장점은 전체 인프라를 실행하는 데 필요한 리소스에 대해 동일한 금액만 지불하면 된다는 것입니다.
서버리스 코드는 네트워크 이벤트(HTTP 요청/응답 주기)와 같은 이벤트 발생에 의해 트리거되거나 실행되는 상태 비저장 기능입니다. 서버리스 애플리케이션의 경우 특정 이벤트에 연결된 기능 컨텍스트는 해당 이벤트가 완료되기 전에 실행되어야 합니다.
여기서의 아이디어는 상태가 여러 또는 다른 함수 호출이나 컨텍스트에서 지속되지 않는다는 것입니다. 또한 함수 호출에 의해 트리거된 다른 모든 새 이벤트는 자동으로 파생된 새 컨테이너 인스턴스에서 처리됩니다.
걱정하지 마세요. 나중에 애플리케이션을 구체화할 때 이 점을 이해하게 될 것입니다.
장점
서버리스 애플리케이션의 경우 코드 조각 — 일반적으로 다음과 같은 기능 람다 예를 들어 — 트리거된 이벤트의 종류에 따라 실행됩니다. 이 경우 이러한 이벤트를 제공하기 위해 리소스가 즉시 할당됩니다.
이 경우 리소스 할당은 대부분 수신 또는 동시 이벤트 또는 요청의 양과 관련이 있습니다. 이는 이러한 서비스를 제공하는 클라우드 제공업체(AWS, GCP, Azure 등)에서 단독으로 결정한 후 처리/제공합니다.
서버리스 애플리케이션의 장점은 다음과 같습니다.
- 서버리스 기반 애플리케이션은 서비스 요청을 처리하는 데 필요한 리소스 수를 기반으로 필요에 따라 확장됩니다.
- 동시 요청은 새 컨테이너 인스턴스에서 제거됩니다.
- 보안 업데이트 또는 패치가 당사를 위해 처리됩니다.
- 다른 모든 기술적 세부 사항은 해당 클라우드 공급자가 처리하므로 엔지니어로서 핵심 애플리케이션 유지 관리 및 기능 구현에 더 집중할 수 있습니다.
- 단일 명령을 통해 더 빠른 배포 주기 실행, |_+_|
- 서버리스는 클라우드 인프라에 대한 추상화를 제공합니다.
- 가장 중요한 것은 서버 관리가 당사를 대신하여 처리되기 때문에 소비된 정확한 리소스에 대한 비용을 지불하는 것입니다.
서버리스 애플리케이션의 상태 비저장 특성으로 인해 콜드 스타트가 발생하여 시간 초과 문제가 발생할 수 있습니다. 이는 함수가 서로 다른 컨텍스트 또는 환경을 가진 격리된 컨테이너(이벤트에 의해 분리되거나 트리거됨) 내에서 실행되기 때문입니다. 이로 인해 응용 프로그램은 처음에 응답 시간, 처리량 및 대기 시간이 느려질 수 있습니다.
콜드 스타트는 한 자리에 오랫동안 공회전 상태를 유지한 후 차량에 시동을 거는 것과 유사합니다. 콜드 스타트 문제는 요청을 처리하는 데 사용되는 네트워크의 지연과 관련이 있습니다. 클라우드 서비스 제공자; 코드 조각을 실행하거나 실행하는 데 필요한 함수 번들의 크기(최적화되지 않은 코드라도) 등등.
이러한 문제를 해결하기 위해 기능을 따뜻하게 유지하는 방법이 있습니다. 예를 들어 일반적으로 컨테이너 인스턴스를 일정 시간 동안 계속 실행하여 이벤트 호출을 캐시할 수 있습니다. 또한 다음과 같은 오픈 소스 라이브러리를 활용할 수 있습니다. 서버리스 웹팩 이러한 종류의 도전을 처리합니다. webpack은 기능을 번들링하고 최적화하여 경량화하는 데 도움이 됩니다.
이 자습서에서는 서버리스, 마이크로 서비스 기반 애플리케이션을 구축하는 방법을 살펴보겠습니다. 시작하기 전에 시스템에 설치해야 하는 요구 사항이나 도구를 살펴보겠습니다.
전제 조건
이 튜토리얼을 쉽게 따라 하려면 다음을 수행해야 합니다.
- 시스템에 Node 및 npm이 설치되어 있어야 합니다.
- 명령줄 사용에 대한 기본 지식이 있어야 합니다.
서버리스로 개발을 시작하려면 서버리스 전용 명령을 실행할 수 있도록 CLI를 설치해야 합니다. 설치하려면 다음을 실행할 수 있습니다.
sls deploy
이 자습서의 앞부분에서 서버리스 코드가 상태 비저장 함수로 실행되는 방법을 설명했습니다. 아래 예를 살펴보십시오.
$ npm install serverless -g
위의 서버리스 기능이 어떻게 실행되는지 살펴보겠습니다. |_+_| const는 서버리스 함수의 이름입니다.
|_+_| 함수 인수 중 하나인 객체는 함수를 트리거하고 코드 실행을 시작하게 하는 이벤트 종류에 대한 정보를 나타냅니다.
|_+_| 객체는 우리의 기능이 실행될 환경에 대한 정보를 포함합니다(이것은 일반적으로 우리를 대신하여 클라우드 제공자가 처리합니다).
마지막으로 |_+_| 함수는 일반적으로 사용자 이벤트의 요청을 기반으로 응답 또는 오류 개체를 반환하는 작업을 처리합니다.
이 자습서에서는 주요 초점이 아니기 때문에 다루지 않을 다른 중요한 절차 및 설정 프로세스가 있습니다. 그러나 서버리스 기반 응용 프로그램의 배포를 처리할 때 알고 있어야 하는 매우 중요합니다. 여기에는 다음이 포함됩니다.
- AWS 계정 만들기 — 무료 계정을 만들려면 다음을 확인하세요. 링크
- 사용자 역할/정책에 대한 ID 및 액세스 관리(IAM) 설정
- AWS CLI 구성
- 데이터베이스 등과 같이 필요할 수 있는 다른 AWS 서비스 구성
위에서 볼 수 있듯이 우리는 특히 AWS를 클라우드 서비스 공급자로 언급하고 있습니다. AWS 람다 함수 그리고 API 게이트웨이 백엔드 API를 생성합니다.
또한 다음 중 하나를 사용할 수도 있습니다. 하늘빛 또는 GCP 위의 사용 사례의 경우.
마이크로서비스 기반 서버리스 애플리케이션 구축
앞서 언급했듯이 지역 개발을 위한 설정을 시작하겠습니다. 이전에 서버리스 CLI를 전역적으로 설치하지 않은 경우 지금 설치할 수 있습니다.
const handlerFunction = (event, context, callback) => { // handle business logic code here based on the kind of request // handle callback here callback(error, result) } module.exports = handlerFunction;
프레임워크로서의 서버리스는 엔지니어로서 어려운 부분을 처리하는 데 도움이 됩니다. 우리가 해야 할 일은 서버리스 구현을 지원하는 모든 언어에서 상태 비저장 함수로 잘 설계된 코드를 작성하는 것입니다.
pla 코인 가격 예측
이제 시작하려면 새 디렉토리를 만들고 |_+_|라고 부를 수 있습니다.
handleFunction
또한 데이터베이스, 스토리지 메커니즘 및 기타 필요한 구성과 같이 해당 클라우드 공급자가 제공하는 기타 서비스를 설정할 수도 있습니다. 이 튜토리얼에서는 이미 친숙한 MongoDB를 사용할 것입니다.
또한 다음을 사용하여 API를 설정합니다. 서버리스-http 패키지. 이 패키지를 사용하면 API가 우리에게도 익숙한 Express 앱과 유사하게 보일 수 있습니다.
계속해서 서버리스 상용구 애플리케이션을 부트스트랩해 보겠습니다. 터미널에서 다음과 같은 간단한 명령을 실행하면 됩니다.
event
아래와 같은 템플릿 파일을 사용하여 다음과 같은 출력을 얻을 수 있습니다.
그림 1: serverless create –template 명령을 실행한 후의 출력.
그림 2: 위의 명령을 실행한 후의 폴더 계층 구조.
스타터가 생성한 파일을 살펴보면 |_+_| 파일은 전체 응용 프로그램을 구성하는 데 사용됩니다. 추가하려는 서비스의 종류와 응용 프로그램의 경로 및 컨트롤러에 대한 경로를 구성하는 방법입니다. |_+_| 파일에는 코드 로직을 실행하기 위해 클라우드 공급자에 배포될 실제 기능이 포함되어 있습니다.
팁: 실행할 수 있습니다 |_+_| 명령을 사용하여 명령줄에서 해당 설명과 함께 사용 가능한 명령 목록을 봅니다.
계속해서 응용 프로그램을 구체화해 보겠습니다. 실행 |_+_| |__+_|를 생성하는 명령 파일을 만든 다음 다른 종속성을 추가하기 시작합니다.
설치부터 시작하겠습니다 서버리스 오프라인 플러그인. 이 패키지는 API 게이트웨이의 환경을 로컬로 미러링하며 작업하면서 애플리케이션을 신속하게 테스트하는 데 도움이 됩니다. |_+_|도 설치해야 합니다. 환경 변수를 설정하는 데 사용할 플러그인입니다.
개발자 종속성으로 설치하려면 다음을 실행할 수 있습니다.
context
설치가 완료되면 |_+_|에 추가할 수 있습니다. 파일.
callback
이제 앱에 필요한 다른 패키지를 설치해 보겠습니다. body-parser, mongoose, Express, serverless-http, uuid를 설치할 것입니다. 다음을 실행하여 수행할 수 있습니다.
$ npm i serverless -g
설치 과정이 끝나면 |_+_| 파일은 다음과 같아야 합니다.
serveless-example
이제 필요한 모든 폴더와 파일을 만들어 보겠습니다. 마이크로서비스 기반 애플리케이션의 경우 |_+_|, |_+_| 및 |_+_| 디렉토리. 그런 다음 해당 디렉토리에 해당 파일을 생성할 수 있습니다. Node.js에서 서버리스 마이크로서비스 기반 애플리케이션을 구축하는 방법을 보여주기 위해 제품 API를 구축할 예정입니다.
이러한 폴더를 만들려면 다음 명령을 실행할 수 있습니다.
$ mkdir serverless-example $ cd serverless-example
그런 다음 디렉토리를 탐색하고 이름이 |_+_|인 해당 파일을 생성할 수 있습니다. 그 후에 우리는 |_+_| 환경 변수를 저장할 파일입니다. 마지막으로 머신에서 실행되는 로컬 mongo 인스턴스에 대한 데이터베이스 연결을 포함하는 데이터베이스 구성 파일을 생성할 수 있습니다. 이 자습서에서는 mongoose를 ORM으로 사용하여 MongoDB에 연결합니다.
다음은 폴더 구조가 완료된 후의 모습입니다.
그림 3: 현재 폴더 구조.
이제 코드 작성을 시작할 수 있습니다. 내부 |_+_| 파일에서 데이터베이스 인스턴스에 로컬로 연결하는 방법을 보여줍니다.
비주얼 스튜디오 드라큘라 테마
serverless create --template aws-nodejs
앞서 언급했듯이 몽구스를 사용하여 우리의 MongoDB에 연결 장소 상에서. 또한 |_+_|를 사용하여 MongoDB 연결 문자열에 액세스합니다. 패키지. |_+_| 형식을 보려면 |_+_| 파일.
그런 다음 |_+_| 내부에서 제품 스키마를 설정할 수 있습니다. 예배 규칙서. |_+_| 파일:
serverless.yml
그런 다음 계속해서 |_+_| 파일 |_+_| 예배 규칙서. 여기의 논리에는 |_+_| 데이터베이스와 대화합니다. 기본적으로 CRUD 작업을 처리하는 방법입니다. 파일 내용을 자세히 살펴보겠습니다.
handler.js
위의 파일에서 데이터베이스와의 모든 상호 작용을 처리했습니다. 우리는 |_+_|, |_+_| 및 |_+_| MongoDB 메서드와 상호 작용합니다.
마지막으로 가장 중요한 부분에 도달할 수 있습니다. |_+_| 앱의 핵심 로직을 처리하는 파일입니다. 기본적으로 함수가 호출되는 방식을 처리합니다. |_+_|의 내용은 다음과 같습니다. 파일:
serverless help
|__+_|와 같은 필요한 모든 종속성을 가져옵니다. 패키지를 사용하여 일반 Express 애플리케이션처럼 서버리스 애플리케이션을 설정할 수 있습니다. 물론 Express 패키지도 가져와서 Express 앱을 시작했습니다.
그런 다음 데이터베이스 연결과 |_+_| 파일. 이 파일은 새 제품 만들기, 데이터베이스에서 모든 제품 가져오기, |_+_|별로 제품 가져오기를 처리합니다. 마지막 줄에서 Express 앱을 serverless-http 패키지로 래핑하는 방법을 볼 수 있습니다.
마지막으로 |_+_| 파일은 완료 후 다음과 같아야 합니다.
npm init
앱과 필수 서비스 또는 플러그인을 구성했지만 더 큰 애플리케이션에서는 추가를 고려해야 할 다른 추가 서비스가 있을 수 있습니다. 보고 |_+_| config에서 컨트롤러 파일에 대한 참조를 얻고 모든 올바른 라우팅 경로를 설정할 수 있었던 방법을 확인할 수 있습니다.
이제 전체 설정이 완료되었으므로 앱을 시작하고 API를 테스트해 보겠습니다. 그렇게 하려면 |_+_|를 실행할 수 있습니다. 우리 터미널에서. 그렇게 하면 다음과 같은 출력을 얻습니다.
그림 4: npm start 명령을 실행할 때 출력을 보여줍니다.
여기에서 모든 경로와 환경 변수가 터미널에 표시되는 것을 볼 수 있습니다. 이제 API를 테스트할 수 있습니다. 이 튜토리얼에서는 POSTMAN을 사용하여 테스트합니다. 새로운 제품을 만들어 봅시다.
그림 5: POSTMAN을 사용하여 새 제품을 만드는 방법을 보여줍니다.
제쳐두고, 우리는 더 많은 제품을 만들고 다른 끝점도 시험해 볼 수 있습니다. 위의 튜토리얼에 대한 코드 저장소를 찾을 수 있습니다 여기 GitHub에서 .
결론
서버리스 애플리케이션이 계속되었습니다. 우리가 해야 할 일은 단일 명령으로 기능을 작성하고 배포하는 것뿐입니다. 이 자습서에서 다루지 않은 다른 사전 구성 옵션이 있지만 서버리스 기술을 활용하여 최소한의 확장 가능한 마이크로 서비스 기반 애플리케이션을 성공적으로 구축할 수 있었습니다.
서버리스 애플리케이션을 구축하는 다른 방법이 있지만 여기에서 우리의 접근 방식의 장점은 프로젝트의 현재 구조에 매우 익숙하기 때문에 기존 익스프레스 애플리케이션을 서버리스 애플리케이션으로 신속하게 변환할 수 있다는 것입니다.
이 설정을 시도하고 아래 의견 섹션에 질문이나 피드백이 있으면 알려주십시오. 감사합니다!
#서버리스 #nodejs #마이크로서비스