GitHub Actions를 이용해 Hugo 기반 블로그를 위한 CMS(Contents Management System) 구축
아래 글을 읽은 후에 본 글을 읽기를 추천합니다. 깃허브(GitHub) + 휴고(Hugo), 블로그 효과적으로 관리하기 이전 글에서도 말했지만, 기존의 블로그를 블로거(Blogger)로 이전하려고 했던 두 번째 이유가 번거로운 글쓰기였다. 지킬(Jekyll)의 경우에 블로그를 빌드하기 위해서는 루비(Ruby)와 지킬이 설치된 윈도(Windows)나 리눅스(Linux), 맥(Mac)이 필요하다. 상상해보자. 아름답고 한적한 카페에서 커피를 홀짝이는 나의 모습을. 블로그에 글을 쓰려고 노트북을 꺼냈지만, 루비와 지킬이 깔려있지 않아 당황하는 모습을. 설상가상으로 인터넷이 되지 않아 갖고 있던 핸드폰을 꺼내 테더링(Tethering) 하는 모습을. 휴고(Hugo)도 마찬가지다....
깃허브(GitHub) + 휴고(Hugo), 블로그 효과적으로 관리하기
전편에서는 휴고를 이용하여 블로그를 생성하고 테마를 적용하는 방법을 알아보았다. 이번 편에서는 깃허브를 사용하고 있다는 가정 하에 서브모듈(Submodule)이라는 기능으로 어떻게 소스코드를 효율적으로 관리할 지에 대해서 고민한 결과를 정리해보았다. 휴고로 빌드한 소스코드 구조 ¶ 앞서 휴고로 블로그를 빌드했다면 아래와 같은 디렉토리 구성이 만들어졌을 것이다. 다 설명하기 보다는 몇 가지 필요한 폴더만 보자. . ├── archetypes ├── config.yml ├── content ├── data ├── layouts ├── public ├── resources ├── static └── themes 8 directories, 1 file themes 폴더 ¶ themes 폴더는 블로그에 적용하고 싶은 테마가 위치하는 곳이다....
휴고(Hugo)로 만든 블로그에 이쁜 테마 적용하기
보통은 지킬이나 휴고를 이용한 블로그 구축 방법을 보면, config.yml 또는 config.toml 부터 설명할 것이다. 심지어 지킬은 공식 홈페이지에서 루비 사용법부터 언급하고 있으니 배보다 배꼽이 더 큰 상황이랄까. config.toml은 블로그에 관련된 각종 설정들을 담는 중요하고 필수적인 파일이지만 필자는 config.yml에 대해 설명하는 문서의 단 한 줄도 보지 않았다. 블로그를 구축하면서 필요할 때마다 건드려도 충분하고, 오히려 블로그가 개선되어지는 모습에 재미를 느끼게 될 것이다. 그래서, 바로 테마를 적용해 보도록 할 것이다. 테마 선택 ¶ 아래 페이지는 휴고 측에서 걸어놓은 테마들을 전시하고 있다....
다시 정적 사이트 생성기(SSG: Static Site Generator)로...
이전 블로그로의 회귀 ¶ 1편에서 필자는 지킬(Jekyll)이라는 유명한 도구와 깃허브 페이지(GitHub Pages)로 호스팅되는 기존 블로그를 오랫동안 방치운영하고 있었지만, 여러가지 이유로 구글의 블로거(Blogger)로 이동했다고 말했다. 그런데 기존 블로그를 계속 사용하기로 결정하였다. 여기에는 여러가지 이유가 작용했다. 애드센스(Google Adsense)의 미승인 ¶ 구글이 제공하는 애드센스는 웹 사이트의 화면 상 일정 공간에 광고를 허락하고 그에 대한 보상을 받을 수 있는 서비스다. 구글이 지금과 같이 글로벌 기업으로 자리잡은 데에는 바로 이런 광고 모델 덕분이라고 할 수 있다....
빠른 정적 사이트 생성기(SSG: Static Site Generator), 휴고(Hugo)란?
기존에 사용했던 지킬(Jekyll)은 다소 생소한 언어인 루비(Ruby)로 구현되어 있어 개인적으로 설치와 커스터마이징, 유지보수에 어려움이 있었다. 그렇다보니 글쓰기에만 집중할 수 블로그 플랫폼을 찾아보기 시작했고, 여러 좋은 서비스들이 많이 있었지만 전통?의 블로거(Blogger)를 선택하였다. 실제로 블로거를 이용하여 새 블로그를 만들었으나 직후에 포기하고 다시 정적 사이트 생성기(SSG: Static Site Generator)를 이용하여 기존 블로그를 살려보기로 결정하였다. 2편의 말미에 언급했듯이 다시 지킬을 쓰고 싶지 않았다. 지금은 당시에 비해 대안이 많기 때문에 하나하나 둘러보기 시작했고 결국, 휴고(Hugo)에 마음이 갔다....
gRPC를 이용한 Containerd의 통신 과정
Containerd를 이용해 컨테이너 생성하기 ¶ 아래 코드는 Containerd를 이용하여 컨테이너를 생성하는 예이다. 우선 UNIX 도메인 소켓인 containerd.sock을 이용하여 Containerd에 연결한다. Containerd는 백그라운드(background)에서 항상 동작하는 데몬(daemon) 프로세스이다. 그 후, Client 객체를 통하여 Containerd로 하여금 최신 데비안(Debian) 리눅스 이미지를 받아 데비안 컨테이너를 생성한다생성하도록 한다. 매우 직관적이고 간단하지 않은가? 여기서 알 수 있는 것은 Client 객체를 통하여 해당 프로세스와 통신한다는 점이다. 이 짧은 코드에서는 확인할 수 없지만 Client와 Containerd 간의 통신 과정을 본 포스트에 정리한다....
컨테이너(Container) 관련 기술들 간의 관계, 그리고 Containerd
“Dockershim deprecated with the release of Kubernetes 1.24” ¶ 위 문장은 더 레지스터(The register)에 실린 기사의 헤드라인이다. 문장을 보고 어떤 생각이 드는가? 나는 컨테이너가 구현하는 기술이 궁금할 뿐이지, 관련 기술로 먹고 사는 것은 아니라서 별 생각은 없었다. 그러나 관련 업계에서는 매우 큰 화두였었구나 하는 것을 최근 알게 되었다. 실제로 쿠버네티스(Kubernetes) 측에서 아래와 같은 글을 기고했을 정도로 말이다. “Don’t Panic: Kubernetes and Docker”, Kubernetes Blog 쿠버네티스의 창시자인 조 베다(Joe Beda)는 위와 같은 트윗을 했다....
머리 아픈 블로그 플랫폼 선택기
정적 사이트 생성기(SSG: Static Site Generator) ¶ 지킬(Jekyll)이라는 도구가 등장하면서 정적 사이트 생성기(SSG: Static Site Generator)가 각광받던 때가 있었다. 나도 지킬과 깃허브 페이지(GitHub Pages)를 이용하여 오래 전에 블로그를 구축했었다. 정적 사이트 생성기는 데이터베이스를 포함해 웹 페이지를 렌더링(Rendering) 하는 데 필요한 백엔드(Backend) 솔루션들을 구축하지 않아도, 잘 알지 못해도 훌륭한 사이트를 만들어 준다는 장점이 있다. 결과물인 정적 사이트는 오로지 HTML(Hyper-Text Markup Language), CSS(Cascading Style Sheet), JavaScript로만 구현되어 오로지 브라우저만 있으면 동작한다....
크로미움에 기여하기
#Chromium 크로미움에 처음 기여할 때 밟았던 절차와 내가 생각하는 주의 사항들을 기록한다. 크로미움은 큰 오픈소스 커뮤니티이기 때문에 관련 절차를 매우 상세하게 소개하고 있다. 검색해보면 참고해 볼 만한 제 3자의 포스트들도 많다. 나는 주로 아래 세 개의 자료를 참고하였다. 처음 두 개는 크로미움 커뮤니티에서 제공하는 공식 문서이다. 마지막은 제 3자가 작성한 것으로 좀 더 친근하고 쉽게 작성되어 기여 절차를 직관적이고 빠르게 이해하는 데 도움이 되었다. Contributing to Chromium Commit Checklist for Chromium Workflow Contributing to Chromium: an illustrated guide 1....
ChromeOS의 Ash Shell 분석 1
#ChromeOS #Ash Ash(Aura Shell)는 Aura를 기반으로 하는 쉘이다. Shell 클래스가 핵심적인 역할을 하는 것으로 보인다. Shell 객체는 싱글턴 객체이고 init 메소드를 통하여 컨트롤러라 불리우는 다른 객체를 여럿 생성하고 초기화한다. 아래는 배경화면에 관한 컨트롤러를 생성 및 초기화 하는 부분이다. Ash::Shell::Init() { ... wallpaper_controller_ = std::make_unique<WallpaperControllerImpl>(local_state_); ... } 싱글턴 객체인 Shell 객체를 전역적으로 참조하기 위하여 Shell 클래스는 정적 메소드인 Get 메소드를 제공한다. WallpaperControllerImpl 객체는 Shell 객체에 대하여 자기 자신을 옵저버로 등록한다. 또한, WindowTreeHostManager 객체에 대해서도 자기 자신을 옵저버로 등록한다....