본문으로 건너뛰기

안동민 개발노트

본문 시작

JAMstack 아키텍처 이해

사전 생성 마크업·CDN·분리된 API로 구성되는 JAMstack의 성능·보안·배포 특성과 적용 한계를 판단합니다.

기존 웹 아키텍처는 서버에서 동적으로 HTML을 생성하고 데이터베이스와 상호작용하는 복잡한 구조인 경우가 많았습니다(예: 전통적인 LAMP 스택, MERN 스택).

이 방식은 유연하고 강력하지만, 성능 병목과 보안 취약점, 서버 관리 복잡성, 확장성 문제를 함께 안고 갑니다.

JAMstack은 정적 생성, CDN 캐시, API 분리, 배포 단순성을 기준으로 웹 구조를 나누는 아키텍처입니다.

JAMstack은 JavaScript, API, Markup의 약자로, 클라이언트 측 JavaScript와 재사용 가능한 API, 사전 빌드된 마크업을 중심으로 웹을 구성합니다.

이번 장에서는 JAMstack의 기본 개념과 구성 요소, 그리고 실무에서 체감되는 핵심 이점을 중심으로 학습합니다.

이를 통해 정적 사이트 생성기(Static Site Generator), Headless CMS, Serverless Functions 등 관련 기술을 이해하고, 더 효율적이고 안정적인 웹 서비스를 구축하는 방법을 배울 수 있습니다.

Jamstack 빌드·배포·런타임 아키텍처

ARCHITECTURE

Jamstack 빌드·배포·런타임 아키텍처

콘텐츠를 build 때 versioned static artifact로 만들어 CDN에 배포하는 경로와, 브라우저가 동적 API를 호출하는 요청 경로를 분리한다.

Jamstack 빌드·배포·런타임 아키텍처 Git과 CMS에서 build pipeline, static artifacts, CDN, browser로 이어지는 build and deploy path와 browser에서 API or serverless, server-side data and secrets로 이어지는 request path, webhook rebuild trigger를 표시한다. BUILD · DEPLOY PATH BROWSER REQUEST PATH content versioned build deploy cache hit enhancement/API server-only secret webhook → rebuild Git / CMS content · templates Build pipeline render · bundle · hash Static artifacts HTML · CSS · JS · assets CDN versioned edge cache Browser HTML first · enhance API / serverless auth · dynamic data Data + secrets server-side only

Build source

Git·CMS의 content와 template 변경이 webhook으로 versioned build를 시작한다.

Static artifacts

HTML·CSS·JS·asset에 content hash를 붙여 배포 단위를 고정한다.

CDN delivery

edge cache가 정적 파일을 제공하고 새 build는 새 version 또는 invalidation으로 전환한다.

Browser enhancement

초기 HTML을 받은 뒤 필요한 상호작용과 동적 data를 점진적으로 연결한다.

API / serverless

인증과 dynamic data 요청을 처리한다. secret은 browser bundle에 넣지 않는다.

Rebuild trigger

CMS publish나 Git change가 build를 다시 실행해 CDN 산출물을 교체한다.

  • build·deploy
  • webhook rebuild
  • versioned build

Jamstack은 “서버가 없다”는 뜻이 아니다. 정적 전달은 build 경로로, 인증·동적 data와 secret은 server-side 요청 경로로 분리한다.


JAMstack 이란?

JAMstack 아키텍처 이해에서는 실행 환경, 배포 구조, 사용자 경험 기준을 정리합니다.

JAMstackJavaScript, APIs, Markup의 약자로, 클라이언트 측 JavaScript, 재사용 가능한 API, 그리고 사전에 빌드된(pre-built) 마크업을 기반으로 웹 애플리케이션을 구축하는 아키텍처 패러다임입니다.

  • J (JavaScript)
    • 모든 동적인 기능은 클라이언트 측 JavaScript를 통해 처리됩니다.
    • React, Vue, Angular와 같은 프론트엔드 프레임워크나 바닐라 JavaScript를 사용하여 동적인 UI와 사용자 상호작용을 구현합니다.
  • A (APIs)
    • 데이터베이스 접근, 사용자 인증, 결제 처리 등 서버 측 로직이나 동적인 데이터가 필요한 기능은 재사용 가능한 API를 통해 구현합니다.
    • 이러한 API는 마이크로서비스 형태를 띠며, 서드파티 서비스(예: Stripe, Auth0), Headless CMS, 또는 Serverless Functions (AWS Lambda, Azure Functions, Google Cloud Functions) 등으로 제공됩니다.
  • M (Markup)
    • HTML, CSS와 같은 마크업은 웹사이트 배포 전에 사전 빌드(Pre-built) 됩니다.
    • 정적 사이트 생성기(Static Site Generator, SSG)를 사용하여 마크다운(Markdown) 파일이나 Headless CMS의 데이터를 기반으로 빌드 시점에 모든 페이지의 HTML 파일을 생성합니다.
    • 생성된 정적 파일들은 CDN(Content Delivery Network)에 배포됩니다.

JAMstack의 핵심 철학

JAMstack은 웹을 구성하는 요소들을 분리하고, 가능한 한 많은 작업을 빌드 시점에 처리하여 서버 측 렌더링(SSR)이나 동적 서버 처리의 의존성을 줄이는 것을 목표로 합니다.

이는 전통적인 LAMP 스택(Linux, Apache, MySQL, PHP/Python/Perl)이나 MERN 스택(MongoDB, Express.js, React, Node.js)과 같은 서버 중심의 아키텍처와 대조됩니다.


JAMstack의 주요 이점

JAMstack 아키텍처는 다음과 같은 핵심적인 장점을 제공합니다.

뛰어난 성능 (Performance)
  • 사전 빌드된 정적 파일: 서버에서 동적으로 페이지를 생성할 필요가 없으므로 응답 시간이 매우 빠릅니다.
  • CDN 배포: 전 세계 CDN 엣지 서버에 배포되어 사용자와 가장 가까운 곳에서 콘텐츠가 전송되므로, 로딩 시간이 단축됩니다.
  • 캐싱 효율: 정적 파일은 캐싱하기 매우 용이하여 브라우저 캐시 및 CDN 캐시를 최대한 활용할 수 있습니다.
향상된 보안 (Security)
  • 서버리스 아키텍처: 데이터베이스나 서버 측 애플리케이션 로직이 노출되지 않으므로, 전통적인 서버 해킹이나 데이터베이스 공격 위험이 현저히 줄어듭니다.
  • 공격 표면 감소: 공격자가 침투할 수 있는 서버 측 진입점이 최소화됩니다.
  • 써드파티 서비스 활용: 인증, 결제 등 민감한 기능은 전문 보안 업체에서 제공하는 API를 활용하여 보안 신뢰도를 높입니다.
뛰어난 확장성 (Scalability)
  • CDN 활용: 트래픽이 급증해도 CDN은 안정적으로 대규모 요청을 처리할 수 있으므로, 웹사이트가 다운될 가능성이 낮습니다.
  • 서버리스 함수: API가 서버리스 함수 형태로 제공될 경우, 필요에 따라 자동으로 스케일 아웃(Scale-out)되므로 트래픽 변화에 유연하게 대응합니다.
  • 데이터베이스 의존성 감소: 빌드 시점에 데이터가 패칭되거나, 클라이언트에서 직접 API를 호출하므로, 데이터베이스에 대한 동시 요청 부하가 줄어듭니다.
저렴한 비용 (Cost-effectiveness)
  • 정적 호스팅 비용 저렴: 대부분의 정적 호스팅 서비스(Netlify, Vercel, AWS S3 등)는 매우 저렴하거나 무료 티어를 제공합니다.
  • 서버 관리 불필요: 서버를 직접 관리하거나 유지보수할 필요가 없어 인프라 운영 비용이 절감됩니다.
  • API 비용은 사용량 기반: 필요한 API 호출에 대해서만 비용을 지불합니다.
개발자 경험 (Developer Experience)
  • 간소화된 배포: Git 기반 워크플로우(GitOps)를 통해 Git Push 한 번으로 자동으로 빌드 및 배포가 이루어집니다.
  • 프론트엔드 중심: 프론트엔드 개발자가 백엔드 지식 없이도 강력한 웹 애플리케이션을 구축할 수 있습니다.
  • 빠른 개발 주기: 빌드 및 배포가 빠르고 간단하여 개발 주기가 단축됩니다.

JAMstack의 핵심 기술 스택

JAMstack을 구현하기 위해 사용되는 주요 기술들은 다음과 같습니다.

정적 사이트 생성기

정적 사이트 생성기 (Static Site Generator, SSG)는 마크다운 파일, 데이터베이스, 또는 Headless CMS 등에서 데이터를 가져와 빌드 시점에 모든 HTML, CSS, JavaScript 파일을 생성합니다.

  • 대표적인 SSG
    • Next.js (Static Export): React 기반. 동적 라우팅, API 라우트 등 다양한 기능을 지원하며, SSG 외에 SSR, CSR도 지원하는 다재다능한 프레임워크입니다.
    • Astro: 여러 UI 프레임워크를 선택적으로 사용하고 정적 HTML을 우선 전송하는 콘텐츠 중심 프레임워크입니다.
    • Nuxt.js (Static Site Generation): Vue 기반. Next.js와 유사하게 SSG, SSR, CSR을 지원합니다.
    • Jekyll: Ruby 기반. 주로 블로그나 문서 사이트에 많이 사용됩니다.
    • Hugo: Go 기반. 매우 빠른 빌드 속도가 특징입니다.

Headless CMS

Headless CMS (콘텐츠 관리 시스템)는 콘텐츠를 관리하고 저장하지만, UI(프론트엔드) 부분은 제공하지 않고 API를 통해 콘텐츠를 제공하는 CMS입니다.

JAMstack 아키텍처에서 콘텐츠를 동적으로 관리하는 데 사용됩니다.

  • 대표적인 Headless CMS
    • Strapi
    • Contentful
    • Sanity
    • DatoCMS
    • Netlify CMS (Git 기반)

Serverless Functions

Serverless Functions (서버리스 함수)는 서버를 직접 관리할 필요 없이, 특정 이벤트에 반응하여 코드를 실행하는 함수입니다.

API 계층을 구축하는 데 사용됩니다.

  • 대표적인 Serverless Platforms
    • AWS Lambda
    • Azure Functions
    • Google Cloud Functions
    • Netlify Functions
    • Vercel Edge Functions

CDN

CDN (Content Delivery Network)은 사전 빌드된 정적 파일들을 사용자에게 가장 가까운 서버에서 제공하여 로딩 속도를 극대화합니다.

  • 대표적인 CDN Providers
    • Cloudflare
    • Amazon CloudFront
    • Fastly
    • Netlify, Vercel (자체 CDN 내장)

JAMstack이 적합한 경우와 고려 사항

JAMstack은 많은 장점을 가지고 있지만, 모든 프로젝트에 적합한 것은 아닙니다.

JAMstack이 적합한 경우

  • 콘텐츠 중심의 웹사이트: 블로그, 포트폴리오, 마케팅 페이지, 문서 사이트 등 콘텐츠 업데이트가 잦지만, 페이지 자체가 동적으로 자주 변경될 필요는 없는 경우.
  • 랜딩 페이지 및 정적 웹사이트: 빠른 로딩 속도와 높은 보안이 요구되는 단순 웹사이트.
  • 전자상거래 (일부): 상품 목록 등은 SSG로, 결제 등 동적인 부분은 API로 처리하는 하이브리드 방식.
  • 이벤트성 웹사이트: 트래픽 폭증이 예상되는 일시적인 캠페인 페이지.
  • 소규모/중규모 애플리케이션: 복잡한 서버 로직이나 사용자별 맞춤형 콘텐츠가 매우 빈번하게 필요한 경우가 아닌 애플리케이션.

고려 사항 (한계점)

  • 빌드 시간: 콘텐츠나 페이지 수가 매우 많아지면 빌드 시간이 길어질 수 있습니다. (증분 빌드, 빌드 최적화 필요)
  • 실시간 동적 콘텐츠: 사용자별로 완전히 다른 실시간 동적 콘텐츠(예: 실시간 채팅, 주식 시세)를 제공하는 데는 다소 복잡할 수 있습니다 (이 경우 WebSocket, Server-Sent Events 등 실시간 통신 기술과 API 조합 필요).
  • 복잡한 인증/세션 관리: 기존 서버 세션 기반의 복잡한 인증 흐름은 JAMstack과 직접적으로 통합하기 어려울 수 있습니다 (토큰 기반 인증, OAuth 등을 활용).
  • 개발자 경험 변화: 서버 중심 개발에 익숙한 개발자에게는 새로운 워크플로우와 도구에 적응하는 시간이 필요합니다.

JAMstack 아키텍처 요약

빌드 시점과 요청 시점 데이터 배치

FLOWCHART · B99 WEB FUNDAMENTALS

빌드 시점과 요청 시점 데이터 배치

JAMstack은 사전 생성 가능한 markup과 assets를 CDN에 배포하고 사용자별 읽기·쓰기·비밀 작업을 API 경계로 분리한다. 데이터의 확정 시점과 stale 허용 시간에 따라 build·revalidate·request time을 선택하고 변경은 rebuild·cache invalidation·rollback으로 운영한다.

빌드 시점과 요청 시점 데이터 배치place data at build, incremental revalidation, request, or secret server execution from audience sameness, freshness, personalization, mutation, and security needsDATA NEED페이지 데이터audience·freshness·riskSECURITY비밀·쓰기?인증·결제·mutationAUDIENCE모두 같은가?공개·공통 응답FRESHNESS언제 새로워야 하나?배포·주기·매 요청SERVER ONLYAPI·함수에서 실행secret 보관·쓰기 검증REQUEST사용자별 요청세션·권한별 응답BUILD TIME사전 생성·CDN배포 때 확정되는 콘텐츠REVALIDATE증분 재생성허용한 stale 시간 뒤 갱신REQUEST매 요청 생성항상 최신 공개 데이터YESNONOYES배포 때주기 허용매 요청
  1. 1. 비밀 또는 쓰기가 필요한가?

    인증, 결제, mutation과 secret은 브라우저 번들에 넣지 않고 API·serverless·server 경계에서 실행합니다.

  2. 2. 모든 사용자가 같은 데이터를 보는가?

    세션과 권한에 따라 달라지면 요청 시점에 인증된 사용자별 응답을 만듭니다.

  3. 3. 공개 데이터가 언제 새로워야 하는가?

    배포 때 확정되면 build time, 일정 stale을 허용하면 incremental revalidation, 매 요청 최신이어야 하면 request time을 선택합니다.

Build time

문서·마케팅 페이지처럼 모두에게 같은 콘텐츠를 사전 생성해 CDN에서 제공합니다.

Incremental revalidation

상품 목록처럼 짧은 stale을 허용하고 정해진 주기나 이벤트 뒤에 페이지를 다시 생성합니다.

Request time

항상 최신인 공개 데이터 또는 사용자별 데이터는 요청 시점에 읽되 서로 다른 cache·인증 정책을 적용합니다.

Server-only execution

비밀과 쓰기는 공개 데이터의 freshness 선택보다 먼저 서버 경계로 분리합니다.

모든 동적 기능이 client JavaScript에서만 실행되거나 API가 반드시 microservice·serverless라는 제한을 제거하고 SSR·edge·hybrid를 요구에 따라 인정한다.

JAMstack을 설계할 때는 빌드 시점에 끝나는 일과 요청 시점에 처리해야 하는 일을 분리해야 캐시와 배포 흐름을 안정적으로 운영할 수 있습니다.

이번 장에서는 현대 웹 개발 아키텍처의 주요 트렌드 중 하나인 JAMstack에 대해 학습했습니다.

JAMstack은 JavaScript, APIs, Markup을 조합해 사전 빌드된 정적 콘텐츠, 클라이언트 측 동작, API 기반 백엔드를 연결하는 아키텍처입니다.

이 장에서는 성능, 보안, 확장성, 비용, 개발 경험 측면의 장단점을 함께 살펴보았습니다.

정적 사이트 생성기(Next.js, Gatsby), Headless CMS, Serverless Functions, CDN과 같은 JAMstack의 주요 구성 기술 스택을 파악하고, JAMstack이 어떤 유형의 프로젝트에 적합하며 어떤 점을 고려해야 하는지 알아보았습니다.

JAMstack은 정적 마크업, API, 클라이언트 JavaScript를 조합해 성능과 운영 단순성을 높이는 아키텍처입니다.

모든 프로젝트에 적합한 방식은 아니므로 콘텐츠 변경 빈도, 인증 요구, API 의존도, 배포 구조를 기준으로 적용 여부를 판단해야 합니다.

이 장의 JAMstack 배포 아키텍처는 정적 생성, API 연동, CDN 배포, 빌드 갱신 기준을 정리합니다.