Browse Source

๐ŸŒ Add Korean translation for docs/ko/docs/virtual-environments.md

pull/13422/head
yes0ng 1 month ago
parent
commit
a58839f6e4
  1. 109
      docs/ko/docs/virtual-environments.md

109
docs/ko/docs/virtual-environments.md

@ -2,7 +2,6 @@
ํŒŒ์ด์ฌ ํ”„๋กœ์ ํŠธ์—์„œ ์ž‘์—…ํ•  ๋•Œ, ๊ฐ ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ์„ค์น˜ํ•˜๋Š” ํŒจํ‚ค์ง€๋ฅผ ๊ฒฉ๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด **๊ฐ€์ƒ ํ™˜๊ฒฝ(virtual environment)**(๋˜๋Š” ์œ ์‚ฌํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
๋งŒ์•ฝ ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์–ด๋–ป๊ฒŒ ์ƒ์„ฑํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š”์ง€ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด, ์ด ์„น์…˜์€ ๊ฑด๋„ˆ๋›ฐ์–ด๋„ ๋ฉ๋‹ˆ๋‹ค. ๐Ÿค“
@ -23,7 +22,7 @@
์ด ํŽ˜์ด์ง€๋Š” **๊ฐ€์ƒ ํ™˜๊ฒฝ**์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ž‘๋™ ์›๋ฆฌ๋ฅผ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.
๋งŒ์•ฝ **๋ชจ๋“  ๊ฒƒ์„ ๊ด€๋ฆฌํ•ด ์ฃผ๋Š” ๋„๊ตฌ**(ํŒŒ์ด์ฌ ์„ค์น˜๋ฅผ ํฌํ•จํ•ด)๋ฅผ ์„ ํƒํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, <a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">uv</a>๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์‹ญ์‹œ์˜ค.
**๋ชจ๋“  ๊ฒƒ์„ ๊ด€๋ฆฌํ•ด ์ฃผ๋Š” ๋„๊ตฌ**(ํŒŒ์ด์ฌ ์„ค์น˜๋ฅผ ํฌํ•จํ•˜์—ฌ)๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, <a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">uv</a>๋ฅผ ์‹œ๋„ํ•ด ๋ณด์‹ญ์‹œ์˜ค.
///
@ -58,7 +57,7 @@ $ cd awesome-project
/// tip | ํŒ
์ด ์ž‘์—…์€ **ํ”„๋กœ์ ํŠธ๋‹น ํ•œ ๋ฒˆ**๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋˜๋ฉฐ, ๋งค๋ฒˆ ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.
์ด ์ž‘์—…์€ **ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ํ•œ ๋ฒˆ**๋งŒ ํ•˜๋ฉด ๋˜๊ณ , ๋งค ์ž‘์—… ๋•Œ๋งˆ๋‹ค ์ˆ˜ํ–‰ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.
///
@ -77,7 +76,7 @@ $ python -m venv .venv
/// details | ๋ช…๋ น์–ด์˜ ์˜๋ฏธ
* `python`: `python`์ด๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
* `-m`: ๋ชจ๋“ˆ์„ ์Šคํฌ๋ฆฝํŠธ๋กœ์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ ๋‹ค์Œ์— ์‹คํ–‰ํ•  ๋ชจ๋“ˆ์„ ์ง€์ •ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
* `-m`: ๋ชจ๋“ˆ์„ ์Šคํฌ๋ฆฝํŠธ๋กœ์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. `-m` ๋‹ค์Œ์— ์‹คํ–‰ํ•  ๋ชจ๋“ˆ์„ ์ง€์ •ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
* `venv`: ํŒŒ์ด์ฌ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌํ•จ๋œ `venv` ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
* `.venv`: ์ƒˆ๋กœ์šด ๋””๋ ‰ํ„ฐ๋ฆฌ `.venv`์— ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
@ -101,7 +100,7 @@ $ uv venv
๊ธฐ๋ณธ์ ์œผ๋กœ `uv`๋Š” `.venv`๋ผ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋ฆ„์„ ์ถ”๊ฐ€ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋ฆ„์„ ์ถ”๊ฐ€ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
///
@ -111,7 +110,7 @@ $ uv venv
/// details | `.venv` ๋˜๋Š” ๋‹ค๋ฅธ ์ด๋ฆ„
๋‹ค๋ฅธ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, `.venv`๋กœ ์ด๋ฆ„์„ ๋ถ™์ด๋Š” ๊ด€๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ๋‹ค๋ฅธ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, `.venv`๋กœ ์ด๋ฆ„์„ ๋ถ™์ด๋Š” ๊ด€๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
///
@ -165,9 +164,9 @@ $ source .venv/Scripts/activate
/// tip | ํŒ
๊ทธ ํ™˜๊ฒฝ์— **์ƒˆ๋กœ์šด ํŒจํ‚ค์ง€**๋ฅผ ์„ค์น˜ํ•  ๋•Œ ๋งˆ๋‹ค, ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ๋‹ค์‹œ **ํ™œ์„ฑํ™”**ํ•˜์‹ญ์‹œ์˜ค.
๊ฐ€์ƒ ํ™˜๊ฒฝ์— **์ƒˆ๋กœ์šด ํŒจํ‚ค์ง€**๋ฅผ ์„ค์น˜ํ•  ๋•Œ ๋งˆ๋‹ค, ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ๋‹ค์‹œ **ํ™œ์„ฑํ™”**ํ•˜์‹ญ์‹œ์˜ค.
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•ด๋‹น ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋œ **ํ„ฐ๋ฏธ๋„ (<abbr title="command line interface">CLI</abbr>) ํ”„๋กœ๊ทธ๋žจ**์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ๊ฐ€์ƒ ํ™˜๊ฒฝ์—์„œ ์„ค์น˜๋œ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜๊ณ , ์ „์—ญ์ ์œผ๋กœ ์„ค์น˜๋œ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „์—ญ์ ์œผ๋กœ ์„ค์น˜๋œ ํ”„๋กœ๊ทธ๋žจ์€ ์—ฌ๋Ÿฌ๋ถ„์ด ํ•„์š”ํ•œ ๊ฒƒ๊ณผ ๋‹ค๋ฅธ ๋ฒ„์ „์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•ด๋‹น ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋œ **ํ„ฐ๋ฏธ๋„ (<abbr title="command line interface">CLI</abbr>) ํ”„๋กœ๊ทธ๋žจ**์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ๊ฐ€์ƒ ํ™˜๊ฒฝ์—์„œ ์„ค์น˜๋œ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜๊ณ , ์ „์—ญ์ ์œผ๋กœ ์„ค์น˜๋œ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ „์—ญ์ ์œผ๋กœ ์„ค์น˜๋œ ํ”„๋กœ๊ทธ๋žจ์€ ์—ฌ๋Ÿฌ๋ถ„์ด ํ•„์š”ํ•œ ๊ฒƒ๊ณผ ๋‹ค๋ฅธ ๋ฒ„์ „์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
///
@ -177,7 +176,7 @@ $ source .venv/Scripts/activate
/// tip | ํŒ
์ด๊ฒƒ์€ **์„ ํƒ ์‚ฌํ•ญ**์ด์ง€๋งŒ, ๋ชจ๋“ ๊ฒƒ์ด ์ž˜ ์ž‘๋™ํ•˜๊ณ  ์žˆ๊ณ  ์˜๋„ํ•œ๋Œ€๋กœ ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ **ํ™•์ธ**ํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ **์„ ํƒ ์‚ฌํ•ญ**์ด์ง€๋งŒ, ๋ชจ๋“  ๊ฒƒ์ด ๊ธฐ๋Œ€ํ•œ๋Œ€๋กœ ์ž‘๋™ํ•˜๊ณ  ์˜๋„ํ•œ๋Œ€๋กœ ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ **ํ™•์ธ**ํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
///
@ -193,7 +192,7 @@ $ which python
</div>
์—ฌ๋Ÿฌ๋ถ„์˜ ํ”„๋กœ์ ํŠธ(์˜ˆ์ œ์—์„œ๋Š” `awesome-project`) ๋‚ด๋ถ€์—์„œ, `python`์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ `.venv/bin/python`๋กœ ํ‘œ์‹œ๋œ๋‹ค๋ฉด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.๐ŸŽ‰
์—ฌ๋Ÿฌ๋ถ„์˜ ํ”„๋กœ์ ํŠธ(์—ฌ๊ธฐ์„œ๋Š” `awesome-project`) ๋‚ด๋ถ€์—์„œ, `python`์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ `.venv/bin/python`์œผ๋กœ ํ‘œ์‹œ๋œ๋‹ค๋ฉด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.๐ŸŽ‰
////
@ -209,7 +208,7 @@ C:\Users\user\code\awesome-project\.venv\Scripts\python
</div>
์—ฌ๋Ÿฌ๋ถ„์˜ ํ”„๋กœ์ ํŠธ(์˜ˆ์ œ์—์„œ๋Š” `awesome-project`) ๋‚ด๋ถ€์—์„œ, `python`์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ `.venv\Scripts\python`๋กœ ํ‘œ์‹œ๋œ๋‹ค๋ฉด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.๐ŸŽ‰
์—ฌ๋Ÿฌ๋ถ„์˜ ํ”„๋กœ์ ํŠธ(์—ฌ๊ธฐ์„œ๋Š” `awesome-project`) ๋‚ด๋ถ€์—์„œ, `python`์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ `.venv\Scripts\python`์œผ๋กœ ํ‘œ์‹œ๋œ๋‹ค๋ฉด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.๐ŸŽ‰
////
@ -223,11 +222,11 @@ C:\Users\user\code\awesome-project\.venv\Scripts\python
๋งŒ์•ฝ `pip`(ํŒŒ์ด์ฌ์— ๋‚ด์žฅ๋œ)๋ฅผ ์‚ฌ์šฉํ•ด ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, `pip`๋ฅผ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ **์—…๊ทธ๋ ˆ์ด๋“œ**ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋งŽ์€ ์˜ค๋ฅ˜๋Š” `pip`๋ฅผ ๋จผ์ € ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋งŽ์€ ์˜ค๋ฅ˜๋Š” `pip` ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ๋จผ์ € ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
/// tip | ํŒ
์ผ๋ฐ˜์ ์œผ๋กœ ์ด ์ž‘์—…์€ **ํ•œ๋ฒˆ**๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์ƒ์„ฑํ•œ ์งํ›„์— ํ•ฉ๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ ์ด ์ž‘์—…์€ ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์ƒ์„ฑํ•œ ์งํ›„์— **ํ•œ ๋ฒˆ**๋งŒ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
///
@ -245,11 +244,11 @@ $ python -m pip install --upgrade pip
## `.gitignore` ์ถ”๊ฐ€
**Git**์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, `.venv` ๋‚ด์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์ด Git์—์„œ ์ œ์™ธ๋˜๋„๋ก `.gitignore` ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค. (Git์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.)
**Git**์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, `.venv` ๋‚ด์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์ด Git์—์„œ ์ œ์™ธ๋˜๋„๋ก `.gitignore` ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค. (Git์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค)
/// tip | ํŒ
<a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">`uv`</a>๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์ƒ์„ฑํ–ˆ๋‹ค๋ฉด, ์ด๋ฏธ ์ด ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜์—ˆ์œผ๋ฏ€๋กœ ์ด ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ฐ์–ด๋„ ๋ฉ๋‹ˆ๋‹ค. ๐Ÿ˜Ž
<a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">`uv`</a>๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์ƒ์„ฑํ–ˆ๋‹ค๋ฉด, ์ด๋ฏธ ํ•ด๋‹น ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜์—ˆ์œผ๋ฏ€๋กœ ์ด ๋‹จ๊ณ„๋Š” ๊ฑด๋„ˆ๋›ฐ์–ด๋„ ๋ฉ๋‹ˆ๋‹ค. ๐Ÿ˜Ž
///
@ -269,8 +268,8 @@ $ echo "*" > .venv/.gitignore
/// details | ๋ช…๋ น์–ด์˜ ์˜๋ฏธ
* `echo "*"`: ํ„ฐ๋ฏธ๋„์— `*`๋ฅผ "์ถœ๋ ฅ(print)" ํ•ฉ๋‹ˆ๋‹ค (๋‹ค์Œ ๋ถ€๋ถ„์—์„œ ์•ฝ๊ฐ„ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค).
* `>`: `>`์˜ ์™ผ์ชฝ์˜ ๋ช…๋ น์–ด๋กœ ํ„ฐ๋ฏธ๋„์— ์ถœ๋ ฅ๋œ ๋‚ด์šฉ์„ ํ™”๋ฉด์„ ์ถœ๋ ฅํ•˜์ง€ ์•Š๊ณ , `>`์˜ ์˜ค๋ฅธ์ชฝ์— ์ง€์ •๋œ ํŒŒ์ผ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
* `echo "*"`: ํ„ฐ๋ฏธ๋„์— `*`๋ฅผ "์ถœ๋ ฅ(print)" ํ•ฉ๋‹ˆ๋‹ค. (๋‹ค์Œ ๋ถ€๋ถ„์—์„œ ์•ฝ๊ฐ„ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค)
* `>`: `>`์˜ ์™ผ์ชฝ ๋ช…๋ น์–ด๋กœ ํ„ฐ๋ฏธ๋„์— ์ถœ๋ ฅ๋œ ๋‚ด์šฉ์„ ํ™”๋ฉด์„ ํ‘œ์‹œํ•˜์ง€ ์•Š๊ณ , `>`์˜ ์˜ค๋ฅธ์ชฝ์— ์ง€์ •๋œ ํŒŒ์ผ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
* `.gitignore`: ํ…์ŠคํŠธ๊ฐ€ ์“ฐ์—ฌ์งˆ ํŒŒ์ผ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  Git์—์„œ `*`๋Š” "๋ชจ๋“  ๊ฒƒ(everything)"์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ `.venv` ๋””๋ ‰ํ„ฐ๋ฆฌ ๋‚ด์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์„ ๋ฌด์‹œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
@ -295,9 +294,9 @@ $ echo "*" > .venv/.gitignore
///
### ํŒจํ‚ค์ง€ ์ง์ ‘ ์„ค์น˜
### ํŒจํ‚ค์ง€ ๋ฐ”๋กœ ์„ค์น˜
๋งŒ์•ฝ ์‹œ๊ฐ„์ด ๋ถ€์กฑํ•˜๊ณ  ํ”„๋กœ์ ํŠธ์˜ ํŒจํ‚ค์ง€ ์š”๊ตฌ์‚ฌํ•ญ์„ ์„ ์–ธํ•˜๋Š” ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด, ํŒจํ‚ค์ง€๋ฅผ ์ง์ ‘ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋งŒ์•ฝ ์‹œ๊ฐ„์ด ๋ถ€์กฑํ•˜๊ณ  ํ”„๋กœ์ ํŠธ์˜ ํŒจํ‚ค์ง€ ์š”๊ตฌ์‚ฌํ•ญ์„ ํŒŒ์ผ๋กœ ์„ ์–ธํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด, ํŒจํ‚ค์ง€๋ฅผ ๋ฐ”๋กœ ์„ค์น˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
/// tip | ํŒ
@ -336,7 +335,7 @@ $ uv pip install "fastapi[standard]"
### `requirements.txt` ์—์„œ ์„ค์น˜ํ•˜๊ธฐ
`requirements.txt` ํŒŒ์ผ์ด ์žˆ๋‹ค๋ฉด, ์ด๋ฅผ ์‚ฌ์šฉํ•ด ํŒจํ‚ค์ง€๋“ค์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
`requirements.txt` ํŒŒ์ผ์ด ์žˆ๋‹ค๋ฉด, ์ด๋ฅผ ์‚ฌ์šฉํ•ด ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
//// tab | `pip`
@ -368,7 +367,7 @@ $ uv pip install -r requirements.txt
/// details | `requirements.txt`
๋ช‡๋ช‡ ํŒจํ‚ค์ง€๋“ค์ด ํฌํ•จ๋œ `requirements.txt` ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค:
๋ช‡๋ช‡ ํŒจํ‚ค์ง€๊ฐ€ ํฌํ•จ๋œ `requirements.txt` ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค:
```requirements.txt
fastapi[standard]==0.113.0
@ -379,7 +378,7 @@ pydantic==2.8.0
## ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰
๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™”ํ•œ ํ›„ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๋•Œ ๊ฐ€์ƒ ํ™˜๊ฒฝ ๋‚ด๋ถ€์˜ ํŒŒ์ด์ฌ๊ณผ ์„ค์น˜๋œ ํŒจํ‚ค์ง€๋“ค์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™”ํ•œ ํ›„ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๋•Œ ๊ฐ€์ƒ ํ™˜๊ฒฝ ๋‚ด๋ถ€์— ์„ค์น˜๋œ ํŒŒ์ด์ฌ๊ณผ ํŒจํ‚ค์ง€๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
<div class="termy">
@ -393,9 +392,9 @@ Hello World
## ์—๋””ํ„ฐ ์„ค์ •
์—ฌ๋Ÿฌ๋ถ„์€ ์•„๋งˆ ๋Œ€๋ถ€๋ถ„ ์—๋””ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, ์ž๋™ ์™„์„ฑ ๊ธฐ๋Šฅ๊ณผ ์ธ๋ผ์ธ ์˜ค๋ฅ˜ ํ‘œ์‹œ๋ฅผ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ƒ์„ฑํ•œ ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (๋Œ€๋ถ€๋ถ„ ์ž๋™์œผ๋กœ ๊ฐ์ง€๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค)
์•„๋งˆ ์—ฌ๋Ÿฌ๋ถ„์˜ ๋Œ€๋ถ€๋ถ„์€ ์—๋””ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, ์ž๋™ ์™„์„ฑ ๊ธฐ๋Šฅ๊ณผ ์ธ๋ผ์ธ ์˜ค๋ฅ˜ ํ‘œ์‹œ๋ฅผ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ƒ์„ฑํ•œ ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (๋Œ€๋ถ€๋ถ„ ์ž๋™์œผ๋กœ ๊ฐ์ง€๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค)
์˜ˆ์‹œ:
์˜ˆ:
* <a href="https://code.visualstudio.com/docs/python/environments#_select-and-activate-an-environment" class="external-link" target="_blank">VS Code</a>
* <a href="https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html" class="external-link" target="_blank">PyCharm</a>
@ -418,7 +417,7 @@ $ deactivate
</div>
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด `python`์„ ์‹คํ–‰ํ•  ๋•Œ, ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋œ ๊ฐ€์ƒ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋˜์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด `python`์„ ์‹คํ–‰ํ•  ๋•Œ, ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋œ ๊ฐ€์ƒ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
## ์ž‘์—… ์ค€๋น„ ์™„๋ฃŒ
@ -438,19 +437,19 @@ $ deactivate
FastAPI๋กœ ์ž‘์—…ํ•˜๋ ค๋ฉด <a href="https://www.python.org/" class="external-link" target="_blank">Python</a>์„ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ํ›„์— FastAPI์™€ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๋‹ค๋ฅธ **ํŒจํ‚ค์ง€๋“ค**์„ **์„ค์น˜**ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ํ›„์— FastAPI ๋ฐ ํ•„์š”ํ•œ ๋‹ค๋ฅธ **ํŒจํ‚ค์ง€๋“ค**์„ **์„ค์น˜**ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํŒจํ‚ค์ง€๋“ค์„ ์„ค์น˜ํ•  ๋•Œ๋Š” ๋ณดํ†ต ํŒŒ์ด์ฌ์— ๋‚ด์žฅ๋œ `pip` ๋ช…๋ น์–ด(๋˜๋Š” ์œ ์‚ฌํ•œ ๋Œ€์ฒด ๋„๊ตฌ)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , `pip`๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋ฉด ํŒจํ‚ค์ง€๋“ค์ด **์ „์—ญ ํŒŒ์ด์ฌ ํ™˜๊ฒฝ(global Python environment)**(์ „์—ญ์ ์œผ๋กœ ์„ค์น˜๋œ ํŒŒ์ด์ฌ)์— ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ `pip`๋ฅผ ๊ทธ๋ƒฅ ๋ฐ”๋กœ ์‚ฌ์šฉํ•˜๋ฉด, ํŒจํ‚ค์ง€๋“ค์ด **์ „์—ญ ํŒŒ์ด์ฌ ํ™˜๊ฒฝ(global Python environment)**(์ „์—ญ์ ์œผ๋กœ ์„ค์น˜๋œ ํŒŒ์ด์ฌ)์— ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.
### ๋ฌธ์ œ์ 
๊ทธ๋ ‡๋‹ค๋ฉด, ์™œ ์ „์—ญ ํŒŒ์ด์ฌ ํ™˜๊ฒฝ์— ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋Š”๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋ ๊นŒ์š”?
๊ทธ๋ ‡๋‹ค๋ฉด ์™œ ์ „์—ญ ํŒŒ์ด์ฌ ํ™˜๊ฒฝ์— ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋Š”๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋ ๊นŒ์š”?
์—ฌ๋Ÿฌ๋ถ„์€ ์•„๋งˆ๋„ ์–ธ์  ๊ฐ€ **์„œ๋กœ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋“ค**์— ์˜์กดํ•˜๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ๋“ค์„ ๋งŒ๋“ค๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ค‘ ์ผ๋ถ€ ํ”„๋กœ์ ํŠธ๋Š” ๊ฐ™์€ ํŒจํ‚ค์ง€์˜ **๋‹ค๋ฅธ ๋ฒ„์ „**์— ์˜์กดํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜ฑ
์—ฌ๋Ÿฌ๋ถ„์€ ์•„๋งˆ๋„ ์–ธ์  ๊ฐ€ **์„œ๋กœ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€**์— ์˜์กดํ•˜๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ๋“ค์„ ๋งŒ๋“ค๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ค‘ ์ผ๋ถ€ ํ”„๋กœ์ ํŠธ๋Š” ๊ฐ™์€ ํŒจํ‚ค์ง€์˜ **๋‹ค๋ฅธ ๋ฒ„์ „**์— ์˜์กดํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜ฑ
์˜ˆ๋ฅผ ๋“ค์–ด `philosophers-stone`๋ผ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ๊ทธ๋žจ์€ ํŒจํ‚ค์ง€ **`harry` ๋ฒ„์ „ 1**์— ์˜์กดํ•˜๊ณ , ์—ฌ๋Ÿฌ๋ถ„์€ `harry`๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด `philosophers-stone`๋ผ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ๊ทธ๋žจ์€ ํŒจํ‚ค์ง€ **`harry` ๋ฒ„์ „ `1`**์— ์˜์กดํ•˜๋ฏ€๋กœ, ์—ฌ๋Ÿฌ๋ถ„์€ `harry`๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
```mermaid
flowchart LR
@ -466,7 +465,7 @@ flowchart LR
ํ•˜์ง€๋งŒ ์ด์ œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํŒจํ‚ค์ง€๋ฅผ ๋กœ์ปฌ **๊ฐ€์ƒ ํ™˜๊ฒฝ**์ด ์•„๋‹Œ ์ „์—ญ์ ์œผ๋กœ(์ „์—ญ ํ™˜๊ฒฝ์—) ์„ค์น˜ํ•œ๋‹ค๋ฉด, ์—ฌ๋Ÿฌ๋ถ„์€ `harry`์˜ ์–ด๋–ค ๋ฒ„์ „์„ ์„ค์น˜ํ• ์ง€ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด `philosophers-stone`์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋จผ์ € ๋‹ค์Œ๊ณผ ๊ฐ™์ด `harry` ๋ฒ„์ „ `1`์„ ์„ค์น˜ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค:
์˜ˆ๋ฅผ ๋“ค์–ด `philosophers-stone`์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด `harry` ๋ฒ„์ „ `1`์„ ๋จผ์ € ์„ค์น˜ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค:
<div class="termy">
@ -500,7 +499,7 @@ $ pip install "harry==3"
์ด์ œ ์ „์—ญ ํŒŒ์ด์ฌ ํ™˜๊ฒฝ์— `harry` ๋ฒ„์ „ `3`์ด ์„ค์น˜๋œ ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ `philosophers-stone`์„ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•˜๋ฉด, `harry` ๋ฒ„์ „ `1`์„ ํ•„์š”๋กœ ํ•˜๋ฏ€๋กœ **์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„** ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ `philosophers-stone`์„ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•˜๋ฉด, `harry` ๋ฒ„์ „ `1`์ด ํ•„์š”ํ•˜๋ฏ€๋กœ **์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„** ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
```mermaid
flowchart LR
@ -519,7 +518,7 @@ flowchart LR
/// tip | ํŒ
์ผ๋ฐ˜์ ์œผ๋กœ ํŒŒ์ด์ฌ ํŒจํ‚ค์ง€๋“ค์€ **์ƒˆ๋กœ์šด ๋ฒ„์ „**์—์„œ **ํ˜ธํ™˜์„ฑ์ด ์†์ƒ๋˜๋Š” ๋ณ€๊ฒฝ(breaking changes)์„ ํ”ผํ•˜๊ธฐ** ์œ„ํ•ด ์ตœ์„ ์„ ๋‹คํ•˜์ง€๋งŒ, ๋” ์•ˆ์ „ํ•ด์ง€๋Š” ๋ฐฉ๋ฒ•์€ ์ƒˆ๋กœ์šด ๋ฒ„์ „์„ ๊ณ„ํš์ ์œผ๋กœ ์„ค์น˜ํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ด ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ ํŒŒ์ด์ฌ ํŒจํ‚ค์ง€๋“ค์€ **์ƒˆ๋กœ์šด ๋ฒ„์ „**์—์„œ **ํ˜ธํ™˜์„ฑ์ด ์†์ƒ๋˜๋Š” ๋ณ€๊ฒฝ(breaking changes)์„ ํ”ผํ•˜๊ธฐ** ์œ„ํ•ด ์ตœ์„ ์„ ๋‹คํ•˜์ง€๋งŒ, ์ƒˆ ๋ฒ„์ „์„ ๊ณ„ํš์ ์œผ๋กœ ์„ค์น˜ํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ด ๋” ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.
///
@ -529,9 +528,9 @@ flowchart LR
## ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋œ ์œ„์น˜
ํŒŒ์ด์ฌ์„ ์„ค์น˜ํ•  ๋•Œ ์ปดํ“จํ„ฐ์— ์—ฌ๋Ÿฌ ๋””๋ ‰ํ„ฐ๋ฆฌ๋“ค๊ณผ ํŒŒ์ผ๋“ค์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
ํŒŒ์ด์ฌ์„ ์„ค์น˜ํ•  ๋•Œ ์ปดํ“จํ„ฐ์— ์—ฌ๋Ÿฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์™€ ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
์ด ๋””๋ ‰ํ„ฐ๋ฆฌ๋“ค ์ค‘ ์ผ๋ถ€๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ์„ค์น˜ํ•œ ๋ชจ๋“  ํŒจํ‚ค์ง€๋“ค์„ ์ €์žฅํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
์ด ๋””๋ ‰ํ„ฐ๋ฆฌ๋“ค ์ค‘ ์ผ๋ถ€๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ์„ค์น˜ํ•œ ๋ชจ๋“  ํŒจํ‚ค์ง€๋ฅผ ์ €์žฅํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ:
@ -557,7 +556,7 @@ $ pip install "fastapi[standard]"
์ „์—ญ ํ™˜๊ฒฝ์— ๋ชจ๋“  ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ **ํ”„๋กœ์ ํŠธ๋ณ„ ๊ฐ€์ƒ ํ™˜๊ฒฝ**์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ฐ€์ƒ ํ™˜๊ฒฝ์€ ์ „์—ญ ํ™˜๊ฒฝ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ **๋””๋ ‰ํ„ฐ๋ฆฌ**์ธ๋ฐ, ํŠน์ • ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฐ€์ƒ ํ™˜๊ฒฝ์€ ์ „์—ญ ํ™˜๊ฒฝ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ **๋””๋ ‰ํ„ฐ๋ฆฌ**์ด๋ฉฐ, ํŠน์ • ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด, ๊ฐ ํ”„๋กœ์ ํŠธ๋Š” ์ž์‹ ์˜ ํŒจํ‚ค์ง€๋ฅผ ์œ„ํ•œ ์ž์ฒด์ ์ธ ๊ฐ€์ƒ ํ™˜๊ฒฝ(`.venv` ๋””๋ ‰ํ„ฐ๋ฆฌ)์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
@ -620,7 +619,7 @@ $ source .venv/Scripts/activate
////
์ด ๋ช…๋ น์–ด๋Š” ๋‹ค์Œ ๋ช…๋ น์–ด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ผ๋ถ€ [ํ™˜๊ฒฝ ๋ณ€์ˆ˜](environment-variables.md){.internal-link target=_blank}๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
ํ•ด๋‹น ๋ช…๋ น์–ด๋Š”, ๋‹ค์Œ ๋ช…๋ น์–ด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ผ๋ถ€ [ํ™˜๊ฒฝ ๋ณ€์ˆ˜](environment-variables.md){.internal-link target=_blank}๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ `PATH`์ž…๋‹ˆ๋‹ค.
@ -632,7 +631,7 @@ $ source .venv/Scripts/activate
๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด ๊ฐ€์ƒ ํ™˜๊ฒฝ์˜ ๊ฒฝ๋กœ `.venv/bin`(Linux ๋ฐ macOS) ๋˜๋Š” `.venv\Scripts`(Windows)๊ฐ€ `PATH` ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
ํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์ „ `PATH` ๋ณ€์ˆ˜๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค:
๊ฐ€์ƒํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์ „ `PATH` ๋ณ€์ˆ˜๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค:
//// tab | Linux, macOS
@ -640,7 +639,7 @@ $ source .venv/Scripts/activate
/usr/bin:/bin:/usr/sbin:/sbin
```
์ด๋Š” ์‹œ์Šคํ…œ์ด ๋‹ค์Œ ๊ฒฝ๋กœ์—์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์ฐพ๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค:
์ด๊ฒƒ์€ ์‹œ์Šคํ…œ์ด ๋‹ค์Œ ๊ฒฝ๋กœ์—์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์ฐพ๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค:
* `/usr/bin`
* `/bin`
@ -654,7 +653,7 @@ $ source .venv/Scripts/activate
```plaintext
C:\Windows\System32
```
์ด๋Š” ์‹œ์Šคํ…œ์ด ๋‹ค์Œ ๊ฒฝ๋กœ์—์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์ฐพ๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค:
์ด๊ฒƒ์€ ์‹œ์Šคํ…œ์ด ๋‹ค์Œ ๊ฒฝ๋กœ์—์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์ฐพ๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค:
* `C:\Windows\System32`
@ -668,7 +667,7 @@ C:\Windows\System32
/home/user/code/awesome-project/.venv/bin:/usr/bin:/bin:/usr/sbin:/sbin
```
์ด๋Š” ์‹œ์Šคํ…œ์ด ์ด์ œ๋Š” ๋‹ค์Œ ๊ฒฝ๋กœ์—์„œ ๋จผ์ € ํ”„๋กœ๊ทธ๋žจ์„ ์ฐพ๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค:
์ด๊ฒƒ์€ ์‹œ์Šคํ…œ์ด ์ด์ œ๋Š” ๋‹ค์Œ ๊ฒฝ๋กœ์—์„œ ๋จผ์ € ํ”„๋กœ๊ทธ๋žจ์„ ์ฐพ๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค:
```plaintext
/home/user/code/awesome-project/.venv/bin
@ -692,7 +691,7 @@ C:\Windows\System32
C:\Users\user\code\awesome-project\.venv\Scripts;C:\Windows\System32
```
์ด๋Š” ์‹œ์Šคํ…œ์ด ์ด์ œ๋Š” ๋‹ค์Œ ๊ฒฝ๋กœ์—์„œ ๋จผ์ € ํ”„๋กœ๊ทธ๋žจ์„ ์ฐพ๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค:
์ด๊ฒƒ์€ ์‹œ์Šคํ…œ์ด ์ด์ œ๋Š” ๋‹ค์Œ ๊ฒฝ๋กœ์—์„œ ๋จผ์ € ํ”„๋กœ๊ทธ๋žจ์„ ์ฐพ๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค:
```plaintext
C:\Users\user\code\awesome-project\.venv\Scripts
@ -713,7 +712,7 @@ C:\Users\user\code\awesome-project\.venv\Scripts\python
์ค‘์š”ํ•œ ์ ์€ ๊ฐ€์ƒ ํ™˜๊ฒฝ์˜ ๊ฒฝ๋กœ๊ฐ€ `PATH` ๋ณ€์ˆ˜์˜ **๊ฐ€์žฅ ์•ž์—** ์ถ”๊ฐ€๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์€ ๋‹ค๋ฅธ ํŒŒ์ด์ฌ์„ ์ฐพ๊ธฐ **์ „์—** ์ด ๊ฒฝ๋กœ์—์„œ ๋จผ์ € ํŒŒ์ด์ฌ์„ ์ฐพ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ `python`์„ ์‹คํ–‰ํ–ˆ์„ ๋•Œ, ๋‹ค๋ฅธ ์–ด๋–ค `python`(์˜ˆ๋ฅผ ๋“ค์–ด ์ „์—ญ ํ™˜๊ฒฝ์˜ `python` ๊ฐ™์€) ๋Œ€์‹ ์— **๊ฐ€์ƒ ํ™˜๊ฒฝ์˜** ํŒŒ์ด์ฌ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™” ํ•˜๋ฉด ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋ณ€ํ™”๋„ ์žˆ์ง€๋งŒ, ์ด๊ฒƒ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.
๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋ณ€ํ™”๋„ ์žˆ์ง€๋งŒ, ์ด๊ฒƒ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ ์ž…๋‹ˆ๋‹ค.
## ๊ฐ€์ƒ ํ™˜๊ฒฝ ํ™•์ธํ•˜๊ธฐ
@ -753,15 +752,15 @@ Linux์™€ macOS์—์„œ๋Š” `which`๋ฅผ, Windows PowerShell์—์„œ๋Š” `Get-Command`๋ฅผ
์ด ๋ช…๋ น์–ด์˜ ์ž‘๋™ ๋ฐฉ์‹์€ `PATH` ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํ™•์ธํ•˜๊ณ  **๊ฐ ๊ฒฝ๋กœ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ** ํƒ์ƒ‰ํ•˜์—ฌ, `python`์ด๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ๊ทธ๋žจ์„ ์ฐพ์œผ๋ฉด ๊ทธ **๊ฒฝ๋กœ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค**.
๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์€ `python`์„ ํ˜ธ์ถœํ•  ๋•Œ, ๋ฐ”๋กœ ๊ทธ "`python`"์ด ์‹คํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์€ `python`์„ ํ˜ธ์ถœํ•  ๋•Œ, ๋ฐ”๋กœ ๊ทธ ๊ฒฝ๋กœ์˜ "`python`"์ด ์‹คํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ์—ฌ๋Ÿฌ๋ถ„์€ ์˜ฌ๋ฐ”๋ฅธ ๊ฐ€์ƒ ํ™˜๊ฒฝ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์—ฌ๋Ÿฌ๋ถ„์€ ์˜ฌ๋ฐ”๋ฅธ ๊ฐ€์ƒ ํ™˜๊ฒฝ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
/// tip | ํŒ
ํ•˜๋‚˜์˜ ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™” ํ•˜์—ฌ ํŒŒ์ด์ฌ์„ ์‹คํ–‰ํ•œ ํ›„, **๋˜ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋กœ ์ด๋™**ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•˜๋‚˜์˜ ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™” ํ•˜์—ฌ ํŒŒ์ด์ฌ์„ ์‹คํ–‰ํ•œ ํ›„, **๋˜ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋กœ ์ด๋™**ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋‘ ๋ฒˆ์งธ ํ”„๋กœ์ ํŠธ๋Š” **์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค**. ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ ๊ฐ€์ƒํ™˜๊ฒฝ์˜ ํŒŒ์ด์ฌ์ด๋ผ, **์ž˜๋ชป๋œ ํŒŒ์ด์ฌ**์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋‘ ๋ฒˆ์งธ ํ”„๋กœ์ ํŠธ๋Š” **์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค**. ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ ๊ฐ€์ƒํ™˜๊ฒฝ์œผ๋กœ๋ถ€ํ„ฐ์˜, **์ž˜๋ชป๋œ ํŒŒ์ด์ฌ**์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
์–ด๋–ค `python`์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์€ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๐Ÿค“
@ -769,9 +768,9 @@ Linux์™€ macOS์—์„œ๋Š” `which`๋ฅผ, Windows PowerShell์—์„œ๋Š” `Get-Command`๋ฅผ
## ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ๋น„ํ™œ์„ฑํ™” ํ•˜๋Š” ์ด์œ 
์˜ˆ๋ฅผ ๋“ค์–ด **๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™” ํ•œ** `philosophers-stone` ํ”„๋กœ์ ํŠธ์—์„œ ์ž‘์—… ์ค‘์ผ ๋•Œ, ๊ทธ ํ™˜๊ฒฝ์—์„œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์ž๋ฉด, **๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™” ํ•œ** `philosophers-stone` ํ”„๋กœ์ ํŠธ์—์„œ ์ž‘์—… ์ค‘์ผ ๋•Œ, ๊ทธ ํ™˜๊ฒฝ์—์„œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ **๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ**์ธ `prisoner-of-azkaban`์—์„œ ์ž‘์—…ํ•˜๊ธธ ์›ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ํ›„ **๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ**์ธ `prisoner-of-azkaban`์—์„œ ์ž‘์—…ํ•˜๊ธธ ์›ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ ํ”„๋กœ์ ํŠธ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค:
@ -823,15 +822,15 @@ I solemnly swear ๐Ÿบ
## ๋Œ€์•ˆ
์ด ๊ฐ€์ด๋“œ๋Š” ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ **์ž‘๋™**ํ•˜๋Š”์ง€ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•œ ๊ฐ„๋‹จํ•œ ๊ฐ€์ด๋“œ์ž…๋‹ˆ๋‹ค.
์ด ๊ฐ€์ด๋“œ๋Š” ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ๊ธฐ ์œ„ํ•œ ๊ฐ„๋‹จํ•œ ๊ฐ€์ด๋“œ์ด๊ณ , ๋ชจ๋“  ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ **์ž‘๋™**ํ•˜๋Š”์ง€ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.
๊ฐ€์ƒ ํ™˜๊ฒฝ๊ณผ ํŒจํ‚ค์ง€ ์˜์กด์„ฑ(์š”๊ตฌ์‚ฌํ•ญ), ํ”„๋กœ์ ํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋งŽ์€ **๋Œ€์•ˆ๋“ค**์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฐ€์ƒ ํ™˜๊ฒฝ๊ณผ ํŒจํ‚ค์ง€ ์˜์กด์„ฑ (requirements), ํ”„๋กœ์ ํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋งŽ์€ **๋Œ€์•ˆ๋“ค**์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ผ๋‹จ **์ „์ฒด ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ**, ํŒจํ‚ค์ง€ ์˜์กด์„ฑ, ๊ฐ€์ƒ ํ™˜๊ฒฝ ๋“ฑ์„ ๊ด€๋ฆฌํ•  ๋„๊ตฌ๋ฅผ ์›ํ•˜๊ณ  ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋‹ค๋ฉด, <a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">uv</a>๋ฅผ ์‹œ๋„ํ•ด ๋ณด๊ธธ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
์ผ๋‹จ **์ „์ฒด ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ**, ํŒจํ‚ค์ง€ ์˜์กด์„ฑ, ๊ฐ€์ƒ ํ™˜๊ฒฝ ๋“ฑ์„ ๊ด€๋ฆฌํ•  ๋„๊ตฌ๋ฅผ ์›ํ•˜๊ณ  ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋‹ค๋ฉด, <a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">uv</a>๋ฅผ ์‹œ๋„ํ•ด ๋ณด๊ธธ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.
`uv`๋Š” ๋งŽ์€ ์ผ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
* ๋‹ค์–‘ํ•œ ๋ฒ„์ „์„ ํฌํ•จํ•œ **ํŒŒ์ด์ฌ ์„ค์น˜**
* ๋‹ค์–‘ํ•œ ๋‹ค๋ฅธ ๋ฒ„์ „์˜ **ํŒŒ์ด์ฌ ์„ค์น˜**
* ํ”„๋กœ์ ํŠธ์˜ **๊ฐ€์ƒ ํ™˜๊ฒฝ** ๊ด€๋ฆฌ
* **ํŒจํ‚ค์ง€** ์„ค์น˜
* ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ ํŒจํ‚ค์ง€ **์˜์กด์„ฑ ๋ฐ ๋ฒ„์ „** ๊ด€๋ฆฌ
@ -840,6 +839,6 @@ I solemnly swear ๐Ÿบ
## ๊ฒฐ๋ก 
์ด ๋ชจ๋“  ๋‚ด์šฉ์„ ์ฝ๊ณ  ์ดํ•ดํ–ˆ๋‹ค๋ฉด, ์ด์ œ ์—ฌ๋Ÿฌ๋ถ„์€ ๋‹ค๋ฅธ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค ๋ณด๋‹ค ๊ฐ€์ƒ ํ™˜๊ฒฝ์— ๋Œ€ํ•ด **ํ›จ์”ฌ ๋” ์ž˜ ์•Œ๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค**. ๐Ÿค“
์ด ๋ชจ๋“  ๋‚ด์šฉ์„ ์ฝ๊ณ  ์ดํ•ดํ–ˆ๋‹ค๋ฉด, ์ด์ œ ์—ฌ๋Ÿฌ๋ถ„์€ ๋‹ค๋ฅธ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค ๋ณด๋‹ค ๊ฐ€์ƒ ํ™˜๊ฒฝ์— ๋Œ€ํ•ด **ํ›จ์”ฌ ์ž˜ ์•Œ๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค**. ๐Ÿค“
์ด ์„ธ๋ถ€ ์‚ฌํ•ญ๋“ค์„ ์•ˆ๋‹ค๋Š” ๊ฒƒ์€, ์–ธ์  ๊ฐ€ ๋ณต์žกํ•ด ๋ณด์ด๋Š” ๋ฌธ์ œ๋ฅผ ๋””๋ฒ„๊น…ํ•  ๋•Œ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋•Œ๋Š” ์ด **๋ชจ๋“  ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€** ์•Œ๊ฒŒ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜Ž
์ด ์„ธ๋ถ€ ๋‚ด์šฉ์„ ์•Œ๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์€, ์–ธ์  ๊ฐ€ ๋ณต์žกํ•ด ๋ณด์ด๋Š” ๋ฌธ์ œ๋ฅผ ๋””๋ฒ„๊น…ํ•  ๋•Œ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋•Œ๋Š” ์ด **๋ชจ๋“  ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€**๋„ ์•Œ๊ฒŒ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜Ž

Loadingโ€ฆ
Cancel
Save