일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 백엔드
- UNIDEV
- 백엔드개발자
- 인프라
- 온라인테스트
- 체크인미팅
- UNICON2023
- 프리티어
- 배포
- 자바개발자
- 스프링
- EC2
- 생활코딩
- 오블완
- 티스토리챌린지
- RDS
- 게임개발동아리
- Developer
- 전국대학생게임개발동아리연합회
- 인디게임
- 42서울
- 프로그래밍
- 개발공부
- AWS
- CICD
- 도커
- UNICON
- 위키북스
- 라피신
- 스프링부트
- Today
- Total
Hyun's Wonderwall
[FastAPI] 점프 투 FastAPI 공부 시작 본문
점프 투 FastAPI에서 사용하는 버전
FastAPI 0.85.1 버전
파이썬 3.10 버전
Svelte 3.49.0 버전
부트스트랩 5.1.3 버전
나는 그냥 최신버전을 사용했다 (아래 참고, 파이썬은 3.11.4)
파이썬 가상 환경 (venv)
프로젝트별로 사용해야 하는 FastAPI 버전이 다를 수 있으므로, venv를 사용해서 가상환경에 FastAPI를 설치해 사용할 것이다.
터미널에서 가상환경 venv 만들기
참고: https://wikidocs.net/175214
python -m venv myapi
# 실제 개발에서는 python -m venv venv로 했다...
- Scripts 디렉터리 하위로 이동 후 activate 입력 → venv 활성화
C:\venvs> cd myapi/Scripts
C:\venvs\myapi\Scripts> activate
(myapi) C:\venvs\myapi\Scripts>
- venv에서 벗어나려면 deactivate
FastAPI 설치
pip install fastapi
(myapi) C:\Users\SAMSUNG\Documents\GitHub\SongForNewYear-BE\myapi\Scripts>pip install fastapi
Collecting fastapi
Using cached fastapi-0.115.6-py3-none-any.whl (94 kB)
Collecting starlette<0.42.0,>=0.40.0 (from fastapi)
Using cached starlette-0.41.3-py3-none-any.whl (73 kB)
Collecting pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4 (from fastapi)
Using cached pydantic-2.10.4-py3-none-any.whl (431 kB)
Collecting typing-extensions>=4.8.0 (from fastapi)
Using cached typing_extensions-4.12.2-py3-none-any.whl (37 kB)
Collecting annotated-types>=0.6.0 (from pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4->fastapi)
Using cached annotated_types-0.7.0-py3-none-any.whl (13 kB)
Collecting pydantic-core==2.27.2 (from pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4->fastapi)
Using cached pydantic_core-2.27.2-cp311-cp311-win_amd64.whl (2.0 MB)
Collecting anyio<5,>=3.4.0 (from starlette<0.42.0,>=0.40.0->fastapi)
Using cached anyio-4.7.0-py3-none-any.whl (93 kB)
Collecting idna>=2.8 (from anyio<5,>=3.4.0->starlette<0.42.0,>=0.40.0->fastapi)
Using cached idna-3.10-py3-none-any.whl (70 kB)
Collecting sniffio>=1.1 (from anyio<5,>=3.4.0->starlette<0.42.0,>=0.40.0->fastapi)
Using cached sniffio-1.3.1-py3-none-any.whl (10 kB)
Installing collected packages: typing-extensions, sniffio, idna, annotated-types, pydantic-core, anyio, starlette, pydantic, fastapi
Successfully installed annotated-types-0.7.0 anyio-4.7.0 fastapi-0.115.6 idna-3.10 pydantic-2.10.4 pydantic-core-2.27.2 sniffio-1.3.1 starlette-0.41.3 typing-extensions-4.12.2
[notice] A new release of pip is available: 23.1.2 -> 24.3.1
[notice] To update, run: python.exe -m pip install --upgrade pip
(myapi) C:\Users\SAMSUNG\Documents\GitHub\SongForNewYear-BE\myapi\Scripts>python -m pip install
ERROR: You must give at least one requirement to install (see "pip help install")
[notice] A new release of pip is available: 23.1.2 -> 24.3.1
[notice] To update, run: python.exe -m pip install --upgrade pip
pip을 최신 버전으로 설치
python -m pip install --upgrade pip
Uvicorn 설치
Uvicorn을 설치한다. FastAPI는 비동기 방식의 웹 서버 프레임워크이고, 웹 서버는 아니다. 따라서 웹 서버를 같이 써주어야 함.
(c.f. Spring Boot는 spring-boot-starter-web을 사용할 때 Tomcat이 기본적으로 내장되어 있다.)
Uvicorn은 비동기 방식의 http server. ASGI 기반.
pip install "uvicorn[standard]"
프론트엔드 클라이언트는 별도 개발 예정이라 Svelte는 패스했다.
main.py에 Hello API를 만들어 보자.
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def hello():
return {"message": "안녕하세요"}
터미널에 이렇게 입력하면 웹서버가 실행된다. http://127.0.0.1:8000/ 에서 확인.
uvicorn main:app --reload
- main: 모듈명 (main.py)
- app: FastAPI로부터 생성된 인스턴스 (app=FastAPI())
- --reload : 코드 수정시 새로고침되는 옵션 (개발환경에서만 사용할 것)
uvicorn을 종료: 터미널에서 CTRL+C
FastAPI의 편의 기능
실행 가능한 API 문서를 바로 볼 수 있도록 제공 (Swagger 같은)
http://127.0.0.1:8000/docs
읽기만 할 수 있는 문서도 존재
http://127.0.0.1:8000/redoc
프론트엔드에서 API 응답을 fetch해와서 띄우는 방법 https://wikidocs.net/175875
파이참 설치 (선택)
파이참 인터프리터 설정: 파이썬이 바라보아야 하는 인터프리터 위치를 가상 환경 위치로 수정해준다. https://wikidocs.net/175832
Fast API 프로젝트 구조
├── main.py
├── database.py
├── models.py
├── domain
│ ├── answer
│ ├── question
│ └── user
└── frontend
프로젝트를 설정하는 main.py 파일
main.py 파일에 생성한 app 객체는 FastAPI의 핵심 객체.
app 객체를 통해 FastAPI의 설정을 할 수 있음.
main.py는 FastAPI 프로젝트의 전체적인 환경을 설정하는 파일임.
데이터베이스를 설정하는 database.py 파일
database.py 파일은 데이터베이스와 관련된 설정을 하는 파일.
이 파일에는 데이터베이스를 사용하기 위한 변수, 함수등을 정의하고
접속할 데이터베이스의 주소와 사용자, 비밀번호등을 관리함.
모델을 관리하는 models.py 파일
파이보 프로젝트는 ORM(object relational mapping)을 지원하는 파이썬 데이터베이스 도구인 SQLAlchemy를 사용.
SQLAlchemy는 모델 기반으로 데이터베이스를 처리한다. "모델 클래스들을 정의할 models.py 파일이 필요",
API를 구성하는 domain 디렉터리
도메인은 "질문", "답변", "사용자" 처럼 굵직한 요구사항 또는 문제 영역을 대표하는 말이다. 이 프로젝트는 총 3개의 도메인을 두어 그 하위에 관련된 파일을 작성하고자 한다.
그리고 각 도메인은 API를 생성하기 위해서 다음과 같은 파일들이 필요하다.
- 라우터 파일 - URL과 API의 전체적인 동작을 관리
- 데이터베이스 처리 파일 - 데이터의 생성(Create), 조회(Read), 수정(Update), 삭제(Delete)를 처리 (CRUD)
- 입출력 관리 파일 - 입력 데이터와 출력 데이터의 스펙 정의 및 검증
예를 들어 질문(domain/question) 도메인이라면 다음의 3개 파일이 필요하다. - question_router.py - 라우터 파일
- question_crud.py - 데이터베이스 처리 파일
- uestion_schema.py - 입출력 관리 파일
frontend
Svelte 프레임워크를 설치한 디렉터리. Svelte의 소스 및 빌드 파일들을 저장할 프론트엔드의 루트 디렉터리. 최종적으로 frontend/dist 디렉터리에 생성된 빌드 파일들을 배포시에 사용할 것임.
모델로 데이터베이스 관리하기
모델 만들고 테이블 생성
https://wikidocs.net/175967
데이터 생성, 수정, 삭제, 조회
https://wikidocs.net/175967
질문 목록 API 만들기
- 라우터(Router)
- 의존성 주입(Dependency Injection)
- Pydantic으로 하는 입출력 관리
- CRUD 파일 작성
을 배울 것이다.
라우터
의존성 주입
- 스키마
- Pydantic은 Python 애플리케이션에서 데이터 유효성 검사를 쉽게 할 수 있도록 돕는 라이브러리이다
출처: https://rudaks.tistory.com/entry/python-pydantic란-무엇인가 [[루닥스 블로그] 연습만이 살길이다:티스토리]
CRUD
질문 상세 API 만들기
답변 등록 API
질문 목록 API
질문 목록 API를 페이징으로 수정
회원가입
https://wikidocs.net/176872
로그인
https://wikidocs.net/176934
글쓴이 정보 추가
https://wikidocs.net/177075