-# ์ด๋ฒคํธ: startup๊ณผ shutdown
+# Lifespan ์ด๋ฒคํธ
-ํ์์ ๋ฐ๋ผ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์์๋๊ธฐ ์ ์ด๋ ์ข
๋ฃ๋ ๋ ์คํ๋๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ(ํจ์)๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.
+์ ํ๋ฆฌ์ผ์ด์
**์์ ์ **์ ์คํ๋์ด์ผ ํ๋ ๋ก์ง(์ฝ๋)์ ์ ์ํ ์ ์์ต๋๋ค. ์ด๋ ์ด ์ฝ๋๊ฐ **ํ ๋ฒ**๋ง ์คํ๋๋ฉฐ, **์ ํ๋ฆฌ์ผ์ด์
์ด ์์ฒญ์ ๋ฐ๊ธฐ ์์ํ๊ธฐ ์ **์ ์คํ๋๋ค๋ ์๋ฏธ์
๋๋ค.
-์ด ํจ์๋ค์ `async def` ๋๋ ํ๋ฒํ๊ฒ `def`์ผ๋ก ์ ์ธํ ์ ์์ต๋๋ค.
+๋ง์ฐฌ๊ฐ์ง๋ก, ์ ํ๋ฆฌ์ผ์ด์
์ด **์ข
๋ฃ๋ ๋** ์คํ๋์ด์ผ ํ๋ ๋ก์ง(์ฝ๋)์ ์ ์ํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ, ์ด ์ฝ๋๋ **ํ ๋ฒ**๋ง ์คํ๋๋ฉฐ, **์ฌ๋ฌ ์์ฒญ์ ์ฒ๋ฆฌํ ํ**์ ์คํ๋ฉ๋๋ค.
+
+์ด ์ฝ๋๊ฐ ์ ํ๋ฆฌ์ผ์ด์
์ด **์์ฒญ์ ๋ฐ๊ธฐ ์์ํ๊ธฐ ์ ์** ์คํ๋๊ณ , ์์ฒญ ์ฒ๋ฆฌ๊ฐ ๋๋ ํ **์ข
๋ฃ ์ง์ ์** ์คํ๋๊ธฐ ๋๋ฌธ์ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์
์ **์๋ช
(Lifespan)**์ ๋ค๋ฃน๋๋ค. (์ ์ ํ "์๋ช
"์ด๋ผ๋ ๋จ์ด๊ฐ ์ค์ํด์ง๋๋ค ๐)
+
+์ด ๋ฐฉ๋ฒ์ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉํด์ผ ํ๋ **์์**์ ์ค์ ํ๊ฑฐ๋ ์์ฒญ ๊ฐ์ **๊ณต์ ๋๋** ์์์ ์ค์ ํ๊ณ , ๋๋ ๊ทธ ํ์ **์ ๋ฆฌ**ํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ํ ๋๋ ๊ณต์ ๋๋ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ๋ก๋ํ๋ ๊ฒฝ์ฐ์
๋๋ค.
+
+
+## ์ฌ์ฉ ์ฌ๋ก
+
+๋จผ์ **์ฌ์ฉ ์ฌ๋ก**๋ฅผ ์๋ก ๋ค์ด๋ณด๊ณ , ์ด๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
+
+์ฐ๋ฆฌ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉํ๊ณ ์ถ์ **๋จธ์ ๋ฌ๋ ๋ชจ๋ธ**์ด ์๋ค๊ณ ์์ํด ๋ด
์๋ค. ๐ค
+
+์ด ๋ชจ๋ธ๋ค์ ์์ฒญ ๊ฐ์ ๊ณต์ ๋๋ฏ๋ก, ์์ฒญ๋ง๋ค ๋ชจ๋ธ์ด ํ๋์ฉ ์๋ ๊ฒ์ด ์๋๋ผ, ์ฌ๋ฌ ์์ฒญ์์ ๋์ผํ ๋ชจ๋ธ์ ์ฌ์ฉํฉ๋๋ค.
+
+๋ชจ๋ธ์ ๋ก๋ํ๋ ๋ฐ **์๋นํ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค๊ณ ์์ํด ๋ด
์๋ค**, ์๋ํ๋ฉด ๋ชจ๋ธ์ด **๋์คํฌ์์ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ผ** ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ์์ฒญ์ ๋ํด ๋ชจ๋ธ์ ๋งค๋ฒ ๋ก๋ํ๊ณ ์ถ์ง ์์ต๋๋ค.
+
+๋ชจ๋/ํ์ผ์ ์ต์์์์ ๋ชจ๋ธ์ ๋ก๋ํ ์๋ ์์ง๋ง, ๊ทธ๋ฌ๋ฉด **๋ชจ๋ธ์ ๋ก๋ํ๋๋ฐ** ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์, ๋จ์ํ ์๋ํ๋ ํ
์คํธ๋ฅผ ์คํํ ๋๋ ๋ชจ๋ธ์ด ๋ก๋๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํด์ **ํ
์คํธ ์๋๊ฐ ๋๋ ค์ง๋๋ค**.
+
+์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ํ๋ ๊ฒ์
๋๋ค. ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ ์ ๋ชจ๋ธ์ ๋ก๋ํ๋, ์ ํ๋ฆฌ์ผ์ด์
์ด ์์ฒญ์ ๋ฐ๊ธฐ ์์ํ๊ธฐ ์ง์ ์๋ง ๋ก๋ํ๊ณ , ์ฝ๋๊ฐ ๋ก๋๋๋ ๋์์ ๋ก๋ํ์ง ์๋๋ก ํ๊ฒ ์ต๋๋ค.
+
+## Lifespan
+
+`FastAPI` ์ ํ๋ฆฌ์ผ์ด์
์ `lifespan` ๋งค๊ฐ๋ณ์์ "์ปจํ
์คํธ ๋งค๋์ "๋ฅผ ์ฌ์ฉํ์ฌ *์์*๊ณผ *์ข
๋ฃ* ๋ก์ง์ ์ ์ํ ์ ์์ต๋๋ค. (์ปจํ
์คํธ ๋งค๋์ ๊ฐ ๋ฌด์์ธ์ง ์ ์ ํ์ ์ค๋ช
๋๋ฆฌ๊ฒ ์ต๋๋ค.)
+
+์์ ๋ฅผ ํตํด ์์ํ๊ณ , ๊ทธ ํ์ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
+
+์ฐ๋ฆฌ๋ `yield`๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ํจ์ `lifespan()`์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํฉ๋๋ค:
+
+{* ../../docs_src/events/tutorial003.py hl[16,19] *}
+
+์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ๋ชจ๋ธ์ ๋ก๋ํ๋ ๋น์ผ *์์* ์์
์ ์๋ฎฌ๋ ์ด์
ํ๊ณ ์์ต๋๋ค. `yield` ์์์ (๊ฐ์ง) ๋ชจ๋ธ ํจ์๋ฅผ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ด ๋ด๊ธด ๋์
๋๋ฆฌ์ ๋ฃ์ต๋๋ค. ์ด ์ฝ๋๋ **์ ํ๋ฆฌ์ผ์ด์
์ด ์์ฒญ์ ๋ฐ๊ธฐ ์์ํ๊ธฐ ์ **, *์์* ๋์์ ์คํ๋ฉ๋๋ค.
+
+๊ทธ๋ฆฌ๊ณ `yield` ์งํ์๋ ๋ชจ๋ธ์ ์ธ๋ก๋ํฉ๋๋ค. ์ด ์ฝ๋๋ **์ ํ๋ฆฌ์ผ์ด์
์ด ์์ฒญ ์ฒ๋ฆฌ ์๋ฃ ํ**, *์ข
๋ฃ* ์ง์ ์ ์คํ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฉ๋ชจ๋ฆฌ๋ GPU์ ๊ฐ์ ์์์ ํด์ ํ๋ ์์
์ ํ ์ ์์ต๋๋ค.
+
+/// tip | ํ
+
+`shutdown`์ ์ ํ๋ฆฌ์ผ์ด์
์ **์ข
๋ฃ**ํ ๋ ๋ฐ์ํฉ๋๋ค.
+
+์๋ก์ด ๋ฒ์ ์ ์์ํด์ผ ํ๊ฑฐ๋, ๊ทธ๋ฅ ์คํ์ ๋ฉ์ถ๊ณ ์ถ์ ์๋ ์์ต๋๋ค. ๐คท
+
+///
+
+### Lifespan ํจ์
+
+๋จผ์ ์ฃผ๋ชฉํ ์ ์, `yield`๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ํจ์(async function)๋ฅผ ์ ์ํ๊ณ ์๋ค๋ ๊ฒ์
๋๋ค. ์ด๋ `yield`๋ฅผ ์ฌ์ฉํ ์์กด์ฑ๊ณผ ๋งค์ฐ ์ ์ฌํฉ๋๋ค.
+
+{* ../../docs_src/events/tutorial003.py hl[14:19] *}
+
+ํจ์์ ์ฒซ ๋ฒ์งธ ๋ถ๋ถ, ์ฆ `yield` ์ด์ ์ ์ฝ๋๋ ์ ํ๋ฆฌ์ผ์ด์
์ด ์์๋๊ธฐ **์ ์** ์คํ๋ฉ๋๋ค.
+
+๊ทธ๋ฆฌ๊ณ `yield` ์ดํ์ ๋ถ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์
์ด ์๋ฃ๋ ํ **๋์ค์** ์คํ๋ฉ๋๋ค.
+
+### ๋น๋๊ธฐ ์ปจํ
์คํธ ๋งค๋์
+
+ํจ์๋ฅผ ํ์ธํด๋ณด๋ฉด, `@asynccontextmanager`๋ก ์ฅ์๋์ด ์์ต๋๋ค.
+
+์ด๊ฒ์ ํจ์๋ฅผ "**๋น๋๊ธฐ ์ปจํ
์คํธ ๋งค๋์ **"๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ฒ์ผ๋ก ๋ณํ์ํต๋๋ค.
+
+{* ../../docs_src/events/tutorial003.py hl[1,13] *}
+
+ํ์ด์ฌ์์ **์ปจํ
์คํธ ๋งค๋์ **๋ `with` ๋ฌธ์์ ์ฌ์ฉํ ์ ์๋ ๊ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด, `open()`์ ์ปจํ
์คํธ ๋งค๋์ ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค:
+
+```Python
+with open("file.txt") as file:
+ file.read()
+```
+์ต๊ทผ ๋ฒ์ ์ ํ์ด์ฌ์์๋ **๋น๋๊ธฐ ์ปจํ
์คํธ ๋งค๋์ **๋ ์์ต๋๋ค. ์ด๋ฅผ `async with`์ ํจ๊ป ์ฌ์ฉํฉ๋๋ค:
+
+```Python
+async with lifespan(app):
+ await do_stuff()
+```
+
+์ปจํ
์คํธ ๋งค๋์ ๋ ์์ ๊ฐ์ ๋น๋๊ธฐ ์ปจํ
์คํธ ๋งค๋์ ๋ฅผ ๋ง๋ค๋ฉด, `with` ๋ธ๋ก์ ๋ค์ด๊ฐ๊ธฐ ์ ์ `yield` ์ด์ ์ ์ฝ๋๊ฐ ์คํ๋๊ณ , `with` ๋ธ๋ก์ ๋ฒ์ด๋ ํ์๋ `yield` ์ดํ์ ์ฝ๋๊ฐ ์คํ๋ฉ๋๋ค.
+
+์์ ์ฝ๋ ์์ ์์๋ ์ง์ ์ฌ์ฉํ์ง ์๊ณ , FastAPI์ ์ ๋ฌํ์ฌ ์ฌ์ฉํ๋๋ก ํฉ๋๋ค.
+
+`FastAPI` ์ ํ๋ฆฌ์ผ์ด์
์ `lifespan` ๋งค๊ฐ๋ณ์๋ **๋น๋๊ธฐ ์ปจํ
์คํธ ๋งค๋์ **๋ฅผ ๋ฐ๊ธฐ ๋๋ฌธ์, ์๋ก์ด `lifespan` ๋น๋๊ธฐ ์ปจํ
์คํธ ๋งค๋์ ๋ฅผ FastAPI์ ์ ๋ฌํ ์ ์์ต๋๋ค.
+
+{* ../../docs_src/events/tutorial003.py hl[22] *}
+
+## ๋์ฒด ์ด๋ฒคํธ (์ฌ์ฉ ์ค๋จ)
/// warning | ๊ฒฝ๊ณ
-์ด๋ฒคํธ ํธ๋ค๋ฌ๋ ์ฃผ ์์ฉ ํ๋ก๊ทธ๋จ์์๋ง ์๋ํฉ๋๋ค. [ํ์ ์์ฉ ํ๋ก๊ทธ๋จ - ๋ง์ดํธ](./sub-applications.md){.internal-link target=_blank}์์๋ ์๋ํ์ง ์์ต๋๋ค.
+*์์*๊ณผ *์ข
๋ฃ*๋ฅผ ์ฒ๋ฆฌํ๋ ๊ถ์ฅ ๋ฐฉ๋ฒ์ ์์์ ์ค๋ช
ํ ๋๋ก `FastAPI` ์ ํ๋ฆฌ์ผ์ด์
์ `lifespan` ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. `lifespan` ๋งค๊ฐ๋ณ์๋ฅผ ์ ๊ณตํ๋ฉด `startup`๊ณผ `shutdown` ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ ๋ ์ด์ ํธ์ถ๋์ง ์์ต๋๋ค. `lifespan`์ ์ฌ์ฉํ ์ง, ๋ชจ๋ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ ์ง ์ ํํด์ผ ํ๋ฉฐ ๋ ๋ค ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
+
+์ด ๋ถ๋ถ์ ๊ฑด๋๋ฐ์
๋ ์ข์ต๋๋ค.
///
-## `startup` ์ด๋ฒคํธ
+*์์*๊ณผ *์ข
๋ฃ* ๋์ ์คํ๋ ์ด ๋ก์ง์ ์ ์ํ๋ ๋์ฒด ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
+
+์ ํ๋ฆฌ์ผ์ด์
์ด ์์๋๊ธฐ ์ ์ ๋๋ ์ข
๋ฃ๋ ๋ ์คํํด์ผ ํ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ(ํจ์)๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.
-์์ฉ ํ๋ก๊ทธ๋จ์ ์์ํ๊ธฐ ์ ์ ์คํํ๋ ค๋ ํจ์๋ฅผ "startup" ์ด๋ฒคํธ๋ก ์ ์ธํฉ๋๋ค:
+์ด ํจ์๋ค์ `async def` ๋๋ ์ผ๋ฐ `def`๋ก ์ ์ธํ ์ ์์ต๋๋ค.
+
+### `startup` ์ด๋ฒคํธ
+
+์ ํ๋ฆฌ์ผ์ด์
์ด ์์๋๊ธฐ ์ ์ ์คํ๋์ด์ผ ํ๋ ํจ์๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด, `"startup"` ์ด๋ฒคํธ๋ก ์ ์ธํฉ๋๋ค:
{* ../../docs_src/events/tutorial001.py hl[8] *}
-์ด ๊ฒฝ์ฐ `startup` ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์๋ ๋จ์ํ ๋ช ๊ฐ์ง ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋ `dict` ํ์์ "๋ฐ์ดํฐ๋ฒ ์ด์ค"๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
+์ด ๊ฒฝ์ฐ, `startup` ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์๋ "database"๋ผ๋ ํญ๋ชฉ(๋จ์ง `dict`)์ ์ผ๋ถ ๊ฐ์ผ๋ก ์ด๊ธฐํํฉ๋๋ค.
-ํ๋ ์ด์์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์๋ฅผ ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
+์ฌ๋ฌ ๊ฐ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
-๊ทธ๋ฆฌ๊ณ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ชจ๋ `startup` ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ์๋ฃ๋ ๋๊น์ง ์์ฒญ์ ๋ฐ์ง ์์ต๋๋ค.
+์ ํ๋ฆฌ์ผ์ด์
์ ๋ชจ๋ `startup` ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ์๋ฃ๋ ๋๊น์ง ์์ฒญ์ ๋ฐ๊ธฐ ์์ํ์ง ์์ต๋๋ค.
-## `shutdown` ์ด๋ฒคํธ
+### `shutdown` ์ด๋ฒคํธ
-รฌ\9d\91รฌ\9aยฉ รญ\94\84รซยก\9cรชยทยธรซ\9eยจรฌ\9dยด รฌยข\85รซยฃ\8cรซ\90ย รซ\95\8c รฌ\8bยครญ\96\89รญ\95\98รซย ยครซ\8a\94 รญ\95ยจรฌ\88\98รซยฅยผ รฌยถ\94รชยฐ\80รญ\95\98รซย ยครซยฉยด `"shutdown"` ์ด๋ฒคํธ๋ก ์ ์ธํฉ๋๋ค:
+รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98รฌ\9dยด รฌยข\85รซยฃ\8cรซ\90ย รซ\95\8c รฌ\8bยครญ\96\89รซ\90\98รฌ\96ยดรฌ\95ยผ รญ\95\98รซ\8a\94 รญ\95ยจรฌ\88\98รซยฅยผ รฌยถ\94รชยฐ\80รญ\95\98รซย ยครซยฉยด, `"shutdown"` ์ด๋ฒคํธ๋ก ์ ์ธํฉ๋๋ค:
{* ../../docs_src/events/tutorial002.py hl[6] *}
-รฌ\9dยด รฌ\98\88รฌย \9cรฌ\97\90รฌ\84\9c `shutdown` รฌ\9dยดรซยฒยครญ\8aยธ รญ\95ยธรซ\93ยครซ\9fยฌ รญ\95ยจรฌ\88\98รซ\8a\94 `"Application shutdown"`รฌ\9dยดรซ\9dยผรซ\8a\94 รญ\85\8dรฌ\8aยครญ\8aยธรชยฐ\80 รฌย \81รญ\9e\8c `log.txt` รญ\8c\8cรฌ\9dยผรฌ\9d\84 รฌยถ\94รชยฐ\80รญ\95ย รชยฒ\83รฌ\9e\85๋๋ค.
+รฌ\97ยฌรชยธยฐรฌ\84\9c, `shutdown` รฌ\9dยดรซยฒยครญ\8aยธ รญ\95ยธรซ\93ยครซ\9fยฌ รญ\95ยจรฌ\88\98รซ\8a\94 `"Application shutdown"`รฌ\9dยดรซ\9dยผรซ\8a\94 รญ\85\8dรฌ\8aยครญ\8aยธรซยฅยผ `log.txt` รญ\8c\8cรฌ\9dยผรฌ\97\90 รชยธยฐรซยก\9dรญ\95ยฉ๋๋ค.
/// info | ์ ๋ณด
-`open()` รญ\95ยจรฌ\88\98รฌ\97\90รฌ\84\9c `mode="a"`รซ\8a\94 "รฌยถ\94รชยฐ\80"รซยฅยผ รฌ\9d\98รซยฏยธรญ\95ยฉรซ\8b\88รซ\8bยค. รซ\94ยฐรซ\9dยผรฌ\84\9c รฌ\9dยดรซยฏยธ รฌยกยดรฌ\9eยฌรญ\95\98รซ\8a\94 รญ\8c\8cรฌ\9dยผรฌ\9d\98 รซ\82ยดรฌ\9aยฉรฌ\9d\84 รซ\8dยฎรฌ\96ยดรฌ\93ยฐรฌยง\80 รฌ\95\8aรชยณย รฌ\83\88รซยก\9cรฌ\9aยด รฌยค\84รฌ\9d\84 รฌยถ\94รชยฐ\80รญ\95ยฉรซ\8b\88รซ\8bยค.
+`open()` รญ\95ยจรฌ\88\98รฌ\97\90รฌ\84\9c `mode="a"`รซ\8a\94 "รฌยถ\94รชยฐ\80"รซยฅยผ รฌ\9d\98รซยฏยธรญ\95\98รซยฏ\80รซยก\9c, รญ\8c\8cรฌ\9dยผรฌ\97\90 รฌ\9e\88รซ\8a\94 รชยธยฐรฌยกยด รซ\82ยดรฌ\9aยฉรฌ\9d\80 รซ\8dยฎรฌ\96ยดรฌ\93ยฐรฌยง\80 รฌ\95\8aรชยณย รฌ\83\88รซยก\9cรฌ\9aยด รฌยค\84รฌ\9dยด รฌยถ\94รชยฐ\80รซ\90ยฉรซ\8b\88รซ\8bยค.
///
/// tip | ํ
-์ด ์์ ์์๋ ํ์ผ๊ณผ ์ํธ์์ฉ ํ๊ธฐ ์ํด ํ์ด์ฌ ํ์ค ํจ์์ธ `open()`์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
+์ด ๊ฒฝ์ฐ, ์ฐ๋ฆฌ๋ ํ์ค ํ์ด์ฌ `open()` ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํ์ผ๊ณผ ์ํธ์์ฉํ๊ณ ์์ต๋๋ค.
-๋ฐ๋ผ์ ๋์คํฌ์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ธฐ ์ํด "๋๊ธฐ"๊ฐ ํ์ํ I/O (์
๋ ฅ/์ถ๋ ฅ) ์์
์ ์ํํฉ๋๋ค.
+๋ฐ๋ผ์ I/O(์
์ถ๋ ฅ) ์์
์ด ํฌํจ๋์ด ์์ด ๋์คํฌ์ ๊ธฐ๋ก๋๋ ๊ฒ์ "๊ธฐ๋ค๋ฆฌ๋" ๊ณผ์ ์ด ํ์ํฉ๋๋ค.
-๊ทธ๋ฌ๋ `open()`์ `async`์ `await`์ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์๋ `async def`๊ฐ ์๋ ํ์ค `def`๋ก ์ ์ธํ๊ณ ์์ต๋๋ค.
+ํ์ง๋ง `open()`์ `async`์ `await`๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
+
+๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์๋ฅผ `async def` ๋์ ์ผ๋ฐ `def`๋ก ์ ์ธํฉ๋๋ค.
///
+### `startup`๊ณผ `shutdown`์ ํจ๊ป ์ฌ์ฉ
+
+*์์*๊ณผ *์ข
๋ฃ* ๋ก์ง์ด ์ฐ๊ฒฐ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฌด์ธ๊ฐ๋ฅผ ์์ํ ํ ๋๋ด๊ฑฐ๋, ์์์ ํ๋ํ ํ ํด์ ํ๋ ๋ฑ์ ์์
์ ํ ์ ์์ต๋๋ค.
+
+์ด๋ฌํ ์์
์ ๋ณ๋์ ํจ์๋ก ์ฒ๋ฆฌํ๋ฉด ์๋ก ๋ก์ง์ด๋ ๋ณ์๋ฅผ ๊ณต์ ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ ์ด๋ ค์์ง๋๋ค. ๊ฐ๋ค์ ์ ์ญ ๋ณ์์ ์ ์ฅํ๊ฑฐ๋ ๋น์ทํ ํธ๋ฆญ์ ์ฌ์ฉํด์ผ ํ ์ ์์ต๋๋ค.
+
+๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์์์ ์ค๋ช
ํ ๋๋ก `lifespan`์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค.
+
+## ๊ธฐ์ ์ ์ธ๋ถ์ฌํญ
+
+ํธ๊ธฐ์ฌ ๋ง์ ๋ถ๋ค์ ์ํ ๊ธฐ์ ์ ์ธ ์ธ๋ถ์ฌํญ์
๋๋ค. ๐ค
+
+ASGI ๊ธฐ์ ์ฌ์์ ๋ฐ๋ฅด๋ฉด, ์ด๋ <a href="https://asgi.readthedocs.io/en/latest/specs/lifespan.html" class="external-link" target="_blank">Lifespan Protocol</a>์ ์ผ๋ถ์ด๋ฉฐ, `startup`๊ณผ `shutdown`์ด๋ผ๋ ์ด๋ฒคํธ๋ฅผ ์ ์ํฉ๋๋ค.
+
/// info | ์ ๋ณด
-์ด๋ฒคํธ ํธ๋ค๋ฌ์ ๊ดํ ๋ด์ฉ์ <a href="https://www.starlette.io/events/" class="external-link" target="_blank">Starlette ์ด๋ฒคํธ ๋ฌธ์</a>์์ ์ถ๊ฐ๋ก ํ์ธํ ์ ์์ต๋๋ค.
+Starlette์ `lifespan` ํธ๋ค๋ฌ์ ๋ํด ๋ ์ฝ๊ณ ์ถ๋ค๋ฉด <a href="https://www.starlette.io/lifespan/" class="external-link" target="_blank">Starlette์ Lifespan ๋ฌธ์</a>์์ ํ์ธํ ์ ์์ต๋๋ค.
+
+์ด ๋ฌธ์์๋ ์ฝ๋์ ๋ค๋ฅธ ์์ญ์์ ์ฌ์ฉํ ์ ์๋ lifespan ์ํ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ๋ ํฌํจ๋์ด ์์ต๋๋ค.
///
+
+## ์๋ธ ์ ํ๋ฆฌ์ผ์ด์
+
+๐จ ์ด lifespan ์ด๋ฒคํธ(`startup`๊ณผ `shutdown`)๋ ๋ฉ์ธ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ํด์๋ง ์คํ๋๋ฉฐ, [์๋ธ ์ ํ๋ฆฌ์ผ์ด์
- Mounts](sub-applications.md){.internal-link target=_blank}์๋ ์คํ๋์ง ์์์ ์ ์ํ์ธ์.