본문 바로가기
개발관련/FastAPI(BE)

FastAPI - (1) 개념 및 설치

by yjoo_ 2023. 10. 6.

공식문서 - https://fastapi.tiangolo.com

FastAPI는 현대적이고, 빠르며(고성능), 파이썬 표준 타입 힌트에 기초한 Python3.6+의 API를 빌드하기 위한 웹 프레임워크입니다.

FastAPI를 다뤄본지 약 한달이 지났다. 9월 초에 잠깐 공부해서 프로젝트에 사용해봤는데 정말 간편하고 배우기 쉬웠다.

 

사실 한국에서는 스프링을 많이 사용하기에 큰 의미가 있나 싶었다.

 

사실 회사에 가서 사용을해도 대부분 스프링을 사용하기 때문에 협업면에서도 스프링을 해야하니까.

 

그래도 공부해보면서 나름 괜찮다고 느꼈던건

 

1. 파이썬 프레임워크의 낮은 진입 장벽

2. 쉽고 짧은 간결한 코드

3. 훌륭한 공식문서

 

이 세가지가 잘 어울러져 흡수하듯 공부할 수 있었다.

 

물론 아직 잘 안다고 말하기에는 조금 경험이 부족하긴 하지만

 

그래도 나름대로 공부한 것을 정리해보려고 한다.


FastAPI를 선택한 이유?

사실 파이썬 기반 웹프레임워크는 Django와 Flask를 제일 흔하게 사용한다.

 

Django는 크고 복잡한 프로젝트에 주로 사용하지만, 프로젝트 규모가 작고 간단할 수록 성능이 과할 수 있다.

 

FastAPI를 선택하게 된 계기는 단순했다.

 

학생의 특성 상 마이크로서비스를 주로 진행하게 되었고, 지금까지 사용하던 Django가 쓸 때 없이 무겁게만 느껴졌다.

 

제대로 사용할려면 공부할 것도 많았고, 동아리 활동을 진행하면서 Django를 가르쳤는데 많이들 어려워했다.

 

그래서 좀 더 가벼운 쪽으로 눈을 돌린게 바로 FastAPI다.

 

FastAPI의 장점으로는

 

API의 자동 문서화, ASGI와 WSGI를 완벽하게 호환하기에 빠른 속도를 보장하는 프레임워크

 

풍부한 빌트인 기능까지... Flask는 고려할 이유가 없어보일정도였다.

 

무엇보다 공식 문서가 굉장히 잘 만들어져있었기에 공부하기가 편했다.


FastAPI 설치방법

먼저 가상환경을 생성해준다.

그리고 다음 명령어를 입력해 라이브러리를 설치해준다.

# pienv shell 또는 python3 -m venv venv

pip install fastapi "uvicorn[standard]"

여기서 uvicorn은 ASGI 서버이며 FastAPI를 실행할 때 사용한다.

[standard]를 붙여주는 이유는 그냥 uvicorn을 설치할 경우 uvloop가 설치되지 않고 asyncio를 사용하게 된다.

 

너무 긴 설명을 하면 지루하니 간단하게 말하자면, asyncio와 uvloop는 둘다 비동기 처리 라이브러리인데

uvloop가 Cython으로 작성되어 asyncio보다 성능이 좋고 빠르다.

 

간단하게 이정도만 알아두고 이제 실습을해보자.

프로젝트 폴더에 main.py를 작성해보자.

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def hello():
    return {"message": "Hello World"}

역시 시작은 Hello World

파이썬을 조금 배워본 사람은 위의코드가 크게 어렵지 않을 것이다.

app에 FastAPI 인스턴스를 할당해주고, "/" 엔드포인트에 get 요청 시 hello함수가 return된다.

 

좀 더 직관적으로 보기 위해 서버를 실행해보자.

터미널에 다음과 같이 입력해주면 서버가 실행된다.

uvicorn main:app

"/"의 경로는 아무것도 없는 도메인 그자체의 URL을 뜻한다.

말 그대로 서버에 접속하자마자 방금 작성한 hello함수가 실행됐다.

우린 코드 몇줄만으로 Hello World라는 메세지를 돌려주는 API를 만들었다!

 

물론 API라고 하기에는 데이터베이스도 없고, 유효한 데이터도 없어 민망하기는 하지만

우리가 무엇을 한건지 정확하게 알아야 첫 걸음을 뗄 수있다.

 

API를 간단하게 말씀 드리자면, API는 리모컨이다.

우리는 TV를 볼 때 리모컨 버튼을 누르면, 리모컨이 TV(데이터베이스)에 신호를 보낸다.

신호를 받은 TV(데이터베이스)는 특정 채널(데이터)를 사용자에게 돌려준다.

 

API의 또 하나의 역할은 보안이다.

검증된 사용자만 데이터베이스에 요청을 보낼 수 있도록 만들어준다.

또한 검증된 사용자가 보낸 데이터를 DB에 저장하는 역할도 수행한다.

 

본격적으로 공식 문서의 튜토리얼을 진행하기 앞서서 한가지 편리한 세팅을 하고자 한다.

main.py에 마지막 줄에 조건문을 하나 추가한다.

from fastapi import FastAPI


app = FastAPI()

@app.get("/")
async def hello():
    return {"message": "Hello World!"}

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

우리가 서버를 실행할 때 uvicorn이란 명령어를 사용했다.

지금까지 파이썬을 공부해온 사람에게는 조금 생소한 명령어일 수도 있다고 생각해 추가한 것인데

python으로 실행한 파일의 이름이 main이라면 uvicorn을 실행하는 구문이다.

 

실행방법은 간단하다.

python main.py

이렇게 실행하면 변경사항이 있을 때 마다 서버를 재구동 할 필요도 없다.

Reference

FastAPI 톺아보기 - 부제: python 백엔드 봄은 온다
https://jybaek.tistory.com/890
첫걸음 - FastAPI
https://fastapi.tiangolo.com/ko/tutorial/first-steps/

 

'개발관련 > FastAPI(BE)' 카테고리의 다른 글

FastAPI - (5) Model  (0) 2023.10.19
FastAPI - (4) DB 연결하기  (0) 2023.10.16
FastAPI - (3) Request Body  (0) 2023.10.10
FastAPI - (2) HTTP메소드, URL 매개변수  (1) 2023.10.07