저렴하고 탄탄한 블로그를 만들고 운영하기
내가 살아가면서 평생 계속 해야 한다고 느끼는 활동은 읽기-쓰기-운동 이다.
그중 하나인 글쓰기는 의식적으로 내 생각을 블로그에 쓰는 과정을 통해서 생각의 성장을 이루고 또 재미도 느낄 수 있다고 생각한다. 글을 쓰는 과정은 내 생각을 정리할 수 있기에 다 쓰면 너무 통쾌한 활동이지만 그 과정은 시간이 걸리고 일부 고통스러운 면도 있다. 폴 그레이엄의 글쓰기와 글쓰기맹(write-nots) 에서도 이야기 하고 있지만 AI 시대에 앞으로 글쓰는 사람은 더 줄어들지도 모른다. 나에게는 글쓰기는 계속 하고 싶은 활동이다.
블로그에 글을 자주쓰지는 않지만 내 블로그는 2004년에 시작해 20년 동안 계속되어왔다. 앞으로도 계속 운영하고자 하는데 장기로 내 블로그를 유지하기 위해 아래와 같은 조건을 만족하면 좋겠다.
- 저렴한 운영 비용
예를 들어서 AWS 인스턴스에 내 블로그를 유지하는 것은 최소한 1년에 10만 원 이상이 든다.
국내 저렴한 클라우드 호스팅을 쓰면 7만 원 정도. (512Mb ram) 열심히 글을 쓴다면 모르겠지만 지속가능성을 위해서는 비용을 낮추는 것도 중요하다. - 최소한의 운영 시간
AWS Lightsail 에 운영을 하더라도 설치, SSL 인증서관리, 백업 프로세스 관리 등의 관리가 필요하다. 할수는 있지만 가능하면 호스팅에 많이 위임하고 싶다. - 개인 도메인과 콘텐츠 직접 소유, 마케팅 관련 기능을 직접 콘트롤
Naver blog, Tistory 등을 사용하면 콘텐츠를 직접 소유할 수가 없고 원할때 내 콘텐츠를 export 할 수 없다. 그리고 og:image나 Google Analytics 등 마케팅 관련 설정 태그를 넣을 수 없다. 저렴한 호스팅을 쓰면 다른사이트에서 외부이미지 접근 지원이 되지 않기 때문에 페이스북 등에 공유를 하면 og:image 를 불러오지 못한다. - 보안과 속도
https 는 당연히 지원해야 하고, 속도도 중요하기에 한국 호스팅이거나 CDN을 선호한다.
위 조건을 대부분 만족하는 옵션이라고 생각해서 iwinv 의 웹호스팅 (한 달에 940원)을 사용하고 있었다. 웹호스팅이기에 관리형이라서 SSL 인증서를 알아서 설정해주고, 백업 등도 원클릭으로 되며 가격도 충분히 저렴하기 때문이다.
그런데 이런 저렴한 호스팅에 블로그를 운영할 때 문제점은 블로그에 올라가 있는 이미지를 다른 외부사이트에서 접근이 안 되도록 웹서버를 설정해두었기 때문에 og:image 등을 설정해도 읽어보지 못해서 Facebook, Twitter에서 내가 원하는 공유 이미지를 보여주지 못한다는 것이다.
처음에는 robot.txt 설정 때문이거나 .htaccess 설정 때문인가 생각했는데 그것은 아니고 호스팅 회사에서 막아둔 것이었다. 예전에는 iwinv 웹호스팅을 사용해도 왜인지 Facebook debugger 등을 통해서 가끔 og:image 가 불러지곤 했는데. 최근에는 성공한 적이 없었다. iwinv 웹호스팅에 무단링크 방지 방법이 적혀있어서 기본적으로는 풀려있는것인가 했는데 가격페이지를 보니 저렴한 plan 에서는 막혀있는게 확실한게 거의 확실해보였다.
가상서버+CloudFlare 블로그 설정하기
결국 나는 og:image 공유를 위해 새 가상서버 호스팅에 직접 nginx나 apache를 통해 블로그 운영하기로 결정했다. 사이트를 이전하는 것은 크게 걱정이 없었지만, 시작하기 전부터 Let’s Encrypt SSL 설정, 갱신, 사이트 백업 설정 등이 귀찮을 것으로 예상되었다. 그래서 가능하면 안 하려고 했지만 외부 이미지 접근이 막혀있는 것이 너무나 싫었다.
일단 기존 웹호스팅에서 블로그 백업받아서 새 서버에 설치했다. 어렵지 않았다.
이제는 Let’s Encrypt SSL 인증서를 설치할 차례다!
Let’s Encrypt가 도메인 소유권을 확인하기 위해 HTTP-01, DNS-01, 또는 TLS-ALPN-01 챌린지 중 하나를 사용하는데, HTTP-01 방법을 사용하기 위해서는 특정 URL에 콘텐츠가 호출되도록 (HTTP 200을 리턴하도록) 해야 한다. 나는 아직은 도메인을 새로운 서버로 이동한 상태가 아니므로 기존 블로그에 그 콘텐츠를 올려야 한다. 그 과정이 좀 귀찮고, 새 서버를 가리키도록 DNS를 미리 변경하고 싶지는 않았다. DNS변경은 바로 되는 것이 아니기도 하고..
DNS-01 이라는 방법은 도메인 정보에 TXT 레코드를 추가하는 방법인데, 그 방법을 해보려고 하다가 갑자기 CloudFlare가 떠올랐다.
CloudFlare 무료 버전 CDN을 사용하면 SSL 설정이 필요없을 뿐 아니라 자동갱신 설정을 할 필요도 없으리라는 생각이 들었다. Let’s Encrypt 인증서 기간은 90일이라서 생각보다 자주 갱신되어야 하는데, 자동생신은.. 문제는 없겠지만, 왠지 불안하다.
나는 개인적으로 CDN 설정을 직접 해 본 적은 없었지만 CloudFlare 설정은 한번 해보고 싶었기에 CloudFlare 연동을 해보았다. 생각보다 어렵지는 않아서 origin과 연결되었으나 /wp-admin 관리자 화면 접속시에 redirect loop 발생 했다. 원인은 origin을 https가 아닌 http로 연결한 것과 연관된 side-effect 이었던거 같다. (Flexable 모드)

조금 알아보니 CloudFlare 는 origin과 연결에만 쓸 수 있는 용도로 한정된 SSL 인증서를 제공했다. 그런데 기간이 15년이다! Let’s Encrypt 처럼 도메인 소유권을 따로 인증할 필요가 없이 받을 수 있었다. 그것을 origin 가상서버의 nginx에 설치하고 Full(Strict) 모드로 연결하니 해결.

웹호스팅+CloudFlare 블로그 설정하기
그런데 Full (Strict) 모드로 연결해두고 생각해보니 그러면 기존 저렴한 웹서버 호스팅을 origin으로 두고 (웹호스팅 origin 의 인증서는 호스팅에서 관리해줌) CloudFlare Full (Strict) 모드를 사용하면 관리의 편의성 (웹호스팅 사용) 과 외부 이미지 공유 문제를 모두 해결 할 수 있지 않을까라는 생각이 다시 들었다. 내 가상서버는 다양한 시도를 하는 곳이기 때문에 블로그에 안정성에 영향을 미칠 수 있는데 비해 웹호스팅은 독립적으로 관리되니까 편하고 백업을 관리하기에도 웹호스팅이 제공하는 기능이 더 편리했다.
결국 CloudFlare 가 내 저렴이 iwinv 웹호스팅을 가리키도록 설정 하였고, 그렇게 설정해보니 모든 것이 해결되었다! Facebook URL debugger에서도 공유 이미지를 잘 불러온다.
그런데 크롬 라이트하우스 점수는 낮아졌다. 원래 100점이었는데 90점 정도로 낮아졌다. 성능점수가 떨어졌는데 왜일까? 그 원인은 천천히 찾으려고 한다.
현재로서는 내가 원했던 저렴한 운영 비용(호스팅 한달 천원, 도메인 별도), 최소한의 운영 노력, 콘텐츠 직접 소유와 마케팅 기능, 보안과 속도, 접근성을 모두 충족하는 설정이 된 것 같아 너무나 만족스럽다. 이제는 열심히 글을 좀 써야겠다.