UP | HOME

하나씩을 웹으로 퍼블리싱하기

Table of Contents

1. 목표

  • [ ] org 파일들을 웹에서 볼 수 있도록 퍼블리싱하자
  • [ ] 내 개인 파일들은 제외하자

아래는 꼭 필요한 건 아니고 찬찬히 생각해볼 목표

  • 용량 큰 정적 파일들을 다른 곳에 배포하기 (이미지 파일 등을 다른 스토리지 서비스에)
  • CI/CD 도입하기

2. 로컬에서 org → HTML

org-publish를 이용하면 쉽게 org 파일을 HTML로 만들 수 있다. 다만 조금 설정이 필요하다. The Org Manual에 관련 내용이 잘 나와있다: Publishing (The Org Manual).

먼저 org-publish-project-alist 변수를 정의한다. alist는 association list, 즉 연관 리스트라는 뜻이다. lisp은 헷갈리게 모든 곳에 괄호()를 쓰기 때문에 알아먹기 힘들었다. 차라리 Clojure처럼 vector, list, map을 구분해서 썼으면 덜 헷갈렸을텐데.

;; 각각의 아이템은 아래와 같이 정의한다
("project-name" :prop1 val1 :prop2 val2 ...)

;; '() 안에 각각의 아이템을 넣는다
'(("project1" :prop1 val1)("project2" :prop1 val1))

setq를 이용해서 아래와 같이 변수에 연관 리스트를 할당한다. Doom Emacs를 쓰고 있어서 config.elafter!를 이용하여 아래와 같이 정의하였다:

(after! org
│ (setq org-publish-project-alist
│ │ │ │ '(("hanassig"
│ │ │ │ │ │;; 소스 파일이 있는 디렉토리
│ │ │ │ │ │:base-directory "~/Nextcloud/notes/notes/"
│ │ │ │ │ │;; 내보낼 디렉토리
│ │ │ │ │ │:publishing-directory "~/Nextcloud/notes/dist/"
│ │ │ │ │ │;; 대상 소스 파일의 확장자
│ │ │ │ │ │:base-extension "org"
│ │ │ │ │ │;; 각 파일에 적용할 publish 함수. 나는 HTML로 내보낼 거니까 아래와 같이:
│ │ │ │ │ │:publishing-function org-html-publish-to-html
│ │ │ │ │ │;; 그 외의 옵션들
│ │ │ │ │ │:html-link-home "/"
│ │ │ │ │ │:html-link-up "/"))))

org-publish-all을 쓰면 변수로 정의한 모든 프로젝트를 publish 할 수 있다. 연달아 쓰면 수정한 글만 다시 publish된다. 설정을 바꿨거나 혹은 다른 이유로 전체 글을 다시 내보내고 싶다면 SPC ;로 Eval을 켜고 (org-publish-all t)로 옵션을 줘서 실행하면 된다.

2.1. inline 마크업에 조사를 붙이고 싶어요

org는 다 좋은데 이상한 특징이 있다. ==// 같은 인라인 마크업은 바로 뒤에 글자가 붙으면 동작을 하지 않는다.

아래와 같이 쓰면 “예시”가 강조되지 않는다

이 텍스트는 *예시*입니다

아래와 같이 써야 “예시”가 강조된다.

이 텍스트는 *예시* 입니다

Emacs 안에서 편집할 때에는 아래와같이 org-emphasis-regexp-components 변수를 재정의하여 활용하고 있고, 잘 동작한다.

(after! org
│ (setcar org-emphasis-regexp-components " \t('\"{[:multibyte:]")(setcar (nthcdr 1 org-emphasis-regexp-components) "[:multibyte:]- \t.,:!?;'\")}\\")(org-set-emph-re 'org-emphasis-regexp-components org-emphasis-regexp-components))

3. 내 개인 파일들 제외하기

크게 두 가지 방법이 있다. 다른 방법이 더 있긴 한데, (org-crypt를 쓴다거나) 간단하게는 아래 방법으로 충분하다:

  1. gpg로 파일을 암호화하기
  2. :noexport: 태그 달기

3.1. gpg로 파일을 암호화하기

epa-encrypt-file 명령어를 쓰면 이미 있는 파일을 암호화할 수 있다. 암호는 gpg 키를 생성해 쓸 수도 있고, passphrase만 넘겨서 암호화할 수도 있다. 암호화한 파일은 원래-파일-이름.원래-확장자.gpg로 저장된다. 예를 들어, publish-hanassig.orgpublish-hanassig.org.gpg가 된다.

emacs를 열고 파일을 최초로 열 때, gpg키와 passphrase가 필요하다. 한 번 인증하고 나면 일반 파일처럼 자유롭게 편집할 수 있고, 저장할 때 자동으로 다시 암호화되어 저장된다.

3.2. noexport 태그 달기

noexport 태그가 달린 섹션은 export 되지 않는다. 파일 중간에 웹으로 내보내고 싶지 않은 단락에 :noexport:로 태깅면 된다.

** 중간 헤더  :noexport:

파일 전체의 내용을 숨기고 싶다면 FILETAGS 속성에 태그를 주면 된다. 단, 파일 자체는 export되고, 내용만 숨겨진다.

#+title: 하나씩을 웹으로 퍼블리싱하기
#+filetags: :noexport:

4. 어디에 올리지?

  • GitHub Pages
  • CloudFlare Pages

CloudFlare Pages로 결정

5. 참고

Author: 안녕

Created: 2024-12-10 Tue 22:08