[Harman 세미콘 아카데미] Day_12(Python)
오늘은 flask를 활용해 get/ post 방식으로 데이터를 주고 받음을 확인하고, ngrok을 통해 forwarding하여 배포하는 법에 대해 배우겠다. 또한 github action을 활용하여 배포하는 법도 배우고 autogui를 활용한 실습도 진행하겠다.
먼저, flask의 데이터 주고 받는 방식
flask를 사용하면서 데이터 전송 시 get / post 방식을 사용한다
- get : url에 ?(쿼리스트링) = ?key-value&key1-value1 -> 공유를 위함
- post : body에 데이터를 실음 -> 보안
** get , post 방식을 통해 요청받는 경로(route)는 반드시 요청 방식을 선언
예제) get 방식을 활용하여 계산기를 만들어 보겠다.
덧셈을 출력하기 위해 새로운 루트를 "/add"를 만들고 methods=["GET"]방식으로 설정한다. get방식에는 request.args["변수명"]으로 url 쿼리 문자열에 포함된 변수를 저장한다.
**이때 request.args["변수명"]의 값은 기본적으로 문자열(str) 타입이므로, 이를 int()를 사용하여 정수(int) 로 변환한다**
get 방식의 경우, 데이터의 정보를 url에 담기 때문에 num1과 num2에 대한 값을 아래의 형태로
작성하여 새로운 루트인 "/add" url의 뒤에 추가한다.
"/add?num1=10&num2=2"
이렇게 10과 2의 값을 넣어 12라는 값을 출력하는 웹페이지를 만들 수 있다.
결과:
post 방식도 실습하기 위해 로그인 웹페이지를 만들어보자.
로그인을 위한 웹 페이지를 새로 만들기 위해 "/login" 웹 페이지를 만들고 methods=["POST"] 방식으로 설정한다. 앞서 만들었던 get방식의 계산기와 비슷하지만 body에 정보를 숨겨 보안성을 자랑하는 post 방식은 request.form을 사용한다.
아래와 같이 html파일을 작성하여 form을 만들어 주고, 사용자가 페이지에서 작성하고 보내는 id,pw에 대한 데이터를 불러오게 된다.
결과:
get방식을 활용하는 계산기의 웹페이지도 예쁘게 만들기 위해 html파일을 수정하였다.
결과:
이렇게 생성한 웹 페이지는 ngrok의 forwarding을 통해 배포하여 외부에서도 접근이 가능하다.
실행 방법:
1. ngrok.exe 실행 후 명령어 입력
- ngrok http http://localhost:5000
2. flask server run
3. ngrok화면에 있는 Forwarding 파트에 https:// 시작하고 .app으로 끝나는 주소를 실행한다.
Autogui : pyautogui 라이브러리를 활용한 마우스 및 키보드 자동화
코드 및 기능: 마우스와 키보드로 할 수 있는 것들 모두 가능하다. 아래와 같은 함수들로 마우스, 키보드를 조작할 수 있다.
예제들로 알아보자!!
hotkey : ctrl+c or ctrl+v와 같은 기능도 설정 가능
press : 누르는 키에 대한 설정
write : 글 작성하기와 같은 기능들도 사용 가능
typewrite : interval을 쓰고 싶을때 사용 -> 완급 조절 용
ㄴ 형태 : # str2 = "Hello World"
# pyautogui.typewrite(str2, interval=0.1)
자동으로 메모장을 키고 주어진 문장을 작성하는 실습도 진행하였다.
결과 :
이에 주어진 이미지를 찾는 예제도 진행하였다.
네이버의 로그인 이미지를 저장하고, 네이버 홈페이지에서 똑같은 이미지가 위치한 장소를 찾는다.
나 같은 경우는 잘 뜨지 않았고, 교수님께서 말씀하시길 특정 조건에 동작하는 것 같은데 잘 안된다고 하셨다. 이 녀석 실행 조건이 참 까다롭다...
여태껏, 여러 배포방법을 배웠는데 이번엔 github를 활용한 배포 방법에 대해 알아보겠다.
github action의 특징은, 특정 이벤트가 발생했을 때 자동으로 실행하여 아주 유용하다는 것이다.
아무것도 없는 나의 github에 OpenWeather에서 부터 "서울"에 대한 실시간 날씨 데이터를 가져오고 출력하기 위해 yml파일에 대해 작성해야한다.
먼저, yml 파일에 대해 알아보자!!
yaml (yaml aint mark up language) : 여기에서는 github action의 자동화된 작업을 설정하기 위해 사용한다. 즉, 기본 설정을 더욱 간단하게 표현하는 것 같다.
형태는 아래와 같다 :
이 중, 시간에 대한 기준이 UTC(Coordinated Universal Time) 인 것을 생각해야 한다!
그래서 서울 날씨의 정보를 csv로 가지고 있는 파일에 대한 데이터 가져오기 위해 github에 yml파일을 작성한다. 주로 python 기본설정에 대한 패키지 설치나, github에 seoul_weather.csv를 불러오고 표출하는 것에 대한 설정을 진행하였다.
그 후, OpenWeather에서 정보를 실시간으로 불러오고 (파일이 없다면 생성하고) 저장하는 Python 코드를 github에 작성하여 저장해 놓는다. 우리는 시간, 온도, 습도, 날씨에 대한 정보를 사용할 것이다.
그리고 github라는 열린공간에 OpenWeather에 대한 나만의 API KEY를 가리기 위해 secret을 사용하여 실제 값을 숨긴다.
이렇게 다 완료가 되면 Python파일과 yml파일을 Fetch하여 서울 날씨를 저장하는 csv파일을 생성하게 된다.
github-action[bot]이 지속적으로 날씨 데이터를 가져오고 저장하고 git push를 통해 업로드 하게 된다.
이러한 식으로 자동화하고 배포할 수 있다. 이것이 github action 자동화 방법이다!!
느낀점: 자동화의 3가지 flask get/post방식, autogui, github 자동화에 대해서 배웠다. autogui의 경우, 마우스가 없었을때 잠깐 사용해 봤던 기억이 새록새록 들었다..ㅎㅎ 다시 보니 반가웠었다. 또한 github 자동화에 대해 배우며, yml파일에 대해 더 자세히 배울 수 있었다. 대학시절 졸업작품을 진행하며 Opencv를 다룰때, yml파일에 대해 아는 것 없이 그냥 막 사용했었다. 하지만, 이번 실습을 하며 yml 파일에 대한 구조나 작성법에 대해 많이 배웠다. 열심히 배운만큼, 앞으로 있을 미니 프로젝트에 잘 활용해야겠다!!