파이썬 웹 프레임워크인 FastAPI를 이용하여 간단한 REST API를 구현하고, 로컬 환경에서 애플리케이션을 실행해보는 과정을 소개합니다.
FastAPI란?
FastAPI는 파이썬으로 고성능 비동기 웹 애플리케이션을 쉽게 개발할 수 있도록 도와주는 웹 프레임워크입니다. 기본적으로 비동기(Async) 작업 방식을 지원하기 때문에, 동시성 처리가 많은 REST API를 구현할 때 매우 유용합니다.
FastAPI 특징:
- 고성능: Starlette과 uvicorn 기반으로 매우 빠른 속도 제공
- 간결한 문법: Python 타입 힌트를 적극 활용해 자동 문서화 및 검증
- 비동기 지원: async/await 키워드를 통한 논블로킹 I/O 처리
- REST API 개발에 최적화
개발 환경 준비
작업 디렉터리 생성
먼저 FastAPI 프로젝트를 위한 전용 디렉터리를 만듭니다. 아래는 Windows 명령 프롬프트 예시입니다.
C:\Users\(username)> mkdir c:\python\fastapi && cd c:\python\fastapi
이렇게 하면 c:\python\fastapi 디렉터리를 만들고 이동한 상태가 됩니다.
가상환경(Virtual Environment) 설정
프로젝트별로 독립적인 패키지 관리를 위해 가상환경을 사용합니다.
c:\python\fastapi> python -m venv venv
c:\python\fastapi> .\venv\Scripts\activate
(venv) c:\python\fastapi>
가상환경이 만들어진 후 활성화 되었습니다. (venv)를 통해 쉽게 알 수 있습니다.
FastAPI 및 uvicorn 설치
(venv) c:\python\fastapi> pip install fastapi uvicorn
- FastAPI: 우리의 웹 애플리케이션을 개발하기 위한 프레임워크
- uvicorn: ASGI(Asynchronous Server Gateway Interface) 서버로, FastAPI 앱을 로컬에서 실행할 때 사용합니다.
uvicorn은 개발 환경뿐 아니라 프로덕션 환경에서도 사용 가능하며, --reload 옵션을 주면 코드 변경 시 서버가 자동으로 재시작되어 개발 편의성을 높여줍니다.
에디터/IDE 열기
VSCode를 사용하는 경우 다음 명령으로 현재 디렉터리를 열 수 있습니다.
(venv) c:\python\fastapi> code .
애플리케이션 코드 작성
새 파일 app.py를 만들고 다음 코드를 작성합니다:
from fastapi import FastAPI
# FastAPI 인스턴스 생성
app = FastAPI()
# 라우트 정의
@app.get("/")
def welcome() -> dict:
return {"message": "Hello World"}
여기서 / 경로에 GET 방식으로 요청을 보내면 {"message": "Hello World"} 라는 JSON 응답을 돌려주는 간단한 API를 정의했습니다.
애플리케이션 실행
이제 uvicorn을 사용하여 애플리케이션을 실행합니다.
(venv) c:\python\fastapi> uvicorn app:app --port 8000 --reload
- app:app : app.py 파일 내에 app이라는 FastAPI 인스턴스를 실행하겠다는 의미
- --port 8000 : 8000번 포트로 서비스 개시
- --reload : 코드 변경 시 서버 자동 재시작
실행 후 아래와 같이 로그가 뜨면 서버가 정상적으로 구동되고 있는 것입니다.
INFO: Will watch for changes in these directories: ['c:\\python\\fastapi']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
...
브라우저에서 http://localhost:8000/ 에 접속하면 다음과 같은 JSON 응답을 확인할 수 있습니다.
{"message":"Hello World"}
- 브라우저에서 GET 요청:
GET 요청은 주소창에 URL을 입력하는 것만으로 테스트가 가능합니다. - HTTP 클라이언트 도구 사용:
다양한 메서드(POST, PUT, DELETE) 테스트를 위해서는 별도의 HTTP 클라이언트를 사용하는 것이 편리합니다.- Talend API Tester(Chrome 확장)
- Insomnia
- Postman
- CLI 기반 툴 cURL 사용:
터미널(명령 프롬프트)에서 cURL을 사용하여 GET 요청을 보내면 다음과 같이 결과를 볼 수 있습니다.
c:\Users\myanj> curl http://localhost:8000/
{"message":"Hello World"}
자세한 요청/응답 헤더를 보고 싶다면 -v 옵션을 사용합니다.
c:\Users\myanj> curl http://localhost:8000/ -v
* Host localhost:8000 was resolved.
* Trying 127.0.0.1:8000...
* Connected to localhost (127.0.0.1) port 8000
> GET / HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/8.9.1
> Accept: */*
>
< HTTP/1.1 200 OK
< date: Thu, 21 Nov 2024 01:50:41 GMT
< server: uvicorn
< content-length: 25
< content-type: application/json
<
{"message":"Hello World"}
* Connection #0 to host localhost left intact
위 로그를 통해 요청/응답 과정 및 헤더 정보를 확인할 수 있습니다.
이렇게 FastAPI를 사용하면 간단한 REST API를 매우 빠르게 구성하고 로컬 환경에서 테스트할 수 있습니다. 추가적으로 라우트를 늘려가면서 다양한 기능(POST/PUT/DELETE 메서드, Request Body 처리, 인증/인가, DB 연동 등)을 구현해나가면서, FastAPI의 강력한 기능을 익혀나갈 수 있습니다.
여기까지가 FastAPI를 이용한 기본적인 웹 애플리케이션 실행 과정이었습니다. 더 자세한 내용은 FastAPI 공식 문서를 참고하시기 바랍니다.
*생성형 AI 활용한 클라우드&보안 전문가 양성캠프 과정의 교육내용 정리 자료입니다.
'코딩 > 파이썬' 카테고리의 다른 글
[새싹 성동 2기] Pydantic 모델을 사용한 요청 본문 검증 (0) | 2024.12.16 |
---|---|
[새싹 성동 2기] FastAPI 라우팅 가이드 (0) | 2024.12.11 |
[새싹 성동 2기] SQLite 데이터베이스 연동 가이드 (2) | 2024.12.11 |
[새싹 성동 2기] 객체 지향 프로그래밍 (OOP) 기초 (0) | 2024.12.11 |
[새싹 성동 2기] Python에서 파일 처리하는 방법 (1) | 2024.12.09 |