Next.js, Nginx, 그리고 Coolify를 사용해 멀티 테넌트 정적 사이트 엔진을 구축한 방법

발행: (2025년 12월 13일 오후 09:00 GMT+9)
7 min read
원문: Dev.to

Source: Dev.to

고수준 개요

기술적인 세부 사항에 들어가기 전에, 시스템이 위에서 어떻게 보이는지 살펴보세요.

오늘날 대부분의 랜딩 페이지는 수동으로 만들거나 드래그‑앤‑드롭 툴을 사용합니다. 저는 좀 다르게 하고 싶었습니다:

  • 자동화됨
  • 설정 기반
  • 초고속
  • SEO 최적화
  • 매우 저렴한 호스팅
  • 수백 개의 사이트를 손쉽게 호스팅 가능

아키텍처

Next.js 로 만든 단일 엔진:

  • 각 테넌트를 위한 설정 기반 시스템
  • 페이지를 조합하는 컴포넌트 팩토리
  • 순수 HTML을 생성하는 정적 내보내기
  • 자동 생성된 출력물 (sitemap, robots, analytics, Nginx 설정)
  • Coolify 가 배포를 담당하고 서브도메인 또는 커스텀 도메인을 할당

하나의 엔진 → 무한한 랜딩 페이지.

멀티 테넌트 랜딩 페이지 아키텍처

빌드 파이프라인

멀티 테넌트 랜딩 페이지 빌드 파이프라인

비즈니스 설정

각 테넌트는 브랜딩, 색상, 서비스, 카피 등을 포함한 JSON 설정 파일을 가집니다.

컴포넌트 팩토리

엔진은 재사용 가능한 섹션 템플릿 라이브러리에서 선택합니다. 예시 구조:

hero
├─ default
└─ split

features
├─ grid
└─ list

footer
├─ default
└─ multi-columns

gallery
├─ default
└─ scrolling

정적 내보내기 (Next.js)

Next.js 가 모든 것을 정적 HTML 로 컴파일합니다.

// next.config.ts
import type { NextConfig } from 'next';

const nextConfig: NextConfig = {
  output: "export",
  images: {
    unoptimized: true,
  },
  trailingSlash: true,
};

export default nextConfig;

자동 생성 자산

시스템이 생성하는 파일:

  • sitemap.xml
  • robots.txt
  • Analytics 스크립트
  • OpenGraph 메타데이터 등

Nginx 설정

제너레이터가 각 테넌트에 대한 라우팅 및 서브도메인 설정을 만듭니다.

Coolify 로 배포

Coolify 가 정적 출력을 받아 Nginx 를 재로드하고, 사이트가 바로 살아갑니다.

실제 적용 시 의미

랜딩 페이지를 하나씩 만들던 방식을 바꾸면 다음을 할 수 있습니다:

  1. 새로운 비즈니스를 온보딩
  2. 해당 비즈니스의 JSON 설정 입력
  3. 원하는 섹션 선택
  4. 제너레이터 실행
  5. SEO‑최적화된 완전 기능 랜딩 페이지를 즉시 배포

빠르고, 저렴하며, 확장 가능하고, 매우 유연합니다.

왜 이 프로젝트에 정적 사이트가 SSR보다 좋은가

멀티‑테넌트 시스템이 수십·수백 개의 소규모 비즈니스 사이트를 호스팅할 경우, 서버‑사이드 렌더링(SSR)은 과도할 수 있습니다:

  • 모든 요청마다 Node.js 프로세스가 필요
  • 미들웨어, 인증, 데이터 패칭, 레이아웃 로직이 매 요청마다 실행
  • 동시성, 메모리, 콜드 스타트, 스케일링 문제가 발생

정적 내보내기의 장점:

  • 빌드 시점에 HTML 로 렌더링
  • Nginx(또는 간단한 웹 서버)가 디스크에 있는 파일을 그대로 제공
  • 요청당 React/Next.js 실행이 없어 CPU·RAM 사용량 감소, 실패 지점 감소

정적 사이트의 이점:

  • 첫 바이트 응답이 빠름 (렌더링 단계 없음)
  • 스케일링이 단순함
  • 성능을 예측하기 쉬움
  • 인프라 비용이 크게 절감

추후 동적 기능이 필요하면 여전히 추가 가능:

  • 작은 API 라우트
  • 클라이언트‑사이드 인터랙션
  • 웹훅 또는 백그라운드 워커

사이트의 핵심은 여전히 정적입니다.

“저렴한” 서버에 수백 개 페이지를 호스팅할 수 있는 이유

기본 클라우드 서버(예: 작은 DigitalOcean, Vultr, Linode 인스턴스)는 보통 월 $4–7 정도이며 다음을 제공합니다:

  • 1 vCPU
  • 0.5–1 GB RAM
  • 약 10–25 GB SSD
  • 500 GB – 1 TB 아웃바운드 대역폭

평균 페이지 크기를 ~300 KB 로 가정하면:

  • 500 GB 아웃바운드 → 약 160만 페이지뷰/월
  • 1 TB 아웃바운드 → 약 330만 페이지뷰/월

이미지 등 기타 자산을 고려해도 수십만 페이지뷰를 충분히 제공할 수 있습니다.

멀티‑테넌트 예시 시나리오

  • 100 테넌트 × 월 1,000 페이지뷰 = 100,000 페이지뷰/월

정적 호스팅과 Nginx 를 사용하면 병목은 CPU·RAM이 아니라 대역폭입니다.

트래픽이 증가하면 다음과 같이 대응할 수 있습니다:

  • 앞에 CDN 추가
  • 작은 서버를 여러 대 수평 확장
  • 약간 더 큰 인스턴스로 업그레이드

핵심적인 장점은 변함없습니다:

정적 + 멀티‑테넌트 = 아주 적은 인프라로 다수의 사이트 운영.

Back to Blog

관련 글

더 보기 »

현실이 사라질 때

2024년 12월, 페이‑페이 리는 가득 찬 스탠포드 강당에 낡은 엽서를 들어 보였다—반 고흐의 *The Starry Night*는 세월에 따라 색이 바래고 주름이 잡혀 있었다. 그녀는 그것을…

알고 계셨나요? (Part 3)

Google Cloud Shell을 환경으로 사용하여 코딩할 수 있습니다! JavaScript, .NET 등 다양한 도구가 포함되어 있습니다. 무엇보다도, 설치할 수 있습니다.