Home API 활용 노트 03. GitHub Action 자동화 그리고 API를 사용한 날씨 예측 서비스 만들기
Post
Cancel

API 활용 노트 03. GitHub Action 자동화 그리고 API를 사용한 날씨 예측 서비스 만들기

API 활용 노트 01 ~ 02는 API가 기본적으로 어떤 흐름으로 작동하는지에 대해 알아보았습니다.

Python을 활용해 기본적으로 날씨 예측 서비스를 API를 활용하여 그 구조를 이해 보았으니.
이번에는 GitHub Action을 사용해 실제 간단하게 작동하는 웹사이트를 만들어 보겠습니다.

(이 게시글은 API에 대해 공부하며 작성한 순한맛 설명 버전의 게시글입니다.)




GitHub Action으로 만든 날씨 예측 서비스

위에는 실제 결과물(성수 날씨)서비스 입니다.
기존에 했던 Python코딩을 응용하여, 간단한 그림과 디자인을 추가하여 만들어 보았습니다.

GitHub Action를 사용하는 이유?

로컬(내 컴퓨터에서 실행)과 퍼블리시(웹에 올리기)에 대한 이야기

사실 이때까지는 로컬(내 컴퓨터)에서 Python코드를 가지고 놀았습니다.
그냥, 내 컴퓨터에서 기상청 사이트 들어가서 기상정보 복사 붙여넣기 했다고 보면 됩니다.

하지만, 우리가 하고 싶었던 것은 사이트를 만들어 웹에 올리는 것입니다.
그리고 그 웹사이트에서는, 기상청API를 사용해 정보를 받아 저장하고, 출력하는 동작을 해야 합니다.

이런 웹사이트를 만들기를 원한다면, 위의 동작을 실행할 수 있는 가상의 컴퓨터(클라우드 컴퓨팅)가 필요하고,
그런 클라우드 컴퓨팅 기능을 제공해주는 여러가지 서비스들이 있습니다.

AWS(Amazon Web Service)의 서버리스 서비스

대표적으로 아마존 웹서비스(Amazon Web Services), 구글 클라우드 플랫폼(Google Cloud Platform) 등등..
자신이 만들고자 하는 서비스의 규모나, 어떤 환경으로 구축할 것이냐에 따라 여러 선택지중에 고르면 됩니다.

다만, 이번에 만들고자 하는 서비스는 동작 자체가 복작하지 않고 규모도 크지 않고, 키울 생각도 없습니다.
그렇게 사용하기 만만한게 Github Action 입니다.

무료로 사용 가능하고, 사실 예전부터 써보고 싶었던 기능이거든요!

GitHub Action의 개요와 기본구조

개요, workflow, on, jobs

Github Action은 소프트웨어 Workflow를 자동화할 수 있는 도구 입니다.
Workflow.ymlYAML코드 이고, 내부에는 어떤 일들을 할 지 작성할 수 있습니다.

GitHub Action의 공식 홈페이지

예를 들면, ‘주기적으로 데이터를 수집해서 실행하고 출력’과 같이 스크립트를 자동화 하거나,
깃허브 블로그에 새로운 내용을 추가하면 그걸 웹에 배포하는 동작을 수행할 수도 있습니다.

정말 다양한 방법으로 응용해서 업무 자동화, 크롤링 봇 등, 다양하게 사용할 수 있습니다.




일단 GitHub Action으로 마법의 단어 ‘Hello World!’ 찍어보기

maker-ryu/Weather_Checker 깃허브 레퍼지토리, 들어가 보면 코드를 볼 수 있다!

일단 내가 지정한 Action을 실행할 수 있는 깃허브 저장소(repository)를 하나 만들어 줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
name: Hello World!

on:
  push: # git push 할때마다 실행
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest # 어떤 OS에서 실행될지 지정

    steps:
    - uses: actions/checkout@v2 # 어떤 액션을 사용할지 지정

    - name: Run a one-line script
      run: echo Hello, world!

    - name: Run a multi-line script
      run: |
        echo Add other actions to build,
        echo test, and deploy your project.

그리고 .github/workflows 폴더 아래에 YAML 파일Hello_World.yml을 만들어 줍니다.
위의 코드는 기본적인 YAML 코드이며, git에 push를 하면 ‘Hello World!’를 외치는 코드 입니다.

생성했던 Repo에서 Actions > build에서 Hello_World.yml파일이 실행되어,
‘Hello World!’가 정상적으로 출력된 것을 알 수 있습니다.

이렇게 직접 yml코드를 작성하여도 되지만, 이미 만들어진 workflows를 사용할 수 도 있습니다.

Repo의 Actions > New workflow에서 더 많은 Workflow들을 볼 수 있습니다.

예를 들어, Python파일을 실행하는 Workflows가 필요하다면, Actions > New workflow > Continuous integration workflows 더보기 > Python package > Set up the workflow을 하고 코드를 조금 수정하면 .py 파일을 실행하는 Actions를 구성할 수 있습니다.




Workflow의 구성 요소 : name, on, jobs, steps

  • name : 작성하는 workflows의 이름을 지정, 또는 step의 이름을 지정
  • on : Event에 대해 작성하는 곳, 어떤 상황에서 이 Action을 실행시킬지 정할 수 있음.
1
2
3
4
5
on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

깃에 push하거나, pull요청을 받을 때 실행.

1
2
3
on:
  schedule:
    - cron: '0 * * * *'

특정 시간에 반복(cron), 위의 코드는 매 시간 정각에 실행(UTC 기준)
더 다양한 사용법은 공홈 문서를 참고! : Events that trigger workflows

  • jobs : 여러개의 steps로 구성이 되어 있고, 가상환경에서(예시는 ubuntu)실행
1
2
3
jobs:
  build:
    runs-on: ubuntu-latest
  • steps : 여러 task들을 모아 실행, echo와 같은 커멘드나 내가 지정한 action을 실행

GitHub Action API 사용해 주기적(자동화)으로 JSON 데이터 받아오기

자동화 봇, GitHub Secrets(환경변수)사용법

이제 Actions의 간단한 사용과 구문을 알았으니 2편의 Python코드
02. Python 날씨 예측 서비스 [ open API ]를 주기적으로 실행시켜주기만 하면 됩니다!!

주기적으로 실행(자동화 봇)

1
2
3
on:
  schedule:
    - cron: '0 * * * *'

위의 on:에 대해 설명하면서 언급했지만,
특정 시간대에 실행하도록 해주는 cron을 사용하면 됩니다.

2편에서도 언급했듯, 날씨 정보에 대한 API는 특정시간(02:10, 05:10…)에 제공됩니다.

1
2
3
on:
  schedule:
    - cron: '15 2,5,8,11,14,17,20,23 * * *' 

따라서 API 업데이트 시간보다 5분뒤(02:15, 05:15… 23:15) Event가 발생하도록 했습니다.




GitHub Secrets(환경변수)사용법

하지만, 여기서 큰 문제가 하나 있습니다.
페이지를 모든 사람들이 볼 수 있도록 public으로 deploy해버리면,
그 코드에 포함된 나의 소중한 키값(발급받은 API키)을 볼 수 있습니다.

이때까지는 로컬(내 컴퓨터)에서 실행했기에 상관 없었지만,
public으로 API를 받아오는 코드를 올리는 순간 노출됩니다.

특히 요즘은 Chrome의 개발자 도구 > Source에서 코드까지 볼 수 있기에
백(서버측)에서 API를 사용하지 않는다면 중요한 정보를 털릴 수도 있습니다.🤔

JSON 데이터 html로 출력하기

GitHub Action 커밋, GitHub Pages(index.html)

삽질의 순간들

로그 찍기, 푸쉬&커밋 무한반복, Python도 실행가능

This post is licensed under CC BY 4.0 by the author.

API 활용 노트 02. Python 날씨 예측 서비스 [ open API ]

API 활용 노트 04. 인스타그램 API 연동 [ Instagram Graph API ]