서버리스와 Next.js에서 api 라우트

SammyJung·2023년 5월 14일
0

서버리스란?

서버리스(Serverless) 아키텍처는 서버 인프라를 프로비저닝하거나 관리하지 않고도 어플리케이션을 배포할 수 있도록 해주는 아키텍처입니다. 이번에는 Next.js에서 서버리스 아키텍처를 이용하여 API 라우팅을 구현하는 방법에 대해 알아보겠습니다.

Next.js에서 서버리스 함수(Serverless Function)를 이용하여 API 라우팅을 구현할 수 있습니다. 서버리스 함수는 필요한 경우에만 호출되며, 배포, 확장 및 유지 관리가 쉽습니다. AWS Lambda, Google Cloud Functions 및 Microsoft Azure Functions와 같은 클라우드 프로바이더에서 서버리스 함수를 지원합니다.

Next.js에서 서버리스 함수를 사용하기 위해서는 next-serverless 패키지가 필요합니다. 이 패키지를 사용하면 API 라우팅을 위한 서버리스 함수를 생성할 수 있습니다.

예를 들어, 다음과 같은 구조로 폴더를 생성합니다

- pages/
  - api/
    - hello.js

그리고 hello.js 파일 내부에 다음과 같은 코드를 작성합니다.

export default (req, res) => {
  res.status(200).json({ message: 'Hello, World!' });
};

이제 next build 명령어를 실행하여 어플리케이션을 빌드합니다. 그 다음, next export 명령어를 사용하여 정적 파일로 어플리케이션을 빌드합니다.

빌드된 어플리케이션을 호스팅하고 있는 곳에서 hello.json API 엔드포인트에 접속하면 "Hello, World!" 메시지를 확인할 수 있습니다.

서버리스 함수를 이용하여 API 라우팅을 구현하는 것은 다양한 이점이 있습니다. 서버리스 함수를 이용하면 확장성과 유지 관리성이 높아지며, 비용도 절감할 수 있습니다.

장점

  • 1) 유연성과 확장성
    서버리스 아키텍처는 필요한 경우에만 함수를 실행하므로, 서버를 유지 관리할 필요가 없습니다. 따라서 서비스를 더 유연하게 확장할 수 있습니다.

  • 2) 높은 가용성
    서버리스 아키텍처는 매우 높은 가용성을 제공합니다. 함수는 여러 지역에서 실행되며, 클라우드 프로바이더에서 자동으로 백업 및 복구를 수행합니다.

  • 3) 빠른 개발 속도
    서버리스 아키텍처는 서버 인프라를 관리하지 않으므로 개발 속도가 빨라집니다. 함수는 개별적으로 작성되며, 코드를 빠르게 테스트하고 배포할 수 있습니다.

  • 4) 저렴한 비용
    서버리스 아키텍처는 사용한 만큼만 비용이 청구됩니다. 따라서 서버 인프라를 관리하는 전통적인 방법보다 훨씬 저렴합니다.

  • 5) 높은 보안성
    서버리스 아키텍처는 클라우드 프로바이더에서 자동으로 보안 업데이트를 제공하므로, 보안성이 높아집니다. 또한 함수는 서버에서 분리되어 있으므로, 서버 위협에 대한 영향이 줄어듭니다.

  • 6) 높은 성능
    서버리스 아키텍처는 함수를 여러 지역에서 실행하므로, 더 빠른 성능을 제공할 수 있습니다. 또한 함수는 필요한 경우에만 실행되므로, 자원이 효율적으로 사용됩니다.

이러한 장점들은 서버리스 아키텍처를 사용할 때 많은 이점을 제공합니다

단점

서버리스(Serverless) 아키텍처는 많은 이점을 제공하지만, 몇 가지 단점도 있습니다.

  • 1) Cold Start 문제
    서버리스 함수는 필요한 경우에만 실행되지만, 처음 실행될 때는 초기화에 시간이 걸립니다. 이를 "Cold Start"라고 합니다. Cold Start는 함수의 응답 시간을 늘릴 수 있으며, 일부 서비스에서는 성능 문제를 유발할 수 있습니다.

  • 2) 제한된 실행 시간
    서버리스 함수는 실행 시간이 제한되어 있습니다. 대부분의 클라우드 프로바이더에서는 15분 미만의 실행 시간만 허용합니다. 따라서 서버리스 함수에서 오랜 시간이 소요되는 작업을 수행할 수 없습니다.

  • 3) 제한된 로컬 스토리지
    서버리스 아키텍처에서는 로컬 스토리지를 사용할 수 있지만, 제한적입니다. 일부 클라우드 프로바이더에서는 로컬 스토리지의 크기와 수명이 제한됩니다.

  • 4) 비용
    서버리스 아키텍처는 사용한 만큼만 비용이 청구됩니다. 하지만 함수가 자주 호출되거나 긴 실행 시간을 가질 경우 비용이 높아질 수 있습니다.

  • 5) 제한된 지원
    서버리스 아키텍처는 비교적 새로운 기술입니다. 따라서 일부 클라우드 프로바이더에서는 아직 지원되지 않는 기능이 있을 수 있습니다.

API 라우팅 하기

next js 에서 API route란 클라이언트 측 JavaScript가 아닌 서버에서 실행되는 함수입니다. Next.js에서 API 라우팅은 "pages/api" 폴더 내에 작성됩니다. 이 폴더 내의 파일들은 자동으로 서버에서 실행 가능한 API 엔드포인트가 됩니다.

API 라우트에서는 req와 res 객체를 사용하여 HTTP 요청을 처리하고 응답할 수 있습니다. req 객체는 요청에 대한 정보가 포함되어 있으며, res 객체는 응답을 설정하는 데 사용됩니다.

API 라우트에서 데이터베이스와 상호작용하려면, 데이터베이스 연결을 설정하고 해당 모듈을 API 라우트에서 가져와 사용할 수 있습니다.

예를 들어 MongoDB를 사용한다면, 다음과 같은 방식으로 API 라우트에서 MongoDB를 사용할 수 있습니다.

import { connectToDatabase } from '../../utils/mongodb';

export default async function handler(req, res) {
  const { db } = await connectToDatabase();

  const data = await db.collection('collection_name').find({}).toArray();

  res.json(data);
}

마지막으로, API 라우트에서는 보안과 인증을 적용할 수 있습니다. 예를 들어, API 라우트에서 로그인이 필요한 경우 next-auth 패키지를 사용하여 인증을 구현할 수 있습니다.

이렇게 API 라우트를 사용하면 Next.js 어플리케이션에서 외부 데이터를 가져오거나 데이터베이스와 상호작용할 수 있습니다.

next.js 공식문서의 api 라우트 부분을 참고 하여 작성했습니다.

링크텍스트

더 궁금한 부분에 대해서는 원문을 참고하세요!

profile
안녕하세요! 프론트엔드 개발자 새미입니다:D

0개의 댓글