Next.js, Nginx, 그리고 Coolify를 사용해 멀티 테넌트 정적 사이트 엔진을 구축한 방법
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.xmlrobots.txt- Analytics 스크립트
- OpenGraph 메타데이터 등
Nginx 설정
제너레이터가 각 테넌트에 대한 라우팅 및 서브도메인 설정을 만듭니다.
Coolify 로 배포
Coolify 가 정적 출력을 받아 Nginx 를 재로드하고, 사이트가 바로 살아갑니다.
실제 적용 시 의미
랜딩 페이지를 하나씩 만들던 방식을 바꾸면 다음을 할 수 있습니다:
- 새로운 비즈니스를 온보딩
- 해당 비즈니스의 JSON 설정 입력
- 원하는 섹션 선택
- 제너레이터 실행
- 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 추가
- 작은 서버를 여러 대 수평 확장
- 약간 더 큰 인스턴스로 업그레이드
핵심적인 장점은 변함없습니다:
정적 + 멀티‑테넌트 = 아주 적은 인프라로 다수의 사이트 운영.