주소가 github.io인 개발 블로그들이 눈에 많이 띄었다.
그래서 찾아 헤매던 도중 Jekyll, Hexo, Hugo 등 Static Site Generator의 존재를 알게 되었다.
Static Site Generator와 Github Page의 조합으로 Devlog로 사용할 개인 블로그를 만들기로 했다.
놀다 지친 여름휴가 막바지에 집중공략을 시작!
1. Static Site Generator 란?
2. Static Site Generator 선택 과정
3. Hugo, 너로 정했다!
4. Hugo + Github Page 만드는 과정
5. 댓글 위젯 추가하기 (Utterances 사용)
6. 사용 후기 (계속 추가 예정)
이 글이 정적 웹사이트 생성기와 동적 웹사이트 생성기의 차이를 잘 설명해주고 있다.
이 곳에서 모든(?) Static Site Generator들을 한눈에 볼 수 있었다.
이 글에서 가장 많이 사용하는 Jekyll , Hexo, Hugo를 비교하여 아래 내용을 참고하였다.
Jekyll
-루비 기반
-현재 가장 인기 있음(깃헙 별 수 제일 많음)
-한글 레퍼런스도 제일 많음
-느리다는 제보가 많음(몇 십개의 포스팅 뿐인데도 빌드 한번 다시 하는데 5분씩 걸린다고)
-윈도우 공식 지원 안됨
Hexo
-자바스크립트(Node.js) 기반
-한글 레퍼런스 꽤 많음
-메인 개발자가 손을 놓은 듯
-개발자가 중국인? 이라 구글링하면 중국어 글이 많이 나옴
Hugo
-Golang 기반
-빌드 빠름
-문서화 잘돼있음
-깃헙 별 수가 헥소보다 많음
-한글 레퍼런스가 거의 없음
출처: http://tadakichi.tistory.com/188
- Go로 제작되었다. (Go를 공부중이다.)
- Hugo는 런타임에 다른 의존성이 필요하지 않아 빌드시간이 세계에서 제일 빠르다. ("Hugo is the world’s fastest static website engine.")
- 오픈소스에 기여할 기회 !! (Hugo는 한글 Reference가 거의 없는 오픈소스이며 Jekyll에 비해 기여할 수 있는 여지가 남아있다.)
3.2. CloudZ Labs에서 Github Page와 환상의 조합인 Jekyll 대신 Hugo를 선택한 이유
- "Jekyll을 사용할 경우, 별도의 Build 과정 없이 Repository에 Push만으로 작성한 글들이 알아서 Publishing됩니다. 하지만, 글이 많아질 수록 Jekyll의 빌드 성능은 현저하게 저하됩니다. 하지만, Hugo는 Build 과정이 있어도 성능저하 없이, 빠르게 글을 Publishing할 수 있습니다. Go나 기타 종속성 없이, Hugo CLI를 통해서 쉽게 블로그 및 글을 생성할 수 있습니다. 그래서, Hugo로 블로그를 만들게 되었습니다."
나도 멋깔나게
$ brew install hugo
를 mac 터미널에 입력해서 설치하고 싶었다.
하지만 현실은 WINDOWS...
Giraffe Academy의 Windows에서 Hugo설치하기 이 영상 하나면 설치는 쉽다. (젊은 형아가 영어로 설명해줌)
- hugo 공식 깃헙에서 운영체제에 맞는 최신버전 다운로드
C:\Hugo\bin
디렉토리 생성해서 다운받은 압축파일 해제- 어느 위치에서나 Hugo가 실행될 수 있도록
$ set PATH=%PATH%;C:\Hugo\bin
명령으로 환경변수에C:\Hugo\bin
추가 - 명령 프롬프트에
$ hugo version
혹은$ hugo help
로 동작 확인
- 하나는 Hugo의 컨텐츠와 소스파일들을 포함할
<YOUR-PROJECT>
저장소 생성 (나의 경우blog
라는 이름으로 생성) - 다른 하나는 렌더링된 버전의 Hugo 웹사이트를 포함할
<USERNAME>.github.io
저장소 생성 (integerous.github.io
)
$ hugo new site blog
명령으로 로컬에서 컨텐츠를 관리하기 위한 장소(Hugo/blog) 생성C:\Hugo\blog
에서$ dir
로 directory structure를 확인할 수 있다.
- https://themes.gohugo.io/ 에서 원하는 테마를 선택한다.
- 선택한 테마의 github에서 저장소 주소를 복사한다.
C:\Hugo\blog\themes
에 선택한 테마를 clone한다.$ git clone https://github.com/선택한/테마
config.toml
파일을 선택한 테마의 설명서에 따라 수정한다.
- 깃헙에 만든
blog 저장소
를 local의 blog 디렉토리의 remote로 등록한다.C:\Hugo\blog
로 이동$ git init
$ git remote add origin git@github.com:integerous/blog.git
integerous.github.io 저장소
를 blog의 submodule로 등록한다.$ git submodule add -b masater git@github.com:integerous/integerous.github.io.git public
- 이렇게 함으로써
hugo
명령으로public
에 웹사이트를 만들 때, 만들어진public
디렉토리는 다른 remote origin을 가질 것이다.
$ hugo new post/test1.md
명령으로 파일을 생성하면\content\post\test1.md
- 컨텐츠가 어떻게 보여지는지 확인하려면
$ hugo server
혹은$ hugo server -D
로 웹서버 실행http://localhost:1313/
에 접속해서 확인- -D 옵션은 draft 문서들도 보여지는 옵션. 다른 옵션은 여기에서 확인
C:\Hugo\blog
로 이동$ hugo -t 테마이름
명령을 통해 테마가 적용된 블로그 내용을 public에 생성한다.$ cd public
public 디렉토리로 이동하여$ git add .
수정된 파일들을 index에 올린다.$ git commit -m "커밋메세지"
변경 내용을 commit하고$ git push origin master
commit을 Integerous.github.io에 푸시blog 저장소
에도 변경내용 푸시$ git add .
$ git commit -m "커밋메세지"
$ git push origin master
- Hugo Docs의 deploy.sh 파일을 활용하여 쉘스크립트 작성
#!/bin/bash echo -e "\033[0;32mDeploying updates to GitHub...\033[0m" # Build the project. hugo -t hugo-theme-geppaku # Go To Public folder cd public # Add changes to git. git add . # Commit changes. msg="rebuilding site `date`" if [ $# -eq 1 ] then msg="$1" fi git commit -m "$msg" # Push source and build repos. git push origin master # Come Back up to the Project Root cd .. # blog 저장소 Commit & Push git add . msg="rebuilding site `date`" if [ $# -eq 1 ] then msg="$1" fi git commit -m "$msg" git push origin master
아웃사이더님의 블로그 글에서 Utterences의 존재를 알게 되었다.
Hugo 공식 문서에 소개된 댓글 위젯 중 Utterences는 없길래 생애 처음으로 오픈소스에 PR을 날려봄!!
Utterance 프로젝트의 작동 방식을 소개하자면,
Github의 이슈 검색 API를 사용해서 각 글에 해당하는 이슈가 생성되고(최초 댓글 작성 시),
댓글들은 해당 글로 생성된 이슈에 대한 댓글로 추가되는 방식이다. 댓글은 Primer를 이용해서 Github 스타일로 보여진다.
- Github에 public 저장소를 만들고(blog-comments 등으로)
- Utterance document에서 방금 만든 저장소를 입력하고(나의 경우 Integerous/blog-comments)
- 블로그 글과 Github 이슈를 매핑할 방법 6가지 중 한 가지를 선택하면
- 밑에 아래와 같은 script를 자동으로 생성해준다.
<script src="https://utteranc.es/client.js" repo="integerous/blog-comments" issue-term="pathname" crossorigin="anonymous" async> </script>
- 위의 script를 본인의 블로그 템플릿중 원하는 위치에 넣으면
- 끝!
Gist는 마크다운 파일에 embed 되지 않는다. 하지만 Hugo, Jekyll 에서는 가능하다.
- Gist에 코드를 작성
- java 코드면 파일명을
파일명.java
로 만들고Create public gist
클릭 - 생성되는 gist의 sha1 hash(url 끝부분)을 복사
themes/본인테마/layouts
디렉토리에shortcodes
폴더를 생성shortcodes
폴더 내에gist.html
파일 생성 (파일명은 상관없지만 gist로 하는게 정체성이 분명함)gist.html
에<script type="text/javascript" src="http://gist.github.com/{{ .Get 0 }}.js"></script>
입력- 여기서
{{ . GET 0 }}
에 들어갈 부분이 위에서 복사해둔 각 gist의 sha1 hash(url 끝부분)이다.
- 여기서
- 아래와 같이 글 내용 중 코드가 들어갈 부분에
{{< gist url끝부분 >}}
을 넣어주면,
## 3. instanceof 연산자
- 참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 `instanceof` 연산자를 사용한다.(주로 조건문에 사용)
- `instanceof`를 이용한 연산 결과로 `true`를 얻었다는 것은 참조변수가 검사한 타입으로 형변환이 가능하다는 뜻이다.
{{< gist a5cda350b8a973e3940b2e59a55229ea >}}
- 위 처럼 마크다운 파일(.md)에도 gist를 삽입할 수 있다. (행복)