본문 바로가기
공부공부/2023 쌓여가는 나의 지식~

Fastapi를 이용한 웹페이지 구성 (1) - 설치 및 사용

by Lee_story_.. 2023. 12. 6.
728x90

 

 

프로젝트를 진행함에 있어 웹 페이지를 구성할 일이 생긴다면?

 

아마 대부분이 리엑트, 자바/스크립트, 장고, 등을 사용하게 될 것입니다. 

저 또한 리엑트 같은 새로운 프레임워크를 공부하여 사용하려 했으나, 

 

 

파이썬으로 웹 서버 구축과 기능 설계 등을 가능하게 해주는 FastAPI라는 라이브러리를 찾게 되어,

사용해보기로 하였습니다!  

 

 

FastAPI

FastAPI framework, high performance, easy to learn, fast to code, ready for production

fastapi.tiangolo.com

 

 

Fastapi란?

 

- 표준 Python 유형 힌트를 기반으로 Python 3.8 이상으로 API를 구축하기 위한 현대적이고

빠른(고성능) 웹 프레임워크입니다.

 

 

 

공식문서에서는 다음과 같은 기능들을 강조하고 있습니다.

 

  • 빠름 : NodeJS  Go 와 동등한 매우 높은 성능입니다 (Starlette 및 Pydantic 덕분에). 사용 가능한 가장 빠른 Python 프레임워크 중 하나입니다 .
  • 빠른 코드 작성 : 기능 개발 속도를 약 200%~300% 높입니다. *
  • 버그 감소 : 사람(개발자)이 유발한 오류가 약 40% 감소합니다. *
  • 직관적 : 훌륭한 편집자 지원. 어디서나 완성 . 디버깅 시간이 단축됩니다.
  • Easy : 쉽게 사용하고 배울 수 있도록 설계되었습니다. 문서를 읽는 시간이 줄어듭니다.
  • Short : 코드 중복을 최소화합니다. 각 매개변수 선언의 여러 기능. 버그가 적습니다.
  • 견고함 : 프로덕션에 즉시 사용 가능한 코드를 얻습니다. 자동 대화형 문서화 기능이 있습니다.
  • 표준 기반 : API에 대한 개방형 표준을 기반으로 하며 완벽하게 호환됩니다.오픈API(이전에는 Swagger로 알려짐) 및JSON 스키마.

 

 

>> 요약하면 간단하고, 에러가 적으며 빠른 개발,실행이 가능하다!

 

 

 

그럼 바로 설치/실행 해보겠습니다. 

 

 

 

설치

최소 Python 3.8이상의 환경에서만 호환 된다는 점만 숙지하고,

pip 명령어를 통해 설치 가능합니다. 

 

pip install fastapi

 

 

그리고 

 

 

그리고 uvicorn이라는 라이브러리가 하나더 필요한데...

 

 

uvicorn?

fastApi에서 ASGI 서버를 구성해주기 위한 라이브러리 입니다. 

 

 

.... ASGI?

웹 애플리케이션웹 서버 간의 통신을 위한 인터페이스로

대표적으로 위에서 언급했던 ASGI와 CGI, WSGI 등이 있습니다. 

 

 

 

그 중 FastApi에서 ASGI를 사용하는 이유는 비동기 처리가 가능한 인터페이스를 제공하기 때문입니다. 

 

 

비동기 처리가 왜필요한가...

웹 상에서 날씨, 시간 처럼 실시간으로 페이지에 갱신되는 정보들을 본적이 있을 것 입니다.

 

만약 웹상의 모든 처리방식이 동기식으로 처리된다면??

>> 날씨정보 처리하고, 시간정보 처리하고, 실행한 함수 처리하고 .... 

 

이런식으로 순서대로 처리될텐데, 실시간 처리... 불가능!

 

그렇기에 동시에 처리할 수 있는 비동기 처리 방식이 필요합니다.  

 

 

 

그렇기에 fastapi에 이어 

uvicorn도 설치해줍시다.

pip install uvicorn

 

 

 

 

여기까지가 준비끝!

 

이제 한번 실행 해보겠습니다.

 

 

 

공식문서에서 제공하는 기본 예제입니다.

 

<Main.py>

from fastapi import FastAPI
from typing import Union

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}


if __name__ == "__main__":    
	import uvicorn
	uvicorn.run("Main:app", host="0.0.0.0", port=9080, reload=True)

 

코드 부분에서 중요한 부분은 __main__ 부분! 

 

 

uvicorn.run 함수 내부 인자들은 각각 아래와 같은 의미를 가집니다. 

현재 코드 Main.py를 실행하겠다 / 주소는 0.0.0.0 / 포트는 9080  / 업데이트 내용이 있을때 reload하겠다

uvicorn.run("Main:app", host="0.0.0.0", port=9080, reload=True)

 

 

 

 

이렇게 구성후 python파일을 실행하면 아래처럼 Uvicorn이 실행 되었다고 Log가 남습니다. 

 

 

 

현재 0.0.0.0:9080 의 링크로 서버를 개설했다! 는 부분에 집중

 

현재 로컬주소로 접속하시면 될 것 같습니다. >> 127.0.0.1:9080

(현재 저는 WSL에서 구동중이기에 wsl의 가상 주소 172 ... )

 

 

 

 

접속시 아래처럼 Mesage가 나온다면 성공! 

 

 

 

 

추가적으로 아래 주소로 접속하면 

http://자신의 링크 : 포트/docs

 

 

 

현재 실행중인 fastapi에 구성되어 있는것들을 확인 할 수 있습니다. 

 

각각 정보가 어떻게 전달되는지, 실행되는지를 알려주기에 유용하게 사용 가능할 것 같습니다. 

 

 

 

 

 

 

끝!

다음글에서는 html, 자바스크립, python을 이용해서 페이지를 구성해보도록 하겠습니다. 

 

 

 

 

 

 

 

 

틀린 점이 있다면 댓 달아주세요!

댓글