2024. 12. 30. 16:32ㆍ카테고리 없음
이전 시간에는 GPT를 사용하여 fast API 의 요청과 응답에 대해서 공부해 보았다.
이제 라우터와 구조를 배워보자.
FastAPI 강의 계획
1. 기본 개념 및 환경 설정 (완료)
- FastAPI 설치 및 설정
- 첫 번째 API 엔드포인트 작성 및 실행
- Swagger UI와 ReDoc 사용법
2. 요청 및 응답 처리 (Request/Response) (완료)
- 요청 매개변수: Query, Path, Body
- 유효성 검사: Pydantic을 사용한 데이터 검증
- JSON 응답: Dict 및 Pydantic 모델 활용
3. FastAPI 라우터 및 구조화
- 라우터를 사용하여 코드 분리하기
- 모듈화된 프로젝트 구조 설계
4. 의존성 주입 (Dependency Injection)
- FastAPI의 의존성 주입 개념
- 공통 로직 (ex. 인증, 데이터베이스 연결) 재사용하기
5. 데이터베이스 연동
- SQLAlchemy 및 FastAPI 연동
- 데이터베이스 CRUD 작업
- 비동기 데이터베이스 (ex. async SQLAlchemy)
6. 인증 및 권한 관리
- OAuth2와 JWT를 사용한 인증
- 사용자 등록 및 로그인 기능 구현
- 권한 관리 (Role-Based Access Control)
7. 비동기 처리 및 배포
- FastAPI에서의 비동기 처리
- Uvicorn과 Gunicorn을 사용한 서버 배포
- Docker를 활용한 컨테이너화
8. 고급 주제
- WebSocket 구현
- Background Tasks 사용하기
- 이벤트 기반 처리 및 메시지 큐 연동
9. 프로젝트 실습
- 간단한 RESTful API 프로젝트 작성
- To-Do 리스트, 블로그, 또는 간단한 소셜 네트워크 등 선택
- 문서화 및 배포
10. 추가 학습
- FastAPI 커뮤니티 리소스 및 패턴
- 확장 기능 (ex. GraphQL, gRPC)
3. FastAPI 라우터 및 구조화
- 라우터를 사용하여 코드 분리하기
- 모듈화된 프로젝트 구조 설계
구조화라.. 아마 유지보수성 때문에 특정한 패턴으로 작성하여 일의 능률을 올리는 방법같다.
일단 라우터! 라는 친구를 정확이 알아보자
사실 라우터 검색하면 이런친구가 먼저 나오는데 이 친구가 하는 일이 결국 fastAPI 의 라우터와 같은 역을 한다.
말이 좀 길어졌지만 저 라우터는 데이터 전송장치 즉 호텔의 프론트 (?) 정도로 이해하면 좋을 듯 하다.
손님이 오면 방 키를 주고 알맞는 번호에 가도록 지시하는 호텔의 프론트와 같이
라우터라는 친구도 데이터가 알맞는 자리에 갈 수 있도록 하는 역할을 한다.
- GPT 에게도 설명을 부탁해보자
위 네트워크 라우터와 같이 API의 라우터도 결국 연결해주는 진구임을 알 수 있다.
정리해보면 경로들을 하나씩 다 붙이고 로직도 넣어놓는다면 결국 코드는 알아보기 어려워지고
어떤 기능이 있는지도 알 수 없게 된다. 하지만 라우터를 이용한다면 로직과 경로가 분리되며 " 보기쉬운 " 코드로
탈바꿈한다. 따라서 결국엔 사람이 보고 잘 이해할 수 있는 코드를 위해 필요한 작업이라는 것이다.
뭐랄까 스프링에서 배웠던 config 설정 파일과 겹쳐보이는 것 같다. 스프링에서는 자동등록이 존재하지만
사람을 위해서 설정파일을 따로 만들어 보기좋은 구조를 만들었듯이 이도 그런게 아닐까 생각이 든다.
1. 라우터를 사용하여 코드 분리하기
from fastapi import FastAPI, APIRouter
app = FastAPI()
router = APIRouter()
@router.get("/items/")
def get_items():
return {"message": "This is the items endpoint"}
@router.post("/items/")
def create_item(name: str):
return {"message": f"Item {name} created"}
app.include_router(router)
단일 파일에서 라우터를 사용하는 것이다.
뭔가 진짜 스프링에 어노테이션이 떠오르는 그림인데 이렇게도 사용할 수 있다.
2. 모듈화된 프로젝트 구조 설계
이런 파일 구조를 만들어 관리하라고 한다.
그래서 만들고 넣어 줬다.
코드들을 보면 이전과 차이를 느낄 수 있는데
이전에는 바로바로 "/items" 과 같은 주소를 넘겼다 근데 이번엔 등록된 라우터 "/items" 을 거치고 "/" 으로 접근한다.
즉 위에서 예시로 들었던 호텔의 방번호가 /items , /users 인 것이다.
음 방번호는 또 나눠지는것을 설명하지 못하니 층 정도로 다시 이해하는게 좋을 듯 하다.
3층에 3번방 처럼 /items 는 층을 이후에 나오는 경로는 방 번호를 의미한다고 하는게 좀 더 이해가 좋다.
아... 공부하는게 되게 짧은데 군대가기 4주 전이라 딱히 할 마음이 들지 않는다.
하지만 뭔가 또 해보고 싶기에 하루 1시간이라도 공부하려고 열심히 써본다.