기능을 두개만 만들었는데도 벌써 main.py 파일 내 코드가 너무 많아졌다. express로 서비스를 만들었을 때도 기능별로 분리하는 작업을 했었는데
FastAPI에도 비슷하게 하는지 궁금해서 사이트를 찾아봤다
https://fastapi.tiangolo.com/tutorial/bigger-applications/
공식문서에 따르면, router / models 등으로 나눠서 분리하는것으로 보이는데, express 로 진행할 때 만큼 세분화하지는 않아 보인다.
그렇게 나누는 것도 서비스 만드는 사람이나 팀 마음대로긴 하지만..
일단 구조화는 진행하되, 구현된 서비스가 적고, 하나의 router에 복잡하거나 많은 연산이 진행될 것 같지는 않아서 공식 문서대로만 나눠봤다.
1. Router 분리
# router/users.py
from fastapi import APIRouter
from models.users import Users
router = APIRouter(prefix = "/api/users", tags = ["users"])
@router.post("/signup")
def signup(Users: Users):
id, email, password = Users.id, Users.email, Users.password
check_duplication = db.users.find_one({"id" : id})
if check_duplication:
return {"error" : "이미 존재하는 ID입니다."}
hash_pw = hashlib.sha256(password.encode("utf-8")).hexdigest()
user_info = {
"id" : id,
"email" : email,
"password" : hash_pw
}
db.users.insert_one(user_info)
return db.users
라우터 분리 시 APIRouter를 호출해서 prefix와 tags 를 전달해주는 것이 보이는데
여기서 prefix의 경우 router 에서 공통적으로 사용할 api 요청 포인트를 적어주는 곳이고, tags는 /docs 에서 보여주는 api 문서를 분리해주는 역할을 한다.
2. Models 분리
# models/users.py
from pydantic import BaseModel
class Users(BaseModel):
id : str
email : str
password : str
모델 부분은 따로 저장하기에는 코드가 너무 적은 듯 한데, 여러 서비스에서 이 구조를 가져다 쓸 수 있도록 하는것 같다.
3. Main.py 에서 Router 호출
from routers import users
app.include_router(users.router)
서비스 구조화는 여기까지 하고, 다음으로는 메모 작성 전 로그인 여부 및 유효성을 검사하는 로직을 구현하자
'Backend > Python' 카테고리의 다른 글
[FastAPI] Project Levup - .env (dotenv) 적용하기 (0) | 2023.11.30 |
---|---|
[FastAPI] Project Levup - 메모 수정 & 삭제 기능 만들기 (0) | 2023.11.29 |
[FastAPI] Project Levup - 메모 기능 만들기 (0) | 2023.11.16 |
[FastAPI] Project Levup - 회원가입과 로그인 기능 만들기 (0) | 2023.11.16 |
[FastAPI] Project Levup - 시작하기 (0) | 2023.11.14 |