Browse Source

๐ŸŒ Update Korean translation for `docs/ko/docs/advanced/events.md` (#13487)

pull/13746/head
Junbeom Lee 2 weeks ago
committed by GitHub
parent
commit
aa2bb3e569
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 146
      docs/ko/docs/advanced/events.md

146
docs/ko/docs/advanced/events.md

@ -1,53 +1,165 @@
# ์ด๋ฒคํŠธ: 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` ์ด๋ฒคํŠธ
์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋  ๋•Œ ์‹คํ–‰ํ•˜๋ ค๋Š” ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด `"shutdown"` ์ด๋ฒคํŠธ๋กœ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค:
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ข…๋ฃŒ๋  ๋•Œ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด, `"shutdown"` ์ด๋ฒคํŠธ๋กœ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค:
{* ../../docs_src/events/tutorial002.py hl[6] *}
์ด ์˜ˆ์ œ์—์„œ `shutdown` ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋Š” `"Application shutdown"`์ด๋ผ๋Š” ํ…์ŠคํŠธ๊ฐ€ ์ ํžŒ `log.txt` ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์„œ, `shutdown` ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋Š” `"Application shutdown"`์ด๋ผ๋Š” ํ…์ŠคํŠธ๋ฅผ `log.txt` ํŒŒ์ผ์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
`open()` ํ•จ์ˆ˜์—์„œ `mode="a"`๋Š” "์ถ”๊ฐ€"๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ๋ฎ์–ด์“ฐ์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ์ค„์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
`open()` ํ•จ์ˆ˜์—์„œ `mode="a"`๋Š” "์ถ”๊ฐ€"๋ฅผ ์˜๋ฏธํ•˜๋ฏ€๋กœ, ํŒŒ์ผ์— ์žˆ๋Š” ๊ธฐ์กด ๋‚ด์šฉ์€ ๋ฎ์–ด์“ฐ์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ์ค„์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
///
/// 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}์—๋Š” ์‹คํ–‰๋˜์ง€ ์•Š์Œ์„ ์œ ์˜ํ•˜์„ธ์š”.

Loadingโ€ฆ
Cancel
Save