개발

Github Action으로 자동화 돌리기

Dev Aaron 2023. 4. 28. 13:29
반응형

웹 페이지에서 원하는 데이터를 얻기 위해 보통 크롤러를 만들어 씁니다.

Node.js 혹은 python으로 간단히 만들 수 있죠.
거의 대부분의 프로그래밍 언어, 플랫폼으로 가능하지만 단순 크롤링 목적으로는 역시 python이 가장 쓰기 간단합니다.

일회적으로 한번 크롤링하는 정도라면 개발한 pc에서 돌려보면 되겠지만,
만약 특정 주기로 크롤링을 해야 한다면 어떻게 해야 할까요?

단순하게는 내 PC를 항상 켜놓고 특정 시간마다 특정 프로그램이 동작하도록 스케줄러에 등록해주면 됩니다.
하지만 내 PC가 갑자기 맛이 가면? 정전이라도?
PC를 바꿨는데 깜빡하고 데이터 백업을 안했다면?

본 포스팅에서는 이러한 고민 거리를 한방에 해결하는 방법을 공유드리고자 합니다.
우선 크롤링 코드를 다루지는 않습니다.

그리고 다음 사항을 전제로 합니다.

  • 크롤링하는 코드는 이미 main.py 파일에 작성되어 있다.
  • "python main.py" 명령어로 실행 가능하다.
  • github repository로 관리하고 있다.

.yml 파일 생성

github repository root 경로에서 아래와 같이 폴더들과 함께 .yml 파일을 생성합니다.

{project-root}/.github/workflows/{file_name}.yml

여기서 파일 이름 'file_name'은 편하신 것으로 바꾸시면 됩니다.

requirements.txt 파일 작성

프로젝트의 root 경로에 requirements.txt 파일을 작성합니다.
파일 위치나 파일명은 자유롭게 하셔도 되지만, 우선 예제를 다 따라해본 후 바꾸시는 것을 추천드립니다.
파일 안에는 아래와 같이 python 프로그램에서 참조하는 라이브러리를 추가해주면 됩니다.

requests
bs4

.yml 코드 작성

위에서 생성한 .yml 파일에 아래와 같이 작성해줍니다.

name: My Crawler

on:
  # 월-금, 한국 시간으로 대략 오전 8시 동작
  schedule:
    - cron: '0 23 * * 1-5'

  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: 3.7
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
      - name: Run My Crawler
        run: |
          python3 main.py

cron 영역에서 어떤 주기로 수행할지 결정합니다.
상기 예제에서는 0 23 * * 1-5 으로 되어 있습니다.
각 자리 수는 아래와 같은 의미를 가집니다.

  • 첫번째 자리: Minute [0, 59], 예제에서는 매 0분에 실행
  • 두번째 자리: Hour [0,23], 예제에서는 매 23시에 실행
  • 세번째 자리: Day of the month [1,31], 예제에서는 매일 실행
  • 네번째 자리: Month of the year [1,12], 예제에서는 매달 실행
  • 다섯번째 자리: Day of the week ([0,6] with 0=Sunday), 예제에서는 월-금요일 실행

따라서 상기 예제에서는 월-금 평일동안 매일 23시에 실행됩니다.
하지만 한가지 주의해야할 점은 시간이 UTC time이라는 것입니다.
따라서 한국 시간으로는 대략 오전 8시에 동작합니다.
그리고 칼같이 정확히 딱 8시에 동작하지는 않고 살짝 몇분 정도 차이가 나니 참고하시기 바랍니다.

중간에 python 동작에 필요한 라이브러리들을 requirements.txt 파일에서 읽어와 설치하는 것도 확인하실 수 있습니다.
모든 것이 준비되면 파이선 프로그램을 실행시킵니다.

이제 매일 특정 시간에 동작하는지 확인하면 됩니다!

혹은 아래와 같이 github page에서 직접 실행해볼 수도 있습니다.

반응형