백엔드

[Microsoft Azure, Python] Azure 함수앱, 날씨API를 이용하여 파이썬으로 일기 예보 전송 서비스 구현하기

음그냥 2023. 12. 26. 23:04
728x90
반응형
SMALL

오늘은 Azure 의 함수앱 + 오픈웨더(날씨를 제공하는 API) 를 이용하고, Json기반으로 구성하여 파이썬으로 일기예보전송서비스를 구현하는 포스팅을 할것이다 ! 

 

 

Azure 함수앱 : 어플리케이션이 바이너리형태로 존재하는게아니라, 단순히 소스형태로만 저장장치에 저장되어있고 
요청들어올때만 리소스할당해서 코드실행해서 결과제공해줌

 

 

 

OpenWeather 사이트는 요기!

회원가입을 하면 API키를 가입시 작성한 메일로 주는데 요 API키를 잘 간직하고 있어야 API 이용이 가능하다 ! ㅋㅋㅋ

https://openweathermap.org/

 

Сurrent weather and forecast - OpenWeatherMap

Access current weather data for any location on Earth including over 200,000 cities! The data is frequently updated based on the global and local weather models, satellites, radars and a vast network of weather stations. how to obtain APIs (subscriptions w

openweathermap.org

 

728x90



 

< Azure 함수앱생성 >

애저 검색창에 함수 앱 이라고 검색후 만들기버튼을 클릭!

 

- 함수앱이름은 뒤에 도메인이 붙고, 앱이름이 고유해야 함 

- 코드또는 컨테이너 이미지를 배포하시겠습니까? 이부분은 함수앱통해서 시행할코드가 소스코드면 전자, 컨테이너에서 실행시킬 이미지 파일이면 후자를 선택하면됨
(만약에 파이썬코드로 도커같은 컨테이너의 이미지를 만들경우 후자)

- 런타임스택 : 실행환경
- 파이썬은 현재 지원되는 운영체제가 리눅스밖에없음
- 호스팅 옵션 및 계획 : 비용 플랜관련 설정임

- 실습용으로 몇번밖에 사용안할거라 사용량(서버리스)를 선택했다

 

 

 

 

코드외에도 다양한 것들을 저장해야하기때문에 blob스토리지를 만들어야함

 

 

코드외에도 다양한 것들을 저장해야하기때문에 blob스토리지를 만듦
공용액세스사용 : 함수앱을 나만 사용할건지, 외부에 공개할건지 설정

 

 

 

Application Insights 사용 : 함수앱 동작안할때 무엇이 문제인지 알아보기위해 인사이트를 예로 둠

 

 

GitHub Actions 설정 : 운영단에 반영할 방법을 결정하는 탭인데 나는 실습이라 사용안함을 선택했음

 

 

쭉쭉 진행해서 검토+만들기 탭의 하단에 있는 만들기버튼까지 누르면 배포가 된다 !

하단의 리소스로 이동클릭

 

클릭하면 크게볼수있음

 


리소스로 이동하면 좌측탭에 바로 개요와 앱키이보이는데 여기서,

URL : 이 앱에 접근하기위한 URL 사이트임
앱키 : 앱이 앱에 접근하기위한 앱키임

 

 

이제 코드작성을 위해서 개요탭의 아래부분을 보면 기본 설정 환경에서 함수만들기를 볼수있다


함수앱 내부에서 실제 소스코드를 가지고 함수를 구현하는 방법은 여러가지가 있고 선택할수있다
1. Azure Portal에서 제공하는 간단한 소스코드 편집기 
2. VS Code
3. 기타편집기


나는 애저포탈에서 간단하게 소스코드를 편집할거라 Azure Portal에서 만들기의 함수만들기 버튼을 눌렀다

 

 

- 개발환경 : 포털에서 개발 = Azure포털
- 프로그래밍모델 :기존에 많이쓰던 v1프로그래밍 모델로 선택했다

  (참고로, 새로생긴 v2프로그래밍 모델은 함수의 구조, 실행속도 개선됨)

- 웹상에 트리깅되어 함수가 호출되었을때 어떠한 기능을 하는 함수를 개발하기위해 템플릿을 HTTP trigger로 선택해서 진행할것임

- 권한수준  Function : Function 에 접근권한이 있는 사용자만 사용가능
                   Anonymous : 누구나
                   Admin : Admin 권한이 있는 사용자만 함수실행하게 함



- 트리거 : 템플릿의 어떤 상황에서 함수호출되는지 결정
- 템플릿 : 함수실행할때 기본적으로 함수의 구조를 미리마련함으로써 개발자가 좀더 편하게 함수앱을 구현할수있도록 만들어주는 일종의 파워포인트에있는 템플릿과 동일한 개념

- HTTP trigger : HTTP 프로토콜로 요청이 들어오면 실행되는 함수

 


자, 여기까지 함수앱을 만들고, 함수앱안에서 구동할 기본파일을 만들었다

 

 

함수내용구현하려면 코드+테스트탭에서 할수있는데, 기본코드가 셋팅이되어있다

일단 함수내용을 구현하기전에 테스트를하겠음

일단 방금만든 함수앱이 잘 되는지 기본테스트를 하기위해 상단에 테스트/실행을 누르면 위같은 창이뜬다

이름과 값을 입력하고 본문은 지워준뒤에 실행을 누른다

본문을 지우는 이유는 아래부분에 설명하겠음

 

자, 실행이 정상적으로 되어서 HTTP응답코드가 200이 떴고, 콘텐츠부분에도 내가 값으로 넣은 KNOU가 파라미터로 넘어와서 기본설정된 코드가 정상출력된걸 확인할수있다

 

 

 

이제 파이썬으로, 오픈웨더API에서 서울날씨를 가져와서 response에 넣고 제이슨형식으로 바꾸는 코드를 넣어준다

섭씨온도 : 절대온도 - 273.15

체감온도를 섭씨로 구해서 if문처리를 했음

import logging
import azure.functions as func
import json
from urllib.request import urlopen
from typing import List


def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    weather_object = None
    response = urlopen('http://api.openweathermap.org/data/2.5/weather?q=Seoul,kr&exclude=hourly&APPID=<API_key>')

    if response.getcode() == 200:
        result = json.loads(response.read())
        weather_object = result
    else:
        return func.HttpResponse('Problem!!!!!', status_code=400)

    weather_advice = get_weather_advice(weather_object)
    return func.HttpResponse(weather_advice)

def get_weather_advice(weather_object):
    if weather_object is None or 'main' not in weather_object:
        return 'Just wear something'

    main_info = weather_object['main']
    feels_like_temp = main_info['feels_like'] - 273.15 # Kelvin to Celsius
    if feels_like_temp >= 30.0:
        return "It's summer"
    elif feels_like_temp >= 20.0:
        return "It's sunny"
    elif feels_like_temp >= 10.0:
        return "It's cool"
    elif feels_like_temp >= 0.0:
        return "It's cold"
    else:
        return "It's freezing"

 

주의

주소를 그대로 복사해서 인터넷주소창에 넣으면 아래처럼 api키가 유효하지않아서 서울날씨정보를 가져오지못한다는걸 확인할수있다

 

저 <API_key> 부분에 반드시 내가 발급받은 api키를 넣어줘야 정상적으로 서울날씨정보를 가져올수있다 !

수정후 반드시 상단에 저장버튼을 누르는것 잊지말기

 

 

아 그리고 테스트할때 본문작성시,

추가적으로 본문에 잘못된 데이터가 넘어가는 경우가 있으므로 본문내용은 삭제하고 실행하는게 좋음 (권장)

 

 

api키를 넣고 저장후 테스트를 해보면, 아래처럼 잘 작동하는 걸 확인할수있다 !

오늘 서울의 날씨는 춥군 ! ㅋㅋㅋㅋㅋ

 

테스트는 잘되니까 이제 웹에서 실행해보겠음

상단에 함수 URL가져오기를 눌러서 url을 복사해서 인터넷주소창 붙여넣고 엔터를치면

웹실행결과

아주 잘 작동하는것을 확인할수있다 !

 

 

참고로

개요탭에 가면, 실행횟수, 성공,실패횟수등등 함수앱에 관한 정보를 볼수있다 !

 

간혹가다가 통계가 안나오는 경우도 있는데 최장5분까지도 통계에 반영이 늦어져서 지연될수있음 주의

 

 

blob스토리지에 이미지,파일 등등을 업로드한다음에 날씨에 따라서 스토리지에 업로드한 이미지,파일들을 불러오는것도 가능하니까 참고하면 될것같다

 

끝 !!

 

 

 

 

 

 

 

 

 

 

 

도움이 되셨다면 좋아요, 댓글 !

 

728x90
LIST