그럴듯한 개발 블로그
Published 2024. 5. 22. 12:48
서버리스 nextjs <frontend>/next.js
반응형

겁나 싼 서버리스로 nextjs서버를 돌리면 어떻게 될까?

장점

  1. 자동 확장성: 서버리스 아키텍처는 자동으로 확장된다. 트래픽 증가 시 Lambda 함수가 자동으로 더 많은 인스턴스를 실행하여 요청을 처리한다.
  2. 관리 부담 감소: 서버를 직접 관리할 필요가 없으므로, 인프라 관리에 대한 부담이 줄어든다. 이는 운영 및 유지보수 작업을 줄여준다.
  3. 비용 효율성: 사용한 만큼만 비용을 지불하는 Pay-as-you-go 모델을 사용한다. 트래픽이 적을 때 비용이 절감될 수 있다.
  4. 빠른 배포: 서버리스 환경에서는 애플리케이션을 빠르게 배포하고 업데이트할 수 있다. 이는 개발 속도를 높이는 데 도움이 된다.
  5. 무중단 배포: 새로운 코드를 배포할 때 서비스 중단 없이 배포할 수 있다.

단점

파란색 글자: 솔루션

  1. 콜드 스타트: Lambda 함수는 비활성 상태에서 활성화될 때 초기 지연(콜드 스타트)이 발생할 수 있습니다. 이는 사용자 경험에 영향을 미칠 수 있다.
    비용절감++ 초기로딩-- 을 SSG로 보완할 수 있습니다. static rendering된 파일은 S3버킷에 넣어 두어 서빙하면 된다.
  2. 제한된 실행 시간: AWS Lambda에는 실행 시간이 제한되어 있다(기본 최대 15분). 장시간 실행되는 작업에는 적합하지 않다.
    html js서빙하는 웹서버인 nextjs서버의 경우 괜찮다. 어차피 SPA내려받은 이후엔 백엔드 엔드 포인트와 통신한다(첫 서빙 이후 프론트서버는 클라이언트와 통신 X)
  3. 상태 저장 문제: Lambda는 무상태 함수로 설계되어 있다. 따라서 애플리케이션 상태를 유지하려면 외부 스토리지를 사용해야 한다.
    서버fetch 캐싱을 못한다. redis같은 인메모리디비에 캐싱해야한다.
  4. 정적파일 서빙: 서버리스로 프론트서버를 돌리게 되면 세션(서버리스함수의 생명주기) 유지기간이 15분으로 제한된다. 때문에 브라우저에서 15분이 경과한 후 정적파일 요청을 할 경우 이미 세션이 죽어있다. 때문에 또 새로운 세션이 열리게 되면서 콜드스타트비용이 추가된다.
    때문에 정적파일을 cdn으로 호스팅하면 됩니다. 이는 새로운 서버리스 함수를 트리거하지 않는다.
  5. client side routing: nextjs는 자동 code splitting을 지원합니다. 덕분에 초기로딩 js번들사이즈를 줄일 수 있다. 때문에 client side routing이 일어났을 경우 MPA처럼 해당 페이지에 대한 정보를 nextjs서버에서 불러온다. SPA인 nextjs앱 내부에서 라우팅이 일어나는거니 전체 재렌더링은 일어나지 않지만 routing이 앱 내부에서가 아닌 서버와 통신해서 일어나므로 서버리스 환경에서는 콜드스타트로 인한 지연시간이 더 생긴다.
    적절히 서버리스nextjs의 warm-time(살아있는 시간)을 조절하면 된다.

싸게싸게 서버 돌리고 싶을때 쓰도록 하자

대시보드 같은 페이지를 구성할 때 쓰면 좋겠다.

반응형
profile

그럴듯한 개발 블로그

@donghyk2

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!