인공지능 개발자 수다(유튜브 바로가기) 자세히보기

Fastapi

[FastAPI] 개념과 기본 사용법 (1)

Suda_777 2024. 7. 10. 23:21

목차

    반응형

    1. 설치

    • pip 설치
    pip install fastapi uvicorn

     

    • poetry 설치
    poetry add fastapi unicorn

     

    2. 주요 구성요소

    2.1. 애플리케이션 인스턴스

    가장 핵심이 되는 FastAPI 인스턴스 이다.

    인스턴스는 모든 라우팅, 미들웨어, 이벤트 핸들러 등을 관리한다.

    from fastapi import FastAPI
    app = FastAPI()

     

    애플리케이션 실행

    if __name__ == '__main__':
        import uvicorn
        uvicorn.run(app, host='localhost', port=8000)

    2.2. 라우팅 및 경로 작업

    @app.get(), @app.post() 를 사용한다.

    경로를 지정해주고, 요청을 처리할 함수를 만들어 준다.

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

     

    2.3. 의존성 주입

    공통 로직을 재사용하고, 코드의 결합도를 낮출 수 있다.

    from fastapi import Depends
    
    def get_db():
        db = DBSession()
        try:
            yield db
        finally:
            db.close()
    
    @app.get("/items/")
    async def read_items(db = Depends(get_db)):
        data = db.get_data()
        return data

     

    의존성 주입은 아래와 같은 상황에 주로 사용한다.

    • 공용된 로직을 가졌을 경우 (같은 코드 로직이 계속 반복되는 경우).
    • 데이터베이스 연결을 공유하는 경우.
    • 보안, 인증, 역할 요구 사항 등을 강제하는 경우.
    • 그리고 많은 다른 사항...

    2.4. Pydantic

    Pydantic을 사용해 데이터를 정의한다.

    from pydantic import BaseModel
    
    class Item(BaseModel):
        name: str
        price: float
    
    @app.post("/items/")
    async def create_item(item: Item):
        return item

     

    3. 파일의 기본 구조

    /myproject
    │── main.py               # 애플리케이션 생성 및 설정을 포함
    │── requirements.txt      # 필요한 패키지 목록
    │
    ├── routers               # API 라우터 파일들을 모아 둔 디렉토리
    │   ├── __init__.py
    │   ├── users.py          # 사용자 관련 API 엔드포인트
    │   └── items.py          # 아이템 관련 API 엔드포인트
    │
    ├── models                # 데이터 모델 정의
    │   ├── __init__.py
    │   ├── user_model.py     # 사용자 데이터 모델
    │   └── item_model.py     # 아이템 데이터 모델
    │
    ├── services              # 비즈니스 로직과 데이터 처리 로직
    │   ├── __init__.py
    │   ├── user_service.py   # 사용자 데이터 처리 로직
    │   └── item_service.py   # 아이템 데이터 처리 로직
    │
    ├── schemas               # 요청 및 응답 스키마 정의
    │   ├── __init__.py
    │   ├── user_schema.py
    │   └── item_schema.py
    │
    ├── database              # 데이터베이스 설정 및 세션 관리
    │   ├── __init__.py
    │   ├── database.py
    │   └── models.py         # SQLAlchemy 모델
    │
    └── tests                 # 테스트 코드 디렉토리
        ├── __init__.py
        ├── conftest.py       # 테스트 설정
        ├── test_users.py     # 사용자 관련 테스트
        └── test_items.py     # 아이템 관련 테스트

     

    1. routers

    routers 디렉토리는 각종 API 경로를 정의합니다. APIRouter를 사용하여 특정 리소스의 모든 라우트를 그룹화하고, 이를 main.py에 연결합니다.

    2. models

    models 디렉토리는 데이터베이스 스키마 모델을 정의합니다. 이 모델은 SQLAlchemy와 같은 ORM 라이브러리를 사용하여 데이터베이스 테이블과 상호작용합니다.

    3. services

    services 디렉토리는 애플리케이션의 비즈니스 로직을 처리합니다. 데이터베이스와의 상호 작용, 복잡한 계산, 외부 API 호출 등의 작업을 수행합니다.

    4. schemas

    schemas 디렉토리는 입력 데이터 검증 및 출력 데이터의 시리얼라이즈를 담당하는 Pydantic 모델을 정의합니다. 이를 통해 API 요청 및 응답에 대한 스키마를 관리합니다.

    5. database

    database 디렉토리는 데이터베이스 연결 설정, 세션 관리, 트랜잭션 관리 등을 담당합니다. 데이터베이스 관련 공통 기능이 이곳에 위치합니다.

     

    이 구조는 FastAPI 프로젝트의 규모가 커질 때 유연하고 확장 가능하며, 각 컴포넌트의 관심사를 명확히 분리하여 프로젝트의 유지 관리를 도와줍니다.

    반응형

    'Fastapi' 카테고리의 다른 글

    [FastAPI] Pydantic 사용법 (5)  (0) 2024.08.31
    [FastAPI] 비동기(Asynchronous)프로그래밍 (4)  (0) 2024.08.24
    [FastAPI] HTML 사용해 보기 (3)  (0) 2024.08.22
    [FastAPI] get post (2)  (0) 2024.08.17
    FastAPI의 특징과 장단점  (0) 2024.01.14