์ด๋ฒคํธ: startup๊ณผ shutdown¶
ํ์์ ๋ฐ๋ผ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์์๋๊ธฐ ์ ์ด๋ ์ข ๋ฃ๋ ๋ ์คํ๋๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ(ํจ์)๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.
์ด ํจ์๋ค์ async def
๋๋ ํ๋ฒํ๊ฒ def
์ผ๋ก ์ ์ธํ ์ ์์ต๋๋ค.
๊ฒฝ๊ณ
์ด๋ฒคํธ ํธ๋ค๋ฌ๋ ์ฃผ ์์ฉ ํ๋ก๊ทธ๋จ์์๋ง ์๋ํฉ๋๋ค. ํ์ ์์ฉ ํ๋ก๊ทธ๋จ - ๋ง์ดํธ์์๋ ์๋ํ์ง ์์ต๋๋ค.
startup
์ด๋ฒคํธ¶
์์ฉ ํ๋ก๊ทธ๋จ์ ์์ํ๊ธฐ ์ ์ ์คํํ๋ ค๋ ํจ์๋ฅผ "startup" ์ด๋ฒคํธ๋ก ์ ์ธํฉ๋๋ค:
from fastapi import FastAPI
app = FastAPI()
items = {}
@app.on_event("startup")
async def startup_event():
items["foo"] = {"name": "Fighters"}
items["bar"] = {"name": "Tenders"}
@app.get("/items/{item_id}")
async def read_items(item_id: str):
return items[item_id]
์ด ๊ฒฝ์ฐ startup
์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์๋ ๋จ์ํ ๋ช ๊ฐ์ง ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋ dict
ํ์์ "๋ฐ์ดํฐ๋ฒ ์ด์ค"๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
ํ๋ ์ด์์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์๋ฅผ ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ชจ๋ startup
์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ์๋ฃ๋ ๋๊น์ง ์์ฒญ์ ๋ฐ์ง ์์ต๋๋ค.
shutdown
์ด๋ฒคํธ¶
์์ฉ ํ๋ก๊ทธ๋จ์ด ์ข
๋ฃ๋ ๋ ์คํํ๋ ค๋ ํจ์๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด "shutdown"
์ด๋ฒคํธ๋ก ์ ์ธํฉ๋๋ค:
from fastapi import FastAPI
app = FastAPI()
@app.on_event("shutdown")
def shutdown_event():
with open("log.txt", mode="a") as log:
log.write("Application shutdown")
@app.get("/items/")
async def read_items():
return [{"name": "Foo"}]
์ด ์์ ์์ shutdown
์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์๋ "Application shutdown"
์ด๋ผ๋ ํ
์คํธ๊ฐ ์ ํ log.txt
ํ์ผ์ ์ถ๊ฐํ ๊ฒ์
๋๋ค.
์ ๋ณด
open()
ํจ์์์ mode="a"
๋ "์ถ๊ฐ"๋ฅผ ์๋ฏธํฉ๋๋ค. ๋ฐ๋ผ์ ์ด๋ฏธ ์กด์ฌํ๋ ํ์ผ์ ๋ด์ฉ์ ๋ฎ์ด์ฐ์ง ์๊ณ ์๋ก์ด ์ค์ ์ถ๊ฐํฉ๋๋ค.
ํ
์ด ์์ ์์๋ ํ์ผ๊ณผ ์ํธ์์ฉ ํ๊ธฐ ์ํด ํ์ด์ฌ ํ์ค ํจ์์ธ open()
์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
๋ฐ๋ผ์ ๋์คํฌ์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ธฐ ์ํด "๋๊ธฐ"๊ฐ ํ์ํ I/O (์ ๋ ฅ/์ถ๋ ฅ) ์์ ์ ์ํํฉ๋๋ค.
๊ทธ๋ฌ๋ open()
์ async
์ await
์ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์๋ async def
๊ฐ ์๋ ํ์ค def
๋ก ์ ์ธํ๊ณ ์์ต๋๋ค.
์ ๋ณด
์ด๋ฒคํธ ํธ๋ค๋ฌ์ ๊ดํ ๋ด์ฉ์ Starlette ์ด๋ฒคํธ ๋ฌธ์์์ ์ถ๊ฐ๋ก ํ์ธํ ์ ์์ต๋๋ค.