-
[자동화] 매일 커밋하는 TIL 파일, 매번 생성하기 귀찮다면Dev-Diary 2023. 5. 15. 15:32
#crontab #zsh
☑️ 개요
작년부터 나의 오랜 친구가 개발을 배우기 시작했다. 나는 백엔드 친구는 프론트엔드로, 내가 생각하지 못한 관점에 대해서 가까이 들을 수 있게 되었다. 우리의 취준기간이 겹치면서 매일 감시 아닌 감시를 하며 공부를 하다가, 매일 TIL을 작성하기로 했다.
공용 레포에 각자의 폴더에 매일 그 날 공부한 내용을 커밋하기로 규칙을 정하였다. 매일 공부한 내용을 복습하면서 간략하게 정리도 할 수 있고 좋은 기록이 될 것 같았다.
깃에서도 바로 볼 수 있도록 파일 형식은 마크다운, 파일명은 날짜로 통일했다. 내용은 자유여서 아래와 같은 형식으로 작성하고 있다.
내용 첫 줄에는 날짜와 요일, 아래에는 하루를 복기하면서 TIL을 작성한다. 전 날 생성한 파일을 복사+붙여넣기해서 파일명과 첫 줄만 수정하였는데, 첫번째 줄을 매일 바꾸는게 여간 귀찮은게 아니었다. 숫자 몇 개 바꾸는건 어렵지 않았지만 매일 반복된 작업을 하는 시간이 너무 아까웠다. 게다가 내용은 수정하지 않고 파일명만 바꿔서 커밋하는 경우도 생겨서 같은 일을 반복하는 불편함이 있었다.
그래서 파일명과 내용의 불일치를 해결하고 매일 낭비되는 시간을 줄이기 위하여 무조건 자동화해야겠다고 마음먹었다.
☑️ 추천 독자
- TIL 하면서 매번 파일을 생성해야 하는 사람 / 방법만 알고 싶은 사람 (추가 지식은 작성하지 않음)
필자는 shell script를 처음 접해봤지만 금방 만들었다. 그만큼 짧고 방법만을 작성한 포스팅이다.
☑️ 설정 환경
- Macbook air M2 (mac OS 13.3.1)
맥의 터미널에서 기본으로 제공되는 zsh shell을 이용한다.
✅ 순서
구상이 필요한 내용은 다음과 같다.
파일명 년-월-일.md 내용 (첫 줄) ## 년-월-일 (요일) 1. 스크립트 생성하기
파일을 생성하고, 내용을 추가하는 스크립트를 먼저 만든다.
(1) 스크립트 파일 생성하기
vi TIL.sh
sh 파일에 실행할 스크립트를 작성한다.
(2) 날짜, 요일 변수 지정
날짜는 파일 이름과 내용에 사용하고, 요일은 내용에만 사용한다. (Friday -> Fri의 축약어 사용)
today=$(date "+%Y-%m-%d") day=$(date "+%a")
(3) 파일 생성하기
원하는 위치에 파일을 생성한다.
fileName=${today}".md" touch /Users/.../${fileName}
(4) 생성한 파일에 내용 추가하기
echo 명령어를 사용하면 >> 연산자로 내용을 추가할 수 있지만, Linux tee 명령어 게시글을 참고하여 tee 명령어를 사용하였다.
주의 : touch로 생성한 파일의 경로와 tee로 내용을 작성하는 파일의 경로가 동일해야 한다.
contents="## $today ($day)" echo ${contents} | tee /Users/.../${fileName}
작성이 완료되면 esc 후 :wq 로 작성된 내용을 저장한다.
2. crontab으로 스크립트 스케줄링
리눅스와 맥에서 crontab을 사용할 수 있다.
(1) 스케줄링 생성
crontab -e
(2) 매일 0시 정각에 스크립트 실행하기
0 0 * * * /bin/zsh /Users/.../TIL.sh
2-2. 추가 수정사항 (맥 You have new mail)
crontab을 사용하면 터미널에 다음과 같은 안내문이 나온다.
메일의 내용은 crontab의 실행결과에 대해 안내한다. 혹시나 파일 생성되지 않아도 당장은 큰 문제가 없고, 금방 알아차릴 수 있기에 메일을 수신하지 않도록 수정한다.
(1) 수신 메일 전체 지우기
mail 명령어를 입력하면 ?까지 화면에 출력된다. 전체 메일을 지우고 적용하면 끝 (출처 게시글)
(2) 메일 수신 해제
crontab으로 등록한 스케줄링 내용을 다음과 같이 수정한다.
0 0 * * * /bin/zsh /Users/.../TIL.sh > /dev/null
shell script를 처음 작성해보았는데 생각보다 더 간단하고 필요한 내용들을 찾아서 조합하면 다양한 동작들을 만들 수 있을 것 같다. (작은 문제들을 하나씩 해결해가는 과정으로 인해 누군가의 게시글을 그대로 따라하는 것이 아니라 새로운 컨텐츠를 만드는 것처럼 느껴진다.)
다음에는 알고리즘 문제 풀이 프로젝트를 커밋하는 것도 스크립트로 작성해보고 싶다.
매일 몇 초 걸리지 않는 사소한 일이지만 비효율적이라고 생각했던 일을 이제는 하지 않아도 돼서 너무나 속이 후련하다.
같은 업무를 반복하지 않고 자동화하여 낭비되는 시간을 줄이고 정확성을 높여서 뿌듯했고, 내가 가치있다고 생각하는 문제를 해결해서 더욱 재미있었다.
글쓰기 측면에서는 새롭게 알게된 지식들을 정리하는 것보다 경험을 토대한 이런 글이 자신감있게 작성하기 좋다고 느꼈다.
내가 직접 트라이해본 것들이기 때문에 결과를 알고 있고, 여기서는 어떤 문제가 발생할지, 다음에는 어떠한 내용이 들어가야 도움이 될지 쉽게 떠올릴 수 있었다.
'Dev-Diary' 카테고리의 다른 글
[자동화] 소스 코드에서 특정 행 가져와서 README에 추가하기 (0) 2023.05.30 [TIL] Jenkins를 이용한 빌드 중 만난 오류 (0) 2020.07.21 Message Queue (메시지 큐) (0) 2020.05.20