노션 일정관리 자동화 프로젝트 (7. github actions)

2025. 6. 12. 21:12·Notion/Notion 일정관리 자동화

들어가기 전에...

코드가 정상적으로 구현됐다면 main.py를 몇번 돌려봤을때 성공적으로 일정들이 생성되고 이전 일정이 관리됐을 것이다.

코드 짜는건 끝났지만 이걸 사람이 하루에 한번씩 직접 돌려줄 수는 없으니 github actions로 자동화를 시켜보자.

 


 

github actions 사용법

프로젝트를 git에 올릴때 최상위 폴더아래에 .github/workflows/~~~~.yml로 파일을 생성하고 파일 내용을 다음과 같이 설정하면 name과 동일한 workflow가 생성된다.

name: Run Notion Automation Daily at 00:05 KST

on:
  schedule:
    - cron: "20 15 * * *" # KST 00:05 (UTC 15:20)
    # - cron: '*/5 * * * *'  # 매 5분마다 실행, 최소 주기는 5분, 테스트용
  workflow_dispatch: # 수동 실행도 가능

permissions:
  contents: write   # ← 이 줄 추가!

jobs:
  run-main:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      # Python 환경을 설정
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: "3.10"

      # requirements.txt 파일을 사용하여 의존성 설치
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt

      # 로그 폴더를 생성하고 env 변수를 사용하여 main.py 실행
      - name: Save logs to file
        run: |
          python main.py
        env:
          NOTION_TOKEN: ${{ secrets.NOTION_TOKEN }}
          NOTION_CREATE_PLAN_DB_ID: ${{ secrets.NOTION_CREATE_PLAN_DB_ID }}
          NOTION_CREATE_PLAN_PAGE_ID: ${{ secrets.NOTION_CREATE_PLAN_PAGE_ID }}
          NOTION_VIEW_PLAN_DB_ID: ${{ secrets.NOTION_VIEW_PLAN_DB_ID }}
          NOTION_VIEW_PLAN_PAGE_ID: ${{ secrets.NOTION_VIEW_PLAN_PAGE_ID }}

      # 로그 파일을 GitHub에 커밋하고 푸시
      - name: Commit and push logs
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"
          git add logs/
          git commit -m "Add daily log ($(date +"%Y-%m-%d"))" || echo "No changes to commit"
          git push

      # 일주일이 지난 로그 파일 삭제
      - name: Clean old logs
        run: |
          find logs/ -type f -name "*.log" -mtime +7 -delete

생성된 workflow의 실행 과정이다. 코드의 step에 해당하는 절차를 밟는 것이 보인다.


가장 상단의 name은 workflow 이름이다. git repository의 Actions에 들어가면 찾을 수 있다.


schedule은 cron 명령어를 사용해 주기적으로 언제 실행시킬지 설정하는 부분이다.

gpt한테 간단하게 써달랬는데... 또 장황하게 설명을 해줬다.

 

✅ 기본 명령어

crontab -e    # 현재 사용자 크론 편집
crontab -l    # 등록된 크론 목록 보기
crontab -r    # 모든 크론 삭제

 

🧪 예제 1: 매일 자정에 쉘 스크립트 실행

0 0 * * * /home/user/backup.sh
# 매일 00시 00분에 /home/user/backup.sh 실행

 

📆 시간 형식

위치의미예시 값

1 분 0~59
2 시간 0~23
3 일 1~31
4 월 1~12
5 요일 0~7 (0, 7 = 일요일)

 

🧪 예제 2: 매주 월요일 오전 9시에 Python 파일 실행

0 9 * * 1 /usr/bin/python3 /home/user/script.py

 

🧪 예제 3: 매 5분마다 로그 기록

*/5 * * * * echo "$(date) >> /home/user/log.txt"

조금 생긴 형태가 다르지만 저런식으로 사용하는거라고 보면 될 것 같다.


permission은 github에 어떠한 파일을 자동 push 시키고 싶을때 권한을 부여하는 부분.

그 아래 steps는 실제 코드를 실행시키는 부분이다.

눈으로 따라가면서 읽다보면 크게 어렵지 않은 코드들로 구성되어 있다.


여기서 짚고 넘어가야할 부분은 이 부분인데

# 로그 폴더를 생성하고 env 변수를 사용하여 main.py 실행
      - name: Save logs to file
        run: |
          python main.py
        env:
          NOTION_TOKEN: ${{ secrets.NOTION_TOKEN }}
          NOTION_CREATE_PLAN_DB_ID: ${{ secrets.NOTION_CREATE_PLAN_DB_ID }}
          NOTION_CREATE_PLAN_PAGE_ID: ${{ secrets.NOTION_CREATE_PLAN_PAGE_ID }}
          NOTION_VIEW_PLAN_DB_ID: ${{ secrets.NOTION_VIEW_PLAN_DB_ID }}
          NOTION_VIEW_PLAN_PAGE_ID: ${{ secrets.NOTION_VIEW_PLAN_PAGE_ID }}

 

우리는 보안을 위해 .gitignore에 .env 파일을 등록하여 API key가 업로드 되는 것을 막았었다.

그럼 github actions는 저 키를 어디서 불러올까?

답은 이곳이다.

Settings --> Secrets and Variables --> Actions 순이다.

 

Settings --> Secrets and Variables --> Actions 순으로 접속하면 되며 .env에 입력한 것과 동일하게 New repository secret을 클릭하여 API key들을 추가해주면 된다.


github actions에서 manual로 실행하고 테스트해보려면

 

이렇게 수동으로 실행시킬 수 있다. 만약 코드가 잘못됐거나 하면

 

이런식으로 에러가 나온다.

사용량의 경우 한달에 2000분까지라고 알고있긴한데... 그게 private repository에만 적용되고 public은 무제한인지... 잘 모르겠다.

나는 한번 돌릴때 1분 걸린다쳐도 한달에 30분이니까 딱히 신경안쓰는데 오래, 많이 돌리고 싶은 사람들은 제대로 확인 후 사용해야 할 것 같다. (필자도 PAPAGO API 잘못썼다가 17만원이 나왔었다.)

 


 

사실상 여기까지 했으면 다음은 테스트 + 로그 찍기인데

기능적으로는 이미 다 구현했다고 볼 수 있다.

 

여담으로... github actions 자동 실행까지 구현하고 잘 도는지 확인해봤을때

분명 00:05마다 코드는 정상적으로 실행됐는데 노션 페이지 생성 및 관리가 하나도 안되는 상황이 발생했었다. 🤨

그래서 출근할때쯤 Run workflows를 해보니 또 정상적으로 도는 것이 아닌가 (거의 사흘을 이것때문에 고민했었다.)

 

그래서 뭐가 문제인고하니 국제 표준시보다 한국이 +9시간이어서....

그래서 00:05에는 제대로 안돌다가 출근할때쯤엔 9시가 지나니까 정상적으로 도는 것이었다.... 별게 다 속썩인다.

 

암튼 요즘 몸 상태가 피로하다보니 뒤로 갈수록 힘이 빠졌는데... 나중에라도 설명이 부족한 부분이 보이면 보강할 예정이다.

다음글이 아마 마지막이 될 것 같다. 다음글에서 만나요! 😊

저작자표시 비영리 변경금지 (새창열림)

'Notion > Notion 일정관리 자동화' 카테고리의 다른 글

노션 일정관리 자동화 프로젝트 (8. 테스트 코드 구현)  (1) 2025.06.13
노션 일정관리 자동화 프로젝트 (6. 코드 구현 (계획 생성 및 상태 변경))  (0) 2025.06.11
노션 일정관리 자동화 프로젝트 (5. 코드 구현 (환경변수 세팅 및 데이터 추출))  (1) 2025.06.08
노션 일정관리 자동화 프로젝트 (4. 프로젝트 사전 설정)  (0) 2025.06.07
노션 일정관리 자동화 프로젝트 (3. Notion API 발급 및 사용법)  (0) 2025.06.06
'Notion/Notion 일정관리 자동화' 카테고리의 다른 글
  • 노션 일정관리 자동화 프로젝트 (8. 테스트 코드 구현)
  • 노션 일정관리 자동화 프로젝트 (6. 코드 구현 (계획 생성 및 상태 변경))
  • 노션 일정관리 자동화 프로젝트 (5. 코드 구현 (환경변수 세팅 및 데이터 추출))
  • 노션 일정관리 자동화 프로젝트 (4. 프로젝트 사전 설정)
P444
P444
써보면서 유용했던 개발 정보들을 정리해둡니다. 틈틈이 일상과 잡생각도 남겨요.
  • P444
    Rak's Blog
    P444
  • 전체
    오늘
    어제
    • 전체 글 목록 (71)
      • Coding Test Practice (23)
        • Python (18)
        • C++ (5)
      • C++ (2)
        • 개인 필기 (2)
      • Git (2)
        • 개인 필기 (2)
      • Notion (8)
        • Notion 일정관리 자동화 (8)
      • Python (19)
        • 개인 필기 (2)
        • 유용한 python 코드 (12)
        • 모듈개발 (1)
        • Velog 글 백업 스크립트 GUI Add-on (3)
      • 과거 기록들 (16)
        • Web Crawling (12)
        • Data Analysis (4)
      • 일기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    노트정리
    pandas
    GIT
    코드
    numpy
    리스트
  • hELLO· Designed By정상우.v4.10.3
P444
노션 일정관리 자동화 프로젝트 (7. github actions)
상단으로

티스토리툴바