정적 블로그에는 왜 데이터베이스가 필요 없을까
Markdown 글이 빌드 과정에서 HTML로 미리 만들어지는 원리를 통해 정적 블로그가 데이터베이스 없이 작동하는 이유를 설명합니다.

고스트에서 Astro로 블로그를 옮긴 뒤 “이제 데이터베이스를 사용하지 않는다”는 말을 여러 번 했습니다. 그런데 가만히 생각해보니 저도 그 원리를 정확히 설명할 수 있는 것은 아니었습니다. 글의 제목과 본문도 결국 데이터인데, 데이터베이스 없이 어떻게 블로그가 열리는지 궁금했습니다.
결론부터 말하면 데이터가 사라진 것이 아니라 저장되는 방식과 페이지를 만드는 시점이 달라진 것입니다. 지금 minml의 글은 데이터베이스 대신 Markdown 파일에 저장되고, Astro가 이 파일을 읽어 완성된 HTML 페이지를 미리 만듭니다. 방문자가 들어왔을 때는 이미 만들어진 파일을 전달하기만 하면 됩니다.
먼저 데이터베이스가 하는 일
데이터베이스는 제목, 본문, 작성자, 발행일처럼 서로 관련된 정보를 일정한 구조로 저장하고 필요한 조건에 맞춰 꺼내는 도구입니다.
Ghost 같은 CMS에서는 글을 작성해 발행하면 내용이 데이터베이스에 저장됩니다. 운영자가 관리자 화면에서 글을 수정하거나 목록을 검색할 때도 애플리케이션이 데이터베이스를 조회합니다. Ghost 공식 문서에 따르면 개발 환경에서는 SQLite3가 기본이고, 일반적인 운영 환경에는 MySQL이 권장됩니다.
방문자가 글 하나를 열 때의 과정을 단순하게 표현하면 다음과 같습니다.
- 방문자가 글 주소를 요청합니다.
- 실행 중인 Ghost 애플리케이션이 요청을 받습니다.
- 데이터베이스에서 해당 글과 필요한 설정을 조회합니다.
- 조회한 내용을 테마에 넣어 HTML을 만듭니다.
- 완성된 페이지를 방문자에게 보냅니다.
실제로는 캐시처럼 속도를 높이는 장치가 더 들어갈 수 있지만, 핵심은 방문 요청을 처리하는 프로그램과 콘텐츠를 보관한 데이터베이스가 함께 동작한다는 점입니다.
이 구조 덕분에 관리자 화면에서 바로 글을 쓰고, 회원과 구독 정보를 관리하고, 내용이 바뀌면 즉시 반영할 수 있습니다. 데이터베이스가 단순히 번거로운 구성요소인 것은 아닙니다. CMS의 편리한 기능을 가능하게 하는 중요한 부분입니다.
정적 블로그는 페이지를 미리 만들어둡니다
Astro로 만든 현재 블로그는 페이지를 만드는 시점이 다릅니다. 방문자가 글을 열 때 만드는 것이 아니라 제가 사이트를 배포하기 전에 미리 만듭니다.
현재 글 작성과 공개 과정은 다음과 같습니다.
- Markdown 파일에 제목과 본문을 저장합니다.
- Astro가 모든 글 파일을 읽습니다.
- 글마다 완성된 HTML 페이지를 생성합니다.
- 생성된 HTML과 CSS, 이미지를 서버에 올립니다.
- 방문자가 요청하면 서버가 해당 HTML 파일을 그대로 전달합니다.
즉, 방문자가 이 글을 열었을 때 서버가 Markdown을 읽고 본문을 조립하는 것이 아닙니다. 빌드 과정에서 이미 이 글의 제목, 문단과 링크가 포함된 HTML 파일이 만들어져 있습니다. 웹 서버는 주소에 맞는 파일을 찾아 보내기만 합니다.
Astro 공식 문서에서도 기본 정적 모드에서는 페이지 경로를 빌드 시점에 결정하고 미리 생성한다고 설명합니다. 내용이 비교적 자주 바뀌지 않고 모든 방문자에게 같은 페이지를 보여주는 블로그에 잘 맞는 방식입니다.
데이터베이스가 없다고 데이터가 없는 것은 아닙니다
여기서 제가 가장 헷갈렸던 부분이 있습니다. 데이터베이스를 사용하지 않는다고 하면 글을 그냥 HTML 안에 직접 적는 것처럼 들립니다. 하지만 minml에서는 글의 원본과 완성된 페이지가 분리되어 있습니다.
| 구분 | 현재 저장되는 곳 | 역할 |
|---|---|---|
| 글 원본 | Markdown 파일 | 제목, 본문, 날짜와 주소 보관 |
| 디자인 | Astro 구성 요소와 CSS | 글을 어떤 모양으로 보여줄지 결정 |
| 공개 결과물 | 빌드된 HTML·CSS·이미지 | 방문자에게 실제로 전달 |
| 데이터베이스 | 사용하지 않음 | 현재 블로그 공개에는 필요하지 않음 |
Markdown 파일도 분명 데이터를 담고 있습니다. 다만 데이터베이스 프로그램에 행과 열 형태로 저장하지 않고 일반 파일로 관리할 뿐입니다.
그래서 “데이터베이스가 없다”보다 다음과 같이 설명하는 편이 더 정확합니다. 공개 페이지를 제공하는 데 실행 중인 데이터베이스 서버가 필요하지 않다.
새 글을 쓰면 다시 빌드해야 합니다
방문할 때 페이지를 만들지 않는 대신 치르는 비용도 있습니다. 새 글을 추가하거나 기존 글을 수정하면 사이트를 다시 빌드하고 배포해야 합니다.
Ghost에서는 관리자 화면에서 발행 버튼을 누르면 데이터베이스가 바뀌고 새 내용이 바로 표시됩니다. 정적 블로그에서는 Markdown 파일을 바꾼 뒤 Astro가 HTML을 다시 만들도록 해야 합니다. 현재 제가 사용하는 자세한 순서는 Astro 블로그 글 작성부터 배포까지에 정리했습니다.
글을 하루에도 수백 번 수정하거나 여러 사람이 동시에 작성한다면 이 과정이 불편할 수 있습니다. 반면 혼자 운영하고 발행 빈도가 높지 않은 개인 블로그에서는 빌드에 걸리는 시간이 짧아 큰 부담으로 느껴지지 않았습니다.
데이터베이스가 없어서 단순해진 부분
Ghost를 운영할 때는 블로그 애플리케이션과 MySQL이 모두 정상적으로 실행되어야 했습니다. 데이터베이스 백업도 별도로 필요했고, Ghost와 Node.js, MySQL의 지원 버전도 함께 살펴봐야 했습니다.
Astro로 이전한 뒤에는 공개 사이트를 위해 실행되는 Ghost 애플리케이션과 전용 MySQL 데이터베이스를 제거했습니다. 그래도 블로그가 계속 열리는 이유는 방문자에게 필요한 글이 이미 HTML 파일 안에 들어 있기 때문입니다.
제가 체감한 변화는 다음과 같습니다.
- 글과 사이트 소스를 일반 파일로 함께 백업할 수 있습니다.
- 데이터베이스 접속 정보와 별도 덤프 파일을 관리하지 않아도 됩니다.
- 방문 요청마다 콘텐츠를 조회하고 페이지를 조립하는 프로그램이 필요하지 않습니다.
- 배포한 결과물이 어떤 파일인지 직접 확인할 수 있습니다.
- 실행 중인 구성요소가 줄어 문제를 확인할 범위도 좁아졌습니다.
다만 데이터베이스가 없다고 사이트가 자동으로 안전하거나 절대 고장 나지 않는 것은 아닙니다. 도메인, 웹 서버, SSL 인증서와 배포 과정은 여전히 관리해야 합니다. 잘못된 파일을 배포하거나 링크를 깨뜨릴 수도 있습니다. 단지 상시 관리해야 하는 구성요소가 줄어든 것입니다.
정적 사이트도 데이터베이스가 필요할 때가 있습니다
“Astro는 데이터베이스를 사용할 수 없다”는 뜻도 아닙니다. 정적으로 만든 페이지 안에 일부 동적 기능을 붙일 수도 있고, Astro 페이지 자체를 방문 요청 때 렌더링하도록 구성할 수도 있습니다.
다음과 같은 기능을 사이트 안에서 직접 제공하려면 데이터베이스나 외부 저장 서비스가 필요할 가능성이 큽니다.
- 회원 가입과 로그인
- 사용자마다 다른 화면
- 댓글 작성과 수정
- 장바구니와 주문 내역
- 실시간으로 변하는 재고나 가격
- 관리자 화면에서 즉시 콘텐츠 발행
- 많은 사용자가 계속 추가하는 기록
예를 들어 댓글은 댓글 작성자의 이름과 내용, 시간을 어딘가에 저장해야 합니다. 로그인 기능은 사용자 계정과 권한을 확인해야 합니다. 이런 정보는 빌드할 때 미리 알 수 없으므로 HTML 파일만으로 처리하기 어렵습니다.
반대로 소개 페이지나 블로그 글처럼 내용이 발행할 때 정해지고 모든 방문자에게 똑같이 보이는 정보는 정적 파일만으로 충분할 수 있습니다. 문의 양식이나 방문 통계도 꼭 직접 데이터베이스를 운영하지 않고 외부 서비스를 연결하는 방법이 있습니다.
Ghost와 Astro의 차이는 데이터베이스 유무만이 아닙니다
Ghost와 Astro를 단순히 “DB가 있는 도구와 없는 도구”로 나누면 정확하지 않습니다. Ghost를 콘텐츠 관리 도구로 남겨두고 Astro가 Ghost API에서 글을 가져와 정적 페이지를 만들 수도 있습니다. 이 경우 방문자에게는 정적 HTML을 제공하지만, 글 원본은 여전히 Ghost 데이터베이스에 있습니다.
저는 관리자 화면, 멤버십과 뉴스레터 기능을 사용하지 않았기 때문에 Ghost 자체를 남겨둘 이유가 크지 않았습니다. 그래서 글을 Markdown 파일로 완전히 옮기고 Ghost와 데이터베이스를 함께 정리했습니다. 자세한 선택 과정은 Ghost에서 Astro로 이전한 후기에 기록했습니다.
다른 운영자는 결과가 다를 수 있습니다. 편리한 편집 화면이 중요하면 CMS를 유지하는 것이 맞고, 공개 사이트의 구조를 단순하게 만들고 싶다면 파일 기반 정적 블로그가 잘 맞을 수 있습니다.
이제 제가 이해한 방식
처음에는 “글도 데이터인데 DB 없이 어떻게 보여주지?”라는 의문이 있었습니다. 지금은 식당과 포장된 음식의 차이처럼 이해하고 있습니다.
Ghost 방식은 주문이 들어올 때 저장된 재료를 꺼내 한 접시를 완성하는 것에 가깝습니다. 정적 블로그는 영업 전에 접시를 모두 완성해 포장해두고, 주문이 들어오면 맞는 것을 바로 건네는 방식에 가깝습니다.
어느 방식이 항상 우월한 것은 아닙니다. 주문마다 내용을 바꿔야 한다면 그때 만드는 방식이 필요합니다. 모든 방문자가 같은 글을 읽는 작은 블로그라면 미리 만들어두는 방식이 단순합니다.
minml에는 현재 회원 기능이나 실시간 데이터가 없습니다. 글을 발행한 뒤에는 모든 방문자에게 같은 내용을 보여줍니다. 그래서 Markdown 원본과 빌드된 HTML만으로 목적을 충족하며, 공개 블로그를 위해 별도의 데이터베이스를 계속 실행할 필요가 없습니다.