TIL 자동화 도전기 🤓

Introduction

나는 2021년 12월 무렵부터 TIL(Today I Learned) 이라는 Github Repository를 관리하고 있다.

기술 블로그를 따로 운영함에도, 학습 내용을 TIL에 정리하게 된 이유는 다음과 같다.

  1. 블로그에는 잘 정리된 포스팅 형태로 글을 게시하고 싶었기 때문에, 정말 날 것 그대로의 학습 내용을 저장할 장소가 필요했다.
  2. 마크다운 문서를 예쁘게 보여줬으면 좋겠으므로, 먼저 Notion을 이용해 학습 정리를 하게 되었다.
  3. 그러나 Notion은 학습 내용을 여러 사람에게 공유하기 어려워(단순히 문서를 Public으로 설정하는 것은 접근성이 떨어질 것 같아) Github Public Repository를 별도로 운영하게 되었다.

Problem

그러나 개인적으로 생각하는 Github의 문제점은 사이드 바가 기본 옵션으로 제공되지 않는다는 것이다.

이 때문에 원하는 문서의 위치를 파악하기 어렵고, 전체 문서를 계층화해서 확인하기 어렵다.

(물론 octotree 라는 크롬 확장 프로그램이 있고, 나도 쓰고 있긴 하지만 이걸 모르는 사람도 많고 무언가를 설치해야 한다는 불편함이 있다.)

그래서 나는 Repository 내 README 파일에서 TIL의 전체 목차를 제공하기로 했다.

1차 자동화 - 목차 자동 생성기 구현

하지만 목차를 직접 작성하는 건 매우 귀찮은 일이 될 것이었고, 유지보수하기도 어렵다.

그래서 Python 언어를 이용해 현재 디렉토리를 기준으로 README를 자동 생성하는 프로그램 readme-manager(리드미 매니저)를 작성하게 되었다.

리드미 매니저가 생성해주는 README 파일은 아래와 같이 나타난다.

아래와 같이 디렉토리 내 디렉토리(depth)도 지원한다. 물론 depth가 너무 깊어지면 타이틀 크기가 컨텐츠보다 작아지는 문제가 생길 수는 있을 것 같다.

아무튼 이렇게 README를 자동생성할 수 있게 되었기 때문에, 새 파일을 업로드하게되면 리드미 매니저를 실행해 목차를 업데이트한 뒤 Update README.md 커밋을 함께 원격 저장소로 업데이트하게 되었다.

그러나 어느 순간부터 리드미 매니저를 실행하는 것조차 슬슬 귀찮아지기 시작했다. 한두 번 미루다 보니 목차 업데이트가 늦어지는 상황이 발생했고, 결국은 리드미 매니저가 동작해 README를 업데이트 하는 과정 그 자체를 자동화해야겠다는 생각이 들었다.

2차 자동화 - README 업데이트 자동화

여기에서는 내가 아주 좋아하는 툴인 Github Action을 이용하기로 했다. Github Action이란, Github Repository에 특정 yml 파일을 생성해 Github이 빌려주는 컴퓨터가 내가 정의한 일을 원하는 때에 수행해 주는 기능이다. 무려 퍼블릭 저장소에서는 공짜다. (공식 문서 참조)

내가 Github Action을 통해 자동화하려는 Workflow는 아래와 같다.

  1. main 브랜치에 새로운 커밋이 push되면, 리드미 매니저를 실행한다.
  2. 리드미 매니저 실행 결과 생성된 README.md를 add → commit → push 한다.
    • 커밋 메시지는 Update README.md

위와 같은 workflow를 yml 파일로 잘 작성해 .github 디렉토리의 workflows 디렉토리 내에 업로드하면, main 브랜치에 새 파일이 push될 때마다 아래와 같이 action이 동작해 README 파일을 새로 만들고 Update README.md 커밋을 찍어준다.

정말 별 것 없는 Workflow임에도 이제 나는 TIL의 리드미 관리로부터 책임 분리당해서 자유로워졌다.

단일 책임 원칙 (Single responsibility principle)에 맞게 나는 이제 학습한 내용을 리포지토리에 올리기만 하면 되고 README를 업데이트할 책임은 리드미 매니저와 Github Action이 가진다

마치며

내 TIL 저장소와, 위에서 자동화를 위해 사용한 파일들은 아래 링크에서 확인할 수 있다.