원래 0xF.kr 서버는 AWS에 살고 있었는데, GCP와 비교하여 여러 가지 불편한 점들이 있었습니다. 그래도 뭐, 여태껏 잘 돌아가고 있었으니 그냥 놔 두었죠.
그런데, 서버 리눅스 (정확히는 Debian) 버전을 올리려다, 큰 실수를 해 버리는 바람에 서버가 죽어버렸습니다. 중요한 자료는 GitHub이나 기타 다른 곳에 백업이 되어 있지만, 그래도 뼈아픈 일이었습니다.
거기에다가, 최근에 바쁜 일들이 많이 있어서, 홈페이지를 다시 세우는 데 소홀해졌었습니다. 그래서 지금까지도 0xF.kr는 반 죽어있는 상황입니다. (몇 가지 업그레이드되어 돌아온 게 있기는 합니다. s.0xF.kr이라던가...)
그런데 이것 저것 뻘글을 적어 올릴 곳이 없어서 답답하더라고요. 그래서 블로그를 다시 구축하기로 마음을 먹었습니다.
사용한 기술 스택
Static Site Generator
바닥부터 만드는 게 제일 마음 편하긴 해도, 너무 시간이 오래 걸리고 귀찮기도 하죠. 그래서 기존에 있던 솔루션 중 제 입맛에 맞는 걸 골라 쓰기로 마음 먹었습니다.
참고로 이전에 썼던 건 Hexo였습니다.
제가 원하는 것은 다음과 같았습니다.
- 높은 보안성
- 단순한 테마 커스터마이징 이상의, 이왕이면 HTML을 직접 조작할 수 있는 정도의 높은 유연성
- 이왕이면 JavaScript 기반 (다른 언어 인터프리터/컴파일러를 안 깔고 쓸 수 있었으면...)
- Markdown을 이용한 게시글 작성 (핫 리로딩이 되면 좋음)
- Syntax highlight 지원
- LaTeX 수식 지원
예를 들어, Wordpress는 보안적으로 도저히 믿을 수도 없고, PHP를 필요로 하기 때문에 완전히 아웃입니다.
"높은 보안성"을 제일 쉽게 달성할 수 있는 방법은 그냥 블로그를 통째로 정적 웹 사이트로 만드는 것입니다. 즉, 제가 원하는 것은 "JavaScript 기반의, 마크다운으로 작성한 글을 입력으로 받을 수 있는, 확장성 높고 유연한 정적 웹 사이트 생성기"가 됩니다.
궁리 끝에 11ty를 골랐습니다. 유연성이 너무나도... 뛰어나서... 템플릿을 만들고 설정하는 데 한 세월이 걸리는 것이 단점이지만... 제 니즈를 어느 정도 충족시킵니다.
문법 강조도 지원하고...
function main() {
const message: unknown = "Hello, world!";
console.log(message as string);
}
// ?!
if(__name__ === '__main__') {
main();
}
KaTeX를 이용하면 LaTeX도 사용 가능하죠.
CD
기존에 블로그가 방치되었던 가장 큰 이유가 매번 글을 적을 때 마다 사이트를 직접 생성해 줘야 해서였는데, 이 귀차니즘을 해결하기 위해 다음과 같은 해법을 생각했습니다.
- 블로그를 GitHub에 올림.
- 워크플로우를 통해, 블로그 글이 업데이트 될 때 마다 사이트 내용을 artifact로 생성.
- 생성된 사이트를 전달받아 자동으로 deploy.
그런데, 3번 과정은 어떻게 해야 하죠...?
뭐, 해법이야 여러 가지가 있을 수 있지만, 해법들은 뭔가 다 마음에 안 들거나 너무 복잡하고, 제 서버에 직접 띄우는 선에서 최대한 심플하게 가고 싶단 말이죠...
그래서 워크플로우 완료 웹훅을 받으면 아티팩트를 받아 지정된 경로에 푸는 프로그램을 만들어 보았습니다.
(출처, CC BY-NC 2.5)
뭐, 최소한의 기능을 하긴 합니다만... 잘 돌아가니까 당분간은 몇몇 프로젝트에 이걸 쓰려고 합니다.
(참고로 s.0xF.kr는 GitHub Pages로 띄워놓고 있는 중입니다.)
스타일
블로그에 쓰인 스타일은 간단한 HTML 웹 페이지에 쓰려고 제가 만든 NalCSS를 사용합니다만, 이 CSS 파일은 아직 부족한 점이 많으니 참고만 해 주세요.
TO-DO
아직 블로그에 넣지 않은 기능들은 다음과 같습니다.
- "맨 위로 가기" 버튼 넣기
댓글 기능 (utterances가 유력한 후보)- 더 삐까뻔쩍한 블로그 헤더
About 페이지에 내용 채워넣기- 404 페이지
그래도 뭐, 게시글를 적으면서 천천히 작압해 나가면 되겠죠...?