FastAPI 프로젝트 생성과 서버 실행
3강. FastAPI 프로젝트 생성과 서버 실행
1. 이번 강의에서 해결할 문제
설치한 패키지가 실제 HTTP 요청을 받을 수 있는지 확인해야 합니다. 가장 작은 FastAPI 앱과 /health 엔드포인트를 실행합니다.
2. 학습 목표
3. 핵심 개념
FastAPI는 ASGI 애플리케이션을 만들고 Uvicorn은 네트워크에서 요청을 받아 앱에 전달하는 ASGI 서버입니다. app.main:app은 app/main.py 모듈의 app 변수를 뜻합니다. --reload는 개발 중 파일 변경을 감지하므로 운영에서는 사용하지 않습니다.
용어 정리
| 용어 | 무엇인가 | 이 강의의 예 |
|---|---|---|
| FastAPI | 경로·검증·응답 규칙을 정의하는 Python 웹 프레임워크 | app = FastAPI(...) |
| Uvicorn | TCP 연결을 받고 ASGI 앱을 실행하는 서버 | python -m uvicorn ... |
| ASGI | Python 서버와 비동기 웹 앱 사이의 호출 규약 | Uvicorn이 FastAPI를 호출 |
| 엔드포인트 | 특정 method와 path로 접근하는 API 기능 | GET /health |
| path operation | 경로·메서드와 연결된 처리 함수 | health() |
| JSON 직렬화 | Python 값을 전송 가능한 JSON으로 변환 | dict → {"status":"ok"} |
FastAPI만 설치했다고 네트워크 포트가 열리는 것은 아닙니다. FastAPI 객체가 "어떤 요청을 어떻게 처리할지"를 정의하고, Uvicorn이 그 객체를 불러와 127.0.0.1:8000에서 실제 요청을 기다립니다.
가장 작은 응답 함수
def health() -> dict[str, str]:
return {"status": "ok"}
이 함수만으로는 HTTP에서 호출할 수 없습니다. @app.get("/health") 데코레이터가 GET 요청과 함수를 연결해야 엔드포인트가 됩니다.
4. 단계별 코드 예시
파일 경로: game-ranking-api/app/__init__.py
시작 전에는 2강에서 만든 가상 환경에 FastAPI와 Uvicorn이 설치되어 있어야 합니다. 터미널 위치는 app 폴더 안이 아니라 그 상위 프로젝트 루트 game-ranking-api입니다.
# app 디렉터리를 Python 패키지로 표시합니다.
파일 경로: game-ranking-api/app/main.py
from fastapi import FastAPI
app = FastAPI(title="Game Ranking API", version="0.1.0")
@app.get("/health", tags=["system"])
def health() -> dict[str, str]:
return {"status": "ok"}
코드 한 줄씩 이해하기
from fastapi import FastAPI는 앱 객체를 만들 클래스를 가져옵니다.FastAPI(title=..., version=...)는 API 메타 정보를 가진 ASGI 앱을 만듭니다./docs의 문서에도 사용됩니다.@app.get("/health", tags=["system"])는 바로 아래 함수를 GET/health에 등록합니다.- 반환 타입
dict[str, str]은 문자열 키와 문자열 값을 가진 dict라는 개발자용 타입 정보입니다. return {"status": "ok"}를 FastAPI가 JSON 본문으로 변환하고 기본 성공 상태 200을 보냅니다.
실행 위치: game-ranking-api/
python -m uvicorn app.main:app --reload
Invoke-RestMethod http://127.0.0.1:8000/health
응답은 {"status":"ok"}이며 서버 종료는 Ctrl+C입니다.
요청부터 응답까지 확인하기
브라우저/PowerShell
→ GET http://127.0.0.1:8000/health
→ Uvicorn이 요청 수신
→ FastAPI가 GET + /health 규칙 검색
→ health() 실행
→ dict를 JSON으로 변환
→ 200 OK + {"status":"ok"}
서버 터미널에는 GET /health ... 200 OK 로그가 남습니다. /missing을 요청하면 일치하는 path operation이 없어 404 Not Found와 {"detail":"Not Found"}가 반환됩니다. 두 결과를 비교하면 서버가 실행되지 않는 문제와 경로가 없는 문제를 구분할 수 있습니다.
5. 코드가 동작하는 이유
데코레이터가 GET /health 요청과 health 함수를 연결합니다. 함수가 반환한 dict는 JSON 응답으로 직렬화됩니다. Uvicorn이 ASGI 호출 규약에 따라 FastAPI 객체를 실행합니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
다음 강의 연결
실행 가능한 서버가 준비됐습니다. 4강. HTTP 요청·응답과 REST API 설계에서 path operation을 기록 리소스의 method·path·상태 코드 계약으로 확장합니다.
FastAPI 프로젝트 생성과 서버 실행 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.