Ghost는 2013년 워드프레스 핵심 개발자 출신들이 “발행에만 집중하는 플랫폼을 만들자”는 목표로 시작한 프로젝트로, 현재는 Node.js 위에서 동작하는 완전한 오픈소스 퍼블리싱 엔진으로 자리 잡았어요. 워드프레스가 수만 개의 플러그인으로 무엇이든 만들 수 있는 범용 CMS라면, Ghost는 처음부터 블로그·뉴스레터·유료 멤버십이라는 세 가지 용도에 기능을 집중시킨 게 특징입니다. 광고나 서드파티 트래킹 없이 깔끔한 읽기 경험을 유지하면서 수익화까지 직접 챙기고 싶은 1인 창작자들이 특히 많이 찾는데, 그렇다면 Ghost로 셀프호스팅 블로그 플랫폼을 어떻게 구축할 수 있을까요?
Ghost는 어떤 플랫폼인가
Ghost는 Node.js로 작성된 오픈소스 퍼블리싱 플랫폼으로, 마크다운 기반 에디터와 뉴스레터 발송, 유료 멤버십 기능을 하나의 코어에 모두 담고 있어요. 워드프레스처럼 플러그인 생태계에 의존하지 않고 자체적으로 SEO 메타 태그, AMP, 사이트맵 생성 같은 기본기를 갖추고 있어서 설치 직후부터 검색엔진 최적화가 어느 정도 이미 되어 있는 상태로 시작할 수 있어요. 관리자 화면도 글쓰기와 발행 흐름에 맞춰 단순하게 설계되어 있어서, 기능이 너무 많아 오히려 헷갈리는 워드프레스 대시보드와는 결이 다릅니다.
워드프레스와 비교했을 때의 위치
Ghost를 선택하는 이유는 대부분 “가볍고 목적이 분명하다”는 점으로 요약돼요. 워드프레스는 쇼핑몰, 포트폴리오, 커뮤니티까지 플러그인만 있으면 뭐든 될 수 있는 범용 도구인 반면, Ghost는 처음부터 콘텐츠 발행자를 위한 도구로 설계되어서 필요 이상의 기능이 거의 없어요. 그만큼 서버 자원도 적게 쓰고 관리 포인트도 줄어드는데, 대신 워드프레스만큼 방대한 플러그인·테마 생태계를 기대하기는 어렵다는 트레이드오프가 있어요. 이커머스나 복잡한 커스텀 기능이 필요하다면 워드프레스가, 글쓰기와 구독자 관리에 집중하고 싶다면 Ghost가 더 잘 맞는 선택이에요.
마크다운 에디터와 발행 흐름
Ghost의 에디터는 마크다운 문법을 그대로 지원하면서도 노션처럼 블록 단위로 이미지, 임베드, 콜아웃 카드를 끼워 넣을 수 있는 하이브리드 구조예요. 글을 쓰다가 #을 입력하면 바로 제목 스타일로 바뀌고, / 명령으로 갤러리나 트위터 임베드 같은 블록을 불러올 수 있어서 별도의 HTML 편집 없이도 풍부한 레이아웃을 만들 수 있어요. 예약 발행, 태그별 뉴스레터 분리, SEO 미리보기 카드까지 발행 직전 체크리스트가 에디터 안에 그대로 노출되기 때문에 발행 전 실수를 줄이는 데도 도움이 돼요.
뉴스레터와 유료 멤버십을 코어 기능으로
Ghost가 다른 블로그 플랫폼과 가장 크게 갈라지는 지점은 뉴스레터와 결제 기능을 외부 서비스 연동이 아니라 코어 기능으로 내장했다는 점이에요. 글을 발행하면 구독자 이메일함으로 자동 발송되고, Stripe를 연결하면 무료/유료 등급을 나눠 특정 콘텐츠를 유료 구독자에게만 공개하는 것도 몇 번의 클릭으로 설정할 수 있어요. Substack이나 메일침프처럼 여러 서비스를 따로 붙이지 않아도 발행부터 수익화까지 한 플랫폼 안에서 끝난다는 점이 셀프호스팅 사용자들에게는 특히 매력적인 부분이에요.
리버스 프록시와 HTTPS 설정
Ghost는 기본적으로 로컬 포트(보통 2368)에서 동작하기 때문에 외부에 공개하려면 도메인을 연결하고 HTTPS 인증서를 발급하는 리버스 프록시가 필요해요. Nginx Proxy Manager나 Traefik 중 어떤 도구로 프록시를 구성할지는 운영 규모와 익숙한 설정 방식에 따라 갈리는데, 두 도구의 장단점은 Nginx Proxy Manager vs Traefik 비교 글에서 더 자세히 다뤘어요. 아래는 Docker Compose로 Ghost와 MySQL을 함께 띄우는 기본 구성이에요.
services:
ghost:
image: ghost:5-alpine
restart: always
ports:
- "2368:2368"
environment:
url: https://blog.example.com
database__client: mysql
database__connection__host: db
database__connection__user: ghost
database__connection__password: ${MYSQL_PASSWORD}
database__connection__database: ghost
volumes:
- ghost_content:/var/lib/ghost/content
depends_on:
- db
db:
image: mysql:8
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ghost
MYSQL_USER: ghost
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
volumes:
- mysql_data:/var/lib/mysql
volumes:
ghost_content:
mysql_data:
url 환경 변수는 실제 서비스 도메인과 정확히 일치해야 해요. Ghost 내부적으로 이미지 경로나 RSS 피드 URL을 이 값 기준으로 생성하기 때문에, 프록시 뒤에서 도메인이 어긋나면 이미지가 깨지거나 뉴스레터 링크가 잘못 나가는 문제가 생길 수 있어요.
백업 전략도 미리 챙겨야 한다
콘텐츠와 구독자 목록, 결제 이력까지 한 서버에 모여 있다는 건 편리한 만큼 백업이 무너지면 잃을 게 많다는 뜻이기도 해요. ghost_content 볼륨(이미지, 테마, 백업 파일)과 MySQL 데이터베이스를 함께, 정기적으로 백업해야 실제 장애 상황에서 복구가 가능한데, Restic과 Duplicati 중 어떤 도구가 이런 구성에 더 맞는지는 백업 도구 비교 글에서 다뤘으니 참고하면 좋아요.
결론
Ghost는 워드프레스의 복잡함 없이 글쓰기, 뉴스레터, 유료 멤버십을 하나의 가벼운 플랫폼 안에서 해결하고 싶은 사람에게 잘 맞는 선택이에요. Node.js 기반이라 저사양 서버에서도 무리 없이 돌아가고, 코어 기능만으로 구독형 콘텐츠 비즈니스까지 시작할 수 있다는 점이 셀프호스팅의 매력을 배가시켜요. 리버스 프록시 설정과 백업 체계만 미리 잡아두면, 이후에는 콘텐츠 발행에만 집중할 수 있는 안정적인 개인 퍼블리싱 서버를 갖추게 되는 셈이에요.
자주 묻는 질문
Q1. Ghost는 워드프레스보다 배우기 쉬운가요?
네, Ghost는 플러그인을 조합해 기능을 확장하는 워드프레스와 달리 발행에 필요한 기능만 기본 내장하고 있어서 초기 설정 단계가 훨씬 단순해요.
Q2. 무료로 계속 쓸 수 있나요?
네, 오픈소스 코어 자체는 무료이고 직접 서버에 설치해서 운영하면 Ghost(Pro) 같은 호스팅 구독료 없이 인프라 비용만 부담하면 돼요.
Q3. 유료 구독이나 멤버십도 직접 만들 수 있나요?
네, Ghost는 Stripe 연동을 코어 기능으로 내장하고 있어서 별도 플러그인 없이 무료/유료 회원 등급과 정기 결제 뉴스레터를 바로 설정할 수 있어요.
Q4. 테마나 디자인을 자유롭게 바꿀 수 있나요?
네, Handlebars 기반의 자체 템플릿 언어로 테마를 커스터마이징할 수 있고 공식 마켓플레이스와 커뮤니티 테마도 여럿 공개되어 있어요.
Q5. 이미 워드프레스로 운영 중인 블로그도 옮길 수 있나요?
네, Ghost는 워드프레스 익스포트 파일을 가져오는 공식 마이그레이션 도구를 제공해서 기존 글과 태그, 작성자 정보를 옮길 수 있어요.
Q6. 서버 사양이 낮아도 돌아가나요?
네, Ghost는 Node.js와 SQLite(또는 MySQL) 조합만으로 동작하기 때문에 1GB 메모리의 저가형 VPS에서도 개인 블로그 규모라면 충분히 운영할 수 있어요.


