<aside>
</aside>
๋ค, ์๋ ํ์ธ์! ์ค์ ํ๋ก์ ํธ ๋ ๋ฒ์งธ ์๊ฐ, FastAPI 17๊ฐ์ ๋๋ค! ๐
์ง๋ 16๊ฐ์์๋ ์ฐ๋ฆฌ๊ฐ ๋ง๋ค ToDo ๋ฆฌ์คํธ API์ ๋ชฉํ์ ๊ธฐ๋ฅ ์๊ตฌ์ฌํญ์ ์ ํ๊ณ , ํ์ํ API ์๋ํฌ์ธํธ์ ๋ฐ์ดํฐ ๋ชจ๋ธ(Task)์ ์ค๊ณํ์ต๋๋ค. ์ด์ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ ๋ค์ด๊ฐ ์๊ฐ์ธ๋ฐ, ๊ทธ ์ ์! ์ ์ ๋ฉ์ถฐ์ ์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ๋จผ์ ์ก๊ณ ๊ฐ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์์ ํ๋ก์ ํธ๋ผ๋ฉด main.py
ํ์ผ ํ๋์ ๋ชจ๋ ์ฝ๋๋ฅผ ๋ฃ์ด๋ ๊ด์ฐฎ์ง๋ง, ๊ธฐ๋ฅ์ด ์กฐ๊ธ๋ง ๋ณต์กํด์ ธ๋ ์ฝ๋๊ฐ ๊ธธ์ด์ง๊ณ ๊ด๋ฆฌํ๊ธฐ ์ด๋ ค์์ง๋๋ค. ๐
ํนํ ์ฌ๋ฌ ๋ช
์ด ํ์
ํ๊ฑฐ๋ ์ฅ๊ธฐ์ ์ผ๋ก ์ ์ง๋ณด์ํด์ผ ํ๋ ํ๋ก์ ํธ๋ผ๋ฉด ๋์ฑ ๊ทธ๋ ์ฃ !
์ด๋ฒ ์๊ฐ์๋ FastAPI์ APIRouter
๋ผ๋ ์์ฃผ ์ ์ฉํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ, ์ฐ๋ฆฌ์ ToDo ๋ฆฌ์คํธ ํ๋ก์ ํธ ์ฝ๋๋ฅผ **๊ธฐ๋ฅ๋ณ ๋ชจ๋(ํ์ผ)**๋ก ๊น๋ํ๊ฒ ๋ถ๋ฆฌํ๊ณ ๊ตฌ์กฐํํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฝ๋๊ฐ ํจ์ฌ ๋ ์ฝ๊ธฐ ์ฝ๊ณ , ๊ด๋ฆฌํ๊ธฐ ํธํ๋ฉฐ, ํ์ฅํ๊ธฐ ์ข์ ํํ๊ฐ ๋ ๊ฑฐ์์. ๋ง์น ์ ์ ๋ฆฌ๋ ์๋์ฅ์ฒ๋ผ์! ๐๏ธโจ
์, ๊ทธ๋ผ ์ค๋ฌด์ ๊ฐ๊น์ด ํ๋ก์ ํธ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์ด ๋ณผ๊น์?
์ด๋ฒ 17๊ฐ์์๋ ์ค๋ฌด์์ ์ฌ์ฉ๋ ๋ฒํ ํ๋ก์ ํธ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค๊ณ , FastAPI์ APIRouter
๋ฅผ ํ์ฉํ์ฌ ๊ด๋ จ ์๋ API ์๋ํฌ์ธํธ๋ค์ ๋ณ๋์ ๋ชจ๋(ํ์ผ)๋ก ๋ถ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋๋ค. ์ด์ ๊น์ง ๋ชจ๋ ์ฝ๋๋ฅผ main.py
ํ์ผ ํ๋์ ์์ฑํ์ง๋ง, ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ์ด๋ ์ ์ง๋ณด์๋ฅผ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค.
APIRouter
๋ ๋ง์น ์์ FastAPI ์ฑ์ฒ๋ผ ๋์ํ์ฌ, ํน์ ๊ธฐ๋ฅ(์: 'Task ๊ด๋ฆฌ')๊ณผ ๊ด๋ จ๋ ๊ฒฝ๋ก ์๋(Path Operations)๋ค์ ๊ทธ๋ฃนํํ ์ ์๊ฒ ํด์ค๋๋ค. ์ด๋ ๊ฒ ๋ถ๋ฆฌ๋ ๋ผ์ฐํฐ ๋ชจ๋๋ค์ ๋ฉ์ธ ์ ํ๋ฆฌ์ผ์ด์
(main.py
)์์ app.include_router()
๋ฅผ ์ฌ์ฉํ์ฌ ํฌํจ์ํค๋ ๋ฐฉ์์ผ๋ก ํ๋ก์ ํธ ์ ์ฒด๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
์ด ๊ณผ์ ์์ Pydantic ๋ชจ๋ธ ์ ์๋ ๋ณ๋์ ๋ชจ๋(models/
)๋ก ๋ถ๋ฆฌํ๊ณ , ๋ผ์ฐํฐ๋ routers/
๋๋ ํ ๋ฆฌ์ ์์น์ํค๋ ๋ฑ ๊ธฐ๋ฅ๋ณ๋ก ์ฝ๋๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์ค์ตํฉ๋๋ค. ๋ํ, ๋ผ์ฐํฐ๋ฅผ ํฌํจ์ํฌ ๋ prefix
์ต์
์ผ๋ก ๊ณตํต URL ๊ฒฝ๋ก๋ฅผ ์ง์ ํ๊ณ , tags
์ต์
์ผ๋ก API ๋ฌธ์๋ฅผ ๊น๋ํ๊ฒ ๊ทธ๋ฃนํํ๋ ๋ฐฉ๋ฒ๋ ์์๋ด
๋๋ค. ์ด๋ฅผ ํตํด ์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ์ด ๋ฐ์ด๋ ํ๋ก์ ํธ ๊ตฌ์กฐ์ ๊ธฐ๋ฐ์ ๋ง๋ จํฉ๋๋ค.
์ด ๊ฐ์๋ฅผ ๋ง์น๋ฉด ์ฌ๋ฌ๋ถ์ ๋ค์์ ํ ์ ์๊ฒ ๋ฉ๋๋ค:
APIRouter
๋ฅผ ์ฌ์ฉํ์ฌ ๊ด๋ จ๋ API ์๋ํฌ์ธํธ๋ค์ ๊ทธ๋ฃนํํ๊ณ ๋ณ๋์ ํ์ผ๋ก ๋ถ๋ฆฌํ ์ ์์ต๋๋ค.app.include_router()
๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ๋ฆฌ๋ ๋ผ์ฐํฐ๋ฅผ ํฌํจ์ํฌ ์ ์์ต๋๋ค.prefix
์ต์
์ ์ฌ์ฉํ์ฌ URL ๊ฒฝ๋ก ์ ๋์ฌ๋ฅผ ์ค์ ํ๊ณ , tags
์ต์
์ ์ฌ์ฉํ์ฌ API ๋ฌธ์๋ฅผ ๊ทธ๋ฃนํํ ์ ์์ต๋๋ค.