지금 보시는 블로그는 집에 있는 작은 서버에서 작동하고 있었습니다.
여름철 전기 사용량이 많아지면서
정전과 인터넷 통신사의 서비스 중단이 걱정됐습니다.
그래서 예전에 제가 소개해 드렸던 Cloudflare + Supabase 서비스로 마이그레이션을 했습니다.
서비스를 구성하기 위해 간단하게 3가지 개념부터 설명드리겠습니다.
1. Domain
도메인 관리는 Cloudflare에서 하고 있었습니다. (구매는 hosting.kr)
Cloudflare Free Plan에서도 무료로 SSL을 지원하기 때문에 시작하기 좋습니다.
그 밖에도 캐싱 등 무료 플랜에서도 꽤 좋은 기능들을 제공합니다.
2. Front + Back-end
이전에는 집에 있는 작은 서버에 Node.js + Nginx 조합으로 Front-end와 Back-end를 구성해서 사용했습니다.
이번에 마이그레이션한 Cloudflare Workers는 서버리스 엣지 서비스인데요. JavaScript로 된 애플리케이션을 실행할 수 있는 서비스입니다.
3. Database
작은 서버에서 운영할 때는 PostgreSQL을 사용했습니다.
이미지 서빙도 Nginx를 사용했습니다.
Supabase Free Plan에서는 PostgreSQL과 Storage 서비스를 제공합니다. 제공되는 사용량은 작지만 블로그를 운영하기에는 부족하지 않았습니다. 사용량이 부족할 정도로 블로그가 잘된다면 정말 행복한 고민이겠죠.
이제 AI를 활용해서 마이그레이션을 해보겠습니다.
이번에는 Codex를 사용했습니다.
Codex는 OpenAI에서 제공하는 AI 코딩 에이전트입니다. ChatGPT를 만든 회사로 잘 알려져 있습니다.
저는 터미널에서 작업했습니다.
VS Code, Cursor 등 IDE에서도 가능합니다.
하지만 이번 기회에 터미널 사용을 추천드립니다. 키보드만으로도 많은 작업을 편하게 할 수 있습니다.
Blog 폴더에서 Codex를 실행하면 대화형 인터페이스가 보입니다.
이 대화형 인터페이스에 작업 명령어를 입력하면 AI Agent와 대화하면서 코딩을 합니다.
'이 프로젝트를 Cloudflare + Supabase로 마이그레이션 가능한지 검토해줘.'로 시작했습니다.
'가능합니다.'라는 응답과 함께 자세한 계획을 설명해 줍니다.
난이도는 중간 이상이라고 하네요.
그러면 Work Item으로 쪼개서 백업부터 진행했습니다.
Plan을 확인하면서 작업 진행 상황을 확인할 수 있습니다.
진행 중 Cloudflare, Supabase 인증 정보를 요구할 때가 있습니다.
민감한 정보는 대화창에 입력하지 않고 로컬에 저장하는 방식입니다.
진행하면서 npx, npm 같은 낯선 단어가 나오면 Codex에 "npx가 뭐야?", "npx 명령어 실행이 안 돼."처럼 자유롭게 대화하면서 진행하면 됩니다. :)
사전에 Supabase와 Cloudflare 회원가입이 필요합니다.
npx supabase login, npx wrangler login을 실행하면 해당 사이트가 열리면서 권한을 승인하고 인증 토큰을 받을 수 있습니다.
npx wrangler secret put SUPABASE_SERVICE_ROLE_KEY는 Project Settings → API Keys → Secret Keys 값을 입력하면 됩니다.
npx wrangler secret put SUPABASE_DB_URL은 대시보드에서 확인할 수 있습니다. co로 끝나는 주소입니다.
인증 완료 후 초기 마이그레이션이 완료됐습니다.
거의 다 왔습니다. 테스트 및 검증을 진행하면서 오류가 있는지 확인한 후 수정하는 작업으로 마무리합니다.
그리고 기존 blog.brightnetworks.kr의 DNS 설정은 집 IP를 가리키고 있었습니다.
이 설정도 Cloudflare Workers를 사용하도록 변경해 달라고 Codex에 요청했습니다.
이제 제 블로그는 집에서 정전이 발생해도 영향을 받지 않게 되었습니다. :)
지금까지 무료 버전으로 개인 블로그를 운영하는 방법이었습니다.
프로토타입이나 가벼운 서비스도 이 방법으로 운영할 수 있으니 한 번 시도해 보시면 좋을 것 같습니다.
설명이 충분하지 않아 중간에 막히는 부분이나 어려운 점이 있으시다면 댓글로 남겨 주세요. 자세히 설명드리겠습니다.
감사합니다.