์์ ์์ ๋ณธ ๋ฐฉ์(alemdic ์ฌ์ฉ)
https://github.com/tiangolo/full-stack-fastapi-template/tree/master/backend/app
router = APIRouter(
prefix="/",
)
@router.get("/list")# /list ๊ฒฝ๋ก๋ก GET ์์ฒญ์ด ๋ค์ด์ค๋ฉด question_list ํจ์๊ฐ ํธ์ถ๋ฉ๋๋ค.
def question_list():
db = SessionLocal()
_question_list = db.query(Question).order_by(Question.create_date.desc()).all()
db.close()
return _question_list
๋จ์ :
์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ ์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ ๋ง์ ์ฃผ์๊ฐ ํ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ธ์ ์ ์ ๋๋ก ์ข ๋ฃํ์ง ์์ผ๋ฉด ๋ฆฌ์์ค ๋์๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. FastAPI์ ์์กด์ฑ ์ฃผ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์์ฒญ ์ฒ๋ฆฌ ํ ์๋์ผ๋ก ์ธ์ ์ ์ข ๋ฃํ๋๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ๋ํ, ์ค์ ์๋น์ค์์๋ ๋ฐํ๋๋ ๋ฐ์ดํฐ๋ฅผ Pydantic ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์ง๋ ฌํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์๋ต ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ค ๋ช ํํ๊ฒ ์ ์ํ๊ณ , ํด๋ผ์ด์ธํธ์ ์์ ํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
์คํค๋ง๋ฅผ ๋ฏธ๋ฆฌ ์ ํด๋๊ณ ํ๋ ๋ฐฉ์(Pydantic ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์์ฒญ ๋ฐ ์๋ต ์คํค๋ง๋ฅผ ์ ์
@router.post("/japanese/")
def create_japanese_item(item: schemas.JapaneseItemCreate, db: Session = Depends(get_db)):
db_item = models.JapaneseItem(content=item.content)
db.add(db_item)
db.commit()
db.refresh(db_item)
return db_item
์ธ์ ์ด๋?
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฐ๊ฒฐ์ ์ ์งํ๋ ํ ์ฐ์์ ์ธ ์ํธ์์ฉ์ ๊ธฐ๊ฐ์ ์๋ฏธํฉ๋๋ค. ์ด๋ ํด๋ผ์ด์ธํธ(์: ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ)๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์ ์ฒ์ ์ฐ๊ฒฐํ ๋ ์์๋๊ณ , ์ฐ๊ฒฐ์ด ๋ช ์์ ์ผ๋ก ์ข ๋ฃ๋๊ฑฐ๋ ํ์์์์ผ๋ก ์ธํด ์ข ๋ฃ๋ ๋๊น์ง ์ง์๋ฉ๋๋ค. ์ธ์ ๋์ ํด๋ผ์ด์ธํธ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ๋ฑ์ ์์ ์ ํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ ๊ด๋ฆฌ๋ ํนํ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ฐ์ด ๋ค์์ ์ฌ์ฉ์๊ฐ ๋์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ก์ธ์คํด์ผ ํ๋ ํ๊ฒฝ์์ ์ค์ํฉ๋๋ค. ๊ฐ ์ฌ์ฉ์ ๋๋ ํธ๋์ญ์ ๋ง๋ค ๋ณ๋์ ์ธ์ ์ ์ ์งํจ์ผ๋ก์จ, ์ฌ์ฉ์ ๊ฐ์ ์์ ์ด ์๋ก์๊ฒ ์ํฅ์ ์ฃผ์ง ์๋๋ก ๊ฒฉ๋ฆฌ์ํฌ ์ ์์ต๋๋ค. ๋ํ, ์ธ์ ์ ํตํด ํธ๋์ญ์ ๊ด๋ฆฌ, ์ค๋ฅ ์ฒ๋ฆฌ, ์ฑ๋ฅ ์ต์ ํ ๋ฑ์ ์ํํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ ์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ (DBMS)๊ณผ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด, ๊ทธ๋ฆฌ๊ณ ํ๋ ์์ํฌ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ์๋ฅผ ๋ค์ด, SQLAlchemy ๊ฐ์ ORM(Object-Relational Mapping) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ํ์ด์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ, SessionLocal์ ๊ฐ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์ ์ ์์ฑ, ๊ด๋ฆฌํ๊ณ ํธ๋์ญ์ ์ ์ปจํธ๋กคํ ์ ์์ต๋๋ค. ์ด ์ธ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ชจ๋ ์ํธ์์ฉ์ ์บก์ํํ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ํํ๊ธฐ ์ํ ์ฃผ์ ์ธํฐํ์ด์ค ์ญํ ์ ํฉ๋๋ค.
์ ๋ฆฌํ์๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ์์ฉ์ ๊ด๋ฆฌํ๋ ์ค์ํ ๋ฉ์ปค๋์ฆ์ผ๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ, ํธ๋์ญ์ ์ฒ๋ฆฌ, ์ธ์ ์ข ๋ฃ ๋ฑ์ ํฌํจํ๋ ์ผ๋ จ์ ๊ณผ์ ์ ๊ด๋ฆฌํฉ๋๋ค.
๊ฐ๋จํ ํ๋ก์ ํธ, 1๋ช ์ด ๊ฐ๋ฐํ๋ ํ๋ก์ ํธ์์๋ ์๋จ์ ๋ฐฉ์์ด ๋น ๋ฅธ๋ฏ