AWS Lightsail 워드프레스 블로그를 Hugo 정적 사이트로 전환한 과정과 장단점, 9월 실제 AWS·GCP 청구를 기준으로 한 운영 비용을 정리했습니다.
tips-etc AWS - CloudFront - Cloud Run - Hugo - Lightsail - S3 - WordPress - 블로그 - 워드프레스 - 정적사이트오래전부터 이 블로그는 워드프레스로 운영해 왔습니다. 집 홈서버에서 시작했고, 중간에 구글 클라우드로 이전했다가, 나중에는 AWS Lightsail 위에서 워드프레스를 돌리는 형태로 자리 잡았습니다.
이번에 그 구조를 정리하고, 본문은 Hugo로 빌드한 정적 HTML로 바꾸었습니다. PHP·MySQL·상시 웹서버를 끄고, 필요한 동적 기능(댓글·조회수·인기글 등)만 별도 API로 분리한 형태입니다. 전환 과정과 장단점, 특히 비용 쪽을 정리해 둡니다.
기존 환경: AWS Lightsail + 워드프레스
기존 운영 스펙은 대략 아래와 같았습니다.
- 인스턴스: 1GB RAM, 2 vCPU, 40GB SSD
- 구성: 워드프레스 + MySQL + 웹서버가 한 VM 위에 상시 구동
- 월 비용: USD 7.84 (스냅샷 포함)
사양 자체는 개인 블로그용으로 과하지 않았지만, VM이 항상 켜져 있어야 하고 워드프레스·플러그인·OS 보안 패치를 계속 따라가야 한다는 점이 부담이었습니다. 트래픽이 적어도 “서버가 떠 있는 시간”에 대해 비용을 내는 구조라, 콘텐츠 위주 블로그에는 점점 맞지 않게 느껴졌습니다. 무엇보다 각종 워드프레스 플러그인 때문인지 페이지 접속 시 약 7~10초 정도가 걸렸습니다.
왜 정적 사이트로 바꿨나
전환을 결정한 이유는 크게 네 가지였습니다.
- 상시 서버 비용 – 글 조회만 해도 Lightsail VM이 계속 돌아가야 함
- 보안·유지보수 – 워드프레스/플러그인 업데이트, PHP·DB 관리
- 속도 – 정적 HTML + CDN이 동적 PHP 렌더링보다 단순하고 빠름
- 장애 분리 – 댓글 API가 잠시 죽어도 본문·목록·검색은 살아 있게
각종 AI 툴이 있어 정적 페이지 변환과 동적 기능 API 개발에 대한 부담이 없는 상태라 전환 결정에 어려움이 없었습니다.
전환 과정 요약
전체 흐름은 대략 이렇게 가져갔습니다.
- 콘텐츠 정리 – 기존 워드프레스 글을 Hugo Markdown으로 유지 (
url: /archives/{id}/로 예전 permalink 유지) - 테마·레이아웃 – 기존 이슬나라 룩에 맞춰 Hugo 테마 정리
- 검색 – Pagefind로 클라이언트 사이드 검색 (한글·태그·카테고리)
- 정적 배포 –
hugo빌드 → AWS S3(비공개) + CloudFront(HTTPS/CDN) - 레거시 URL 호환 – CloudFront Function으로 예전 경로·다운로드 링크 보정
- 동적 기능 – 댓글·댓글 수·조회수·인기글·문의 폼을 GCP Cloud Run + Firestore API로 분리
- 스팸 대응 – Cloudflare Turnstile(fail-closed) + Rate Limit + 관리자 삭제/차단
위 과정 모두 AI를 이용해서 처리했습니다.
배포는 로컬에서 빌드한 뒤 스크립트로 올리는 방식입니다.
./scripts/build-site.sh
./scripts/deploy-comment-api.sh # API 변경 시
./scripts/deploy-static.sh # public/ → S3 + CloudFront invalidation
워드프레스 관리자 화면에서 “발행” 누르던 것과 비교하면, 지금은 글 작성(마크다운 형식) → 빌드 → 정적 배포 순서가 됩니다. 익숙해지면 부담은 크지 않고, 이마저도 AI 툴을 이용하면 쉽게 처리할 수 있습니다. 전용 편집/발행 툴을 만들까도 생각했지만 당분간은 이렇게 수작업으로 처리하려고 합니다.
새 환경 구조
현재 구조는 아래처럼 정적 레이어와 동적 레이어를 나눈 상태입니다.
- 콘텐츠: Hugo Markdown
- 빌드: Hugo (+ Pagefind 검색 인덱스)
- 정적 파일: AWS S3 (프라이빗 버킷)
- CDN/HTTPS: AWS CloudFront
- 댓글·조회·인기글·문의 API: Google Cloud Run (
asia-northeast3) - 데이터 저장: Google Cloud Firestore
- 봇 검증: Cloudflare Turnstile
- 문의 메일: Mailgun
본문·이미지·검색 인덱스는 CloudFront에서 바로 나가고, 댓글/조회수처럼 DB가 필요한 부분만 Cloud Run을 호출합니다. API가 잠깐 내려가도 글 읽기와 검색은 그대로 됩니다.
장점
- 비용이 Lightsail보다 낮음 – 아래에 따로 정리
- 페이지 응답이 단순해짐 – HTML/CSS/JS + CDN 캐시
- 해킹 대상이 줄어듦 – 인터넷에 열려 있던 워드프레스 관리자 화면, PHP, DB가 사라짐
- 배포가 재현 가능 – Git + 빌드 스크립트 기준으로 동일하게 올릴 수 있음
- 장애 격리 – 동적 API 장애 ≠ 사이트 전체 장애
- 스케일 – 트래픽이 늘어도 정적 쪽은 CloudFront가 흡수
단점 / 주의할 점
- 글 발행이 빌드 기반 – 관리자 UI에서 바로 저장·미리보기하던 감각과는 다름
- 플러그인 생태계 없음 – 워드프레스 플러그인으로 하던 건 직접 만들거나 포기
- 동적 기능은 직접 설계 – 댓글·조회수·스팸 대응을 API로 구현·운영해야 함
- 초기 이전 비용(시간) – URL 호환, 업로드 파일, 테마, 댓글 이전/재구현 등 한 번은 손이 큼
- 콜드 스타트 – Cloud Run을
min-instances=0으로 두면 가끔 첫 응답이 조금 느릴 수 있음
개인 블로그처럼 “글을 읽고, 가끔 댓글 달고, 검색하는” 용도에는 장점이 더 컸고, 쇼핑몰·회원제·복잡한 폼이 많은 사이트라면 정적 전환이 항상 정답은 아닐 수 있습니다.
비용 비교
가장 체감이 큰 부분입니다. 예상치는 전환하던 때 적어 둔 것이고, 2026년 10월 1일에 9월 청구서로 실제 금액을 붙였습니다. Lightsail 인스턴스는 9월 5일에 삭제했습니다. 9월에 나온 Lightsail 1.10달러는 삭제 전까지 약 나흘치라서, 아래 실제 합계에는 넣지 않았습니다.
기존 (Lightsail)
| 항목 | 내용 |
|---|---|
| 인스턴스 | 1GB RAM, 2 vCPU, 40GB SSD |
| 월 비용 | USD 7.84 (스냅샷 포함) |
| 특징 | 트래픽과 무관하게 VM 상시 과금 |
신규 (전환 당시 예상)
트래픽이 개인 블로그 수준이고, Cloud Run은 요청 있을 때만 떠 있는 설정(min-instances=0, 메모리 512Mi)을 기준으로 잡았습니다. 숫자는 대략적인 예상치이며, 실제 청구는 트래픽·배포 횟수·메일 발송량에 따라 달라집니다.
| 구성 | 역할 | 예상 월 비용 (USD) |
|---|---|---|
| S3 | 정적 파일 저장 (사이트·업로드 포함 약 수백 MB) | ~0.01 ~ 0.05 |
| CloudFront | CDN / HTTPS (Always Free: 전송 1TB·요청 1천만 건/월 범위) | 0 (일반 개인 트래픽 가정) |
| ACM | SSL 인증서 | 0 |
| Cloud Run | 댓글·조회·인기글·문의 API (서울 리전) | ~0.5 ~ 2 |
| Firestore | 댓글·통계 저장 (무료 할당량 내) | 0 |
| Turnstile | 캡차 | 0 |
| Mailgun | 문의 폼 메일 (무료 할당량 내) | 0 |
| 합계 (예상) | 약 1 ~ 3 |
Cloud Run Always Free 할당은 주로 미국 일부 리전 기준으로 안내되는 경우가 많고, 이 블로그 API는 지연을 줄이려고 asia-northeast3(서울)에 두었습니다. 그래서 당시에는 “완전 0원”보다 소액이 나오는 쪽으로 봤습니다.
9월 실제
이 절은 2026년 10월 1일에 9월 청구서를 보고 추가했습니다. 기간은 2026년 9월 1일–30일입니다. AWS는 달러 청구, GCP는 원화 청구입니다. 둘을 더할 때는 9월 평균 환율 기준으로 약 1,359원을 썼습니다.
AWS (Lightsail 제외)
| 구성 | 9월 청구 (USD, 세전) |
|---|---|
| S3 | 0.19 |
| CloudFront | 0 |
| ACM | 0 |
| Data Transfer | 0 |
| 합계 | 0.19 |
부가세를 더하면 S3는 약 0.21달러입니다. 정적 파일 저장은 예상(0.01~0.05달러)보다 조금 높았고, CDN·인증서·데이터 전송은 0달러였습니다.
GCP (댓글·조회 API)
크레딧을 반영한 뒤 ₩1,935입니다.
| 항목 | 9월 청구 (원) |
|---|---|
| Secret Manager 버전 보관 | 1,846 |
| Firestore 쓰기 (약 5.3만 건) | 50 |
| Firestore 읽기 (약 50만 건) | 16 |
| Cloud Run | 21 |
| Cloud Storage | 2 |
| 합계 | 1,935 |
Cloud Run은 사용액 ₩168에서 크레딧 ₩147이 빠져 순액 ₩21입니다. CPU·메모리는 크레딧으로 상쇄되고, 남은 금액의 ₩20은 서울 리전 아웃바운드 0.12GiB입니다. Firestore는 무료 한도를 넘어 쓰기·읽기 합계 ₩66이 나왔습니다.
9월 GCP 비용의 대부분은 Secret Manager 버전 보관료였습니다. Secret Manager는 API 키나 토큰 같은 비밀 값을 저장하는 GCP 서비스입니다. 댓글 API의 Turnstile 키, 관리자 토큰, 메일 발송 키를 여기에 두고, Cloud Run이 실행될 때 읽어 옵니다. 값을 넣을 때마다 버전이 하나 생기고, 이전 버전도 폐기하기 전까지는 보관 요금이 나갑니다. 활성 버전은 결제 계정당 6개까지 무료이고, 그 위는 버전당 월 0.06달러입니다. 배포할 때마다 새 버전이 쌓여 사용량이 28.24 버전·월이었고, 청구 ₩1,846이 여기서 나왔습니다. 최신 버전만 남기고 이전 버전은 폐기해서 현재 활성 버전은 4개입니다. 다음 달부터 이 항목은 무료 한도 안입니다. 배포 스크립트도 값이 같으면 버전을 추가하지 않도록 바꿔 두었습니다. 9월에 이미 청구된 ₩1,846은 소급되지 않습니다.
합계
| 금액 | |
|---|---|
| AWS (세전) | USD 0.19 (약 ₩260) |
| GCP | ₩1,935 (약 USD 1.42) |
| 합계 | 약 USD 1.61 (약 ₩2,200) |
10월 예상
9월에 실제로 돌아간 것은 5일–30일, 26일입니다. 시크릿 보관료를 뺀 약 ₩350은 그 26일분입니다. 1–4일을 같은 비율로 더하면 30일 기준으로 약 ₩400입니다. Secret Manager는 활성 버전 4개가 무료 한도(6개) 안이라 0원입니다. 10월은 31일이라 그보다 약 10원 더 나올 수 있습니다.
| 금액 | |
|---|---|
| AWS (세전) | USD 0.22 (약 ₩300) |
| GCP | ₩103 (약 USD 0.08) |
| 합계 | 약 USD 0.30 (약 ₩400) |
한눈에 비교
- 기존: 월 약 USD 7.84 (고정에 가까움)
- 9월 실제 (Lightsail 제외): 약 USD 1.61 (약 ₩2,200). 이 중 약 USD 1.36은 시크릿 버전이 쌓인 비용
- 10월 예상: 약 USD 0.30 (약 ₩400). 9월 26일분에 1–4일을 더한 금액
- 9월 절감: 7.84달러 대비 약 80%. 시크릿 정리 후는 그 아래로 더 내려감
여기에 “워드프레스 보안 패치·플러그인 깨짐·DB 백업”에 쓰던 시간도 줄어들어서, 돈보다 운영 부담 감소가 더 클 수도 있습니다.
아직 남은 것 / 운영 메모
- 글 올릴 때마다 빌드·배포 한 번씩
- CloudFront 캐시 무효화 비용/한도(경로 수)는 배포 스크립트에서 관리
- API·시크릿(Turnstile, Admin 토큰 등)은 로컬 env로만 관리하고 저장소에는 넣지 않음
- 9월 청구로 예상치를 한 번 맞춰 두었음. 시크릿 이전 버전은 폐기했고, 10월 청구에서 보관료 ₩1,846이 빠지는지 보면 됨
마치며
Lightsail 위의 워드프레스를 Hugo 정적 사이트 + CloudFront + Cloud Run API 구조로 바꿨습니다. 예전 permalink(/archives/...)는 유지하면서, 본문은 정적으로 두고 댓글·조회 같은 부분만 서버리스로 분리한 형태입니다.
체감으로 가장 큰 변화는 속도입니다. 예전에는 페이지가 열리기까지 7~10초까지 걸리던 적이 있었는데, 전환 후에는 0.5초 정도면 열리는 수준으로 개선되었습니다.
월 비용은 9월 실제로 약 1.61달러(약 2,200원) 였습니다. Lightsail 7.84달러보다 낮고, 그중 약 1.36달러는 시크릿 버전이 쌓인 한 달치라 10월 예상은 약 0.30달러(약 400원)입니다. 보안 패치와 서버 상시 가동에 대한 부담도 같이 줄었습니다.
비슷한 고민(개인 블로그를 VM 워드프레스로 돌리는 중인데 비용·유지보수가 아깝다)이 있다면, 정적 전환을 한 번쯤 검토해 보셔도 좋을 것 같습니다.