```console
-$ fastapi deploy
+$ uv run fastapi deploy
Deploying to FastAPI Cloud...
@@ -540,7 +542,7 @@ FastAPI는 Pydantic과 Starlette에 의존합니다.
### `standard` 의존성 { #standard-dependencies }
-`pip install "fastapi[standard]"`로 FastAPI를 설치하면 `standard` 그룹의 선택적 의존성이 함께 설치됩니다.
+`uv add "fastapi[standard]"`로 FastAPI를 설치하면 `standard` 그룹의 선택적 의존성이 함께 설치됩니다:
Pydantic이 사용하는:
@@ -554,17 +556,17 @@ Starlette이 사용하는:
FastAPI가 사용하는:
-* [`uvicorn`](https://www.uvicorn.dev) - 애플리케이션을 로드하고 제공하는 서버를 위한 것입니다. 여기에는 고성능 서빙에 필요한 일부 의존성(예: `uvloop`)이 포함된 `uvicorn[standard]`가 포함됩니다.
+* [`uvicorn`](https://uvicorn.dev) - 애플리케이션을 로드하고 제공하는 서버를 위한 것입니다. 여기에는 고성능 서빙에 필요한 일부 의존성(예: `uvloop`)이 포함된 `uvicorn[standard]`가 포함됩니다.
* `fastapi-cli[standard]` - `fastapi` 명령을 제공하기 위한 것입니다.
* 여기에는 [FastAPI Cloud](https://fastapicloud.com)에 FastAPI 애플리케이션을 배포할 수 있게 해주는 `fastapi-cloud-cli`가 포함됩니다.
### `standard` 의존성 없이 { #without-standard-dependencies }
-`standard` 선택적 의존성을 포함하고 싶지 않다면, `pip install "fastapi[standard]"` 대신 `pip install fastapi`로 설치할 수 있습니다.
+`standard` 선택적 의존성을 포함하고 싶지 않다면, `uv add "fastapi[standard]"` 대신 `uv add fastapi`로 설치할 수 있습니다.
### `fastapi-cloud-cli` 없이 { #without-fastapi-cloud-cli }
-표준 의존성과 함께 FastAPI를 설치하되 `fastapi-cloud-cli` 없이 설치하고 싶다면, `pip install "fastapi[standard-no-fastapi-cloud-cli]"`로 설치할 수 있습니다.
+표준 의존성과 함께 FastAPI를 설치하되 `fastapi-cloud-cli` 없이 설치하고 싶다면, `uv add "fastapi[standard-no-fastapi-cloud-cli]"`로 설치할 수 있습니다.
### 추가 선택적 의존성 { #additional-optional-dependencies }
@@ -572,13 +574,13 @@ FastAPI가 사용하는:
추가 선택적 Pydantic 의존성:
-* [`pydantic-settings`](https://docs.pydantic.dev/latest/usage/pydantic_settings/) - 설정 관리를 위한 것입니다.
-* [`pydantic-extra-types`](https://docs.pydantic.dev/latest/usage/types/extra_types/extra_types/) - Pydantic에서 사용할 추가 타입을 위한 것입니다.
+* [`pydantic-settings`](https://pydantic.dev/docs/validation/latest/concepts/pydantic_settings/) - 설정 관리를 위한 것입니다.
+* [`pydantic-extra-types`](https://github.com/pydantic/pydantic-extra-types) - Pydantic에서 사용할 추가 타입을 위한 것입니다.
추가 선택적 FastAPI 의존성:
* [`orjson`](https://github.com/ijl/orjson) - `ORJSONResponse`를 사용하려면 필요.
-* [`ujson`](https://github.com/esnme/ultrajson) - `UJSONResponse`를 사용하려면 필요.
+* [`ujson`](https://github.com/ultrajson/ultrajson) - `UJSONResponse`를 사용하려면 필요.
## 라이센스 { #license }
diff --git a/docs/ko/docs/project-generation.md b/docs/ko/docs/project-generation.md
index 3a5a9b940..7bfe34a4c 100644
--- a/docs/ko/docs/project-generation.md
+++ b/docs/ko/docs/project-generation.md
@@ -5,13 +5,13 @@
많은 초기 설정, 보안, 데이터베이스 및 일부 API 엔드포인트가 이미 준비되어 있으므로, 여러분은 이 템플릿을 시작하는 데 사용할 수 있습니다.
-GitHub 저장소: [Full Stack FastAPI 템플릿](https://github.com/tiangolo/full-stack-fastapi-template)
+GitHub 저장소: [Full Stack FastAPI 템플릿](https://github.com/fastapi/full-stack-fastapi-template)
## Full Stack FastAPI 템플릿 - 기술 스택과 기능들 { #full-stack-fastapi-template-technology-stack-and-features }
- ⚡ Python 백엔드 API를 위한 [**FastAPI**](https://fastapi.tiangolo.com/ko).
- 🧰 Python SQL 데이터베이스 상호작용을 위한 [SQLModel](https://sqlmodel.tiangolo.com) (ORM).
- - 🔍 FastAPI에 의해 사용되는, 데이터 검증과 설정 관리를 위한 [Pydantic](https://docs.pydantic.dev).
+ - 🔍 FastAPI에 의해 사용되는, 데이터 검증과 설정 관리를 위한 [Pydantic](https://pydantic.dev/docs/).
- 💾 SQL 데이터베이스로서의 [PostgreSQL](https://www.postgresql.org).
- 🚀 프론트엔드를 위한 [React](https://react.dev).
- 💃 TypeScript, hooks, Vite 및 기타 현대적인 프론트엔드 스택을 사용.
diff --git a/docs/ko/docs/python-types.md b/docs/ko/docs/python-types.md
index a0216cd5b..7efd38e17 100644
--- a/docs/ko/docs/python-types.md
+++ b/docs/ko/docs/python-types.md
@@ -271,7 +271,7 @@ def some_function(data: Any):
## Pydantic 모델 { #pydantic-models }
-[Pydantic](https://docs.pydantic.dev/)은 데이터 검증을 수행하는 파이썬 라이브러리입니다.
+[Pydantic](https://pydantic.dev/docs/)은 데이터 검증을 수행하는 파이썬 라이브러리입니다.
속성을 가진 클래스 형태로 데이터의 "모양(shape)"을 선언합니다.
@@ -287,7 +287,7 @@ Pydantic 공식 문서의 예시:
/// note | 참고
-더 알아보려면 [Pydantic 문서를 확인하세요](https://docs.pydantic.dev/).
+더 알아보려면 [Pydantic 문서를 확인하세요](https://pydantic.dev/docs/).
///
diff --git a/docs/ko/docs/virtual-environments.md b/docs/ko/docs/virtual-environments.md
index d2bf72ab8..309a8eb06 100644
--- a/docs/ko/docs/virtual-environments.md
+++ b/docs/ko/docs/virtual-environments.md
@@ -1,865 +1,35 @@
# 가상 환경 { #virtual-environments }
+Python 프로젝트를 작업할 때는 각 프로젝트에 설치된 패키지를 분리하기 위해 **가상 환경**을 사용해야 합니다.
-Python 프로젝트를 작업할 때는 **가상 환경**(또는 이와 유사한 메커니즘)을 사용해 각 프로젝트마다 설치하는 패키지를 분리하는 것이 좋습니다.
-
-/// note | 참고
-
-이미 가상 환경에 대해 알고 있고, 어떻게 생성하고 사용하는지도 알고 있다면, 이 섹션은 건너뛰어도 괜찮습니다. 🤓
-
-///
-
-/// tip | 팁
-
-**가상 환경**은 **환경 변수**와 다릅니다.
-
-**환경 변수**는 시스템에 존재하며, 프로그램이 사용할 수 있는 변수입니다.
-
-**가상 환경**은 몇몇 파일로 구성된 하나의 디렉터리입니다.
-
-///
-
-/// note | 참고
-
-이 페이지에서는 **가상 환경**을 사용하는 방법과 작동 방식을 알려드립니다.
-
-Python 설치까지 포함해 **모든 것을 관리해주는 도구**를 도입할 준비가 되었다면 [uv](https://github.com/astral-sh/uv)를 사용해 보세요.
-
-///
+FastAPI 프로젝트에서는 프로젝트, 의존성, 가상 환경을 관리하기 위해 [uv](https://docs.astral.sh/uv/)를 사용하는 것을 권장합니다.
## 프로젝트 생성 { #create-a-project }
-먼저, 프로젝트를 위한 디렉터리를 하나 생성합니다.
-
-제가 보통 하는 방법은 사용자 홈/유저 디렉터리 안에 `code`라는 디렉터리를 만드는 것입니다.
-
-그리고 그 안에 프로젝트마다 디렉터리를 하나씩 만듭니다.
+[공식 설치 가이드](https://docs.astral.sh/uv/getting-started/installation/)를 사용해 `uv`를 설치한 다음, 프로젝트를 생성하세요:
```console
-// 홈 디렉터리로 이동
-$ cd
-// 모든 코드 프로젝트를 위한 디렉터리 생성
-$ mkdir code
-// 그 code 디렉터리로 이동
-$ cd code
-// 이 프로젝트를 위한 디렉터리 생성
-$ mkdir awesome-project
-// 그 프로젝트 디렉터리로 이동
+$ uv init awesome-project --bare
$ cd awesome-project
+$ uv add "fastapi[standard]"
```
-## 가상 환경 생성 { #create-a-virtual-environment }
+`uv`는 프로젝트를 위한 가상 환경을 자동으로 생성합니다. 직접 생성하거나 활성화할 필요가 없습니다.
-Python 프로젝트를 **처음 시작할 때**, 가상 환경을 **
프로젝트 내부**에 생성하세요.
-
-/// tip | 팁
-
-이 작업은 **프로젝트당 한 번만** 하면 되며, 작업할 때마다 할 필요는 없습니다.
-
-///
-
-//// tab | `venv`
-
-가상 환경을 만들려면 Python에 포함된 `venv` 모듈을 사용할 수 있습니다.
+예를 들어, 프로젝트 환경 안에서 `uv run`으로 명령어를 실행하세요:
```console
-$ python -m venv .venv
+$ uv run fastapi dev
```
-/// details | 명령어 의미
+## 더 알아보기 { #learn-more }
-* `python`: `python`이라는 프로그램을 사용합니다
-* `-m`: 모듈을 스크립트로 호출합니다. 다음에 어떤 모듈인지 지정합니다
-* `venv`: 보통 Python에 기본으로 설치되어 있는 `venv` 모듈을 사용합니다
-* `.venv`: 새 디렉터리인 `.venv`에 가상 환경을 생성합니다
-
-///
-
-////
-
-//// tab | `uv`
-
-[`uv`](https://github.com/astral-sh/uv)가 설치되어 있다면, 이를 사용해 가상 환경을 생성할 수 있습니다.
-
-
-
-```console
-$ uv venv
-```
-
-
-
-/// tip | 팁
-
-기본적으로 `uv`는 `.venv`라는 디렉터리에 가상 환경을 생성합니다.
-
-하지만 디렉터리 이름을 추가 인자로 전달해 이를 커스터마이즈할 수 있습니다.
-
-///
-
-////
-
-해당 명령어는 `.venv`라는 디렉터리에 새로운 가상 환경을 생성합니다.
-
-/// details | `.venv` 또는 다른 이름
-
-가상 환경을 다른 디렉터리에 생성할 수도 있지만, 관례적으로 `.venv`라는 이름을 사용합니다.
-
-///
-
-## 가상 환경 활성화 { #activate-the-virtual-environment }
-
-이후 실행하는 Python 명령어와 설치하는 패키지가 새 가상 환경을 사용하도록, 새 가상 환경을 활성화하세요.
-
-/// tip | 팁
-
-프로젝트 작업을 위해 **새 터미널 세션**을 시작할 때마다 **매번** 이 작업을 하세요.
-
-///
-
-//// tab | Linux, macOS
-
-
-
-```console
-$ source .venv/bin/activate
-```
-
-
-
-////
-
-//// tab | Windows PowerShell
-
-
-
-```console
-$ .venv\Scripts\Activate.ps1
-```
-
-
-
-////
-
-//// tab | Windows Bash
-
-또는 Windows에서 Bash(예: [Git Bash](https://gitforwindows.org/))를 사용하는 경우:
-
-
-
-```console
-$ source .venv/Scripts/activate
-```
-
-
-
-////
-
-/// tip | 팁
-
-해당 환경에 **새 패키지**를 설치할 때마다, 환경을 다시 **활성화**하세요.
-
-이렇게 하면 해당 패키지가 설치한 **터미널(
CLI) 프로그램**을 사용할 때, 전역으로 설치되어 있을 수도 있는(아마 필요한 버전과는 다른 버전인) 다른 프로그램이 아니라 가상 환경에 있는 것을 사용하게 됩니다.
-
-///
-
-## 가상 환경 활성화 여부 확인 { #check-the-virtual-environment-is-active }
-
-가상 환경이 활성화되어 있는지(이전 명령어가 작동했는지) 확인합니다.
-
-/// tip | 팁
-
-이 단계는 **선택 사항**이지만, 모든 것이 예상대로 작동하고 있는지, 그리고 의도한 가상 환경을 사용하고 있는지 **확인**하는 좋은 방법입니다.
-
-///
-
-//// tab | Linux, macOS, Windows Bash
-
-
-
-```console
-$ which python
-
-/home/user/code/awesome-project/.venv/bin/python
-```
-
-
-
-프로젝트 내부(이 경우 `awesome-project`)의 `.venv/bin/python`에 있는 `python` 바이너리가 표시된다면, 정상적으로 작동한 것입니다. 🎉
-
-////
-
-//// tab | Windows PowerShell
-
-
-
-```console
-$ Get-Command python
-
-C:\Users\user\code\awesome-project\.venv\Scripts\python
-```
-
-
-
-프로젝트 내부(이 경우 `awesome-project`)의 `.venv\Scripts\python`에 있는 `python` 바이너리가 표시된다면, 정상적으로 작동한 것입니다. 🎉
-
-////
-
-## `pip` 업그레이드 { #upgrade-pip }
-
-/// tip | 팁
-
-[`uv`](https://github.com/astral-sh/uv)를 사용한다면, `pip` 대신 `uv`로 설치하게 되므로 `pip`을 업그레이드할 필요가 없습니다. 😎
-
-///
-
-`pip`로 패키지를 설치한다면(Python에 기본으로 포함되어 있습니다) 최신 버전으로 **업그레이드**하는 것이 좋습니다.
-
-패키지 설치 중 발생하는 다양한 특이한 오류는 먼저 `pip`를 업그레이드하는 것만으로 해결되는 경우가 많습니다.
-
-/// tip | 팁
-
-보통 이 작업은 가상 환경을 만든 직후 **한 번만** 하면 됩니다.
-
-///
-
-가상 환경이 활성화된 상태인지 확인한 다음(위의 명령어 사용) 아래를 실행하세요:
-
-
-
-```console
-$ python -m pip install --upgrade pip
-
----> 100%
-```
-
-
-
-/// tip | 팁
-
-때로는 pip를 업그레이드하려고 할 때 **`No module named pip`** 오류가 발생할 수 있습니다.
-
-이 경우 아래 명령어로 pip를 설치하고 업그레이드하세요:
-
-
-
-```console
-$ python -m ensurepip --upgrade
-
----> 100%
-```
-
-
-
-이 명령어는 pip가 아직 설치되어 있지 않다면 설치하며, 설치된 pip 버전이 `ensurepip`에서 제공 가능한 버전만큼 최신임을 보장합니다.
-
-///
-
-## `.gitignore` 추가하기 { #add-gitignore }
-
-**Git**을 사용하고 있다면(사용하는 것이 좋습니다), `.venv`의 모든 내용을 Git에서 제외하도록 `.gitignore` 파일을 추가하세요.
-
-/// tip | 팁
-
-[`uv`](https://github.com/astral-sh/uv)로 가상 환경을 만들었다면, 이미 자동으로 처리되어 있으므로 이 단계는 건너뛰어도 됩니다. 😎
-
-///
-
-/// tip | 팁
-
-가상 환경을 만든 직후 **한 번만** 하면 됩니다.
-
-///
-
-
-
-```console
-$ echo "*" > .venv/.gitignore
-```
-
-
-
-/// details | 명령어 의미
-
-* `echo "*"`: 터미널에 `*` 텍스트를 "출력"합니다(다음 부분이 이를 약간 변경합니다)
-* `>`: `>` 왼쪽 명령어가 터미널에 출력한 내용을 터미널에 출력하지 않고, `>` 오른쪽에 있는 파일에 기록하라는 의미입니다
-* `.gitignore`: 텍스트가 기록될 파일 이름입니다
-
-그리고 Git에서 `*`는 "모든 것"을 의미합니다. 따라서 `.venv` 디렉터리 안의 모든 것을 무시합니다.
-
-이 명령어는 다음 내용을 가진 `.gitignore` 파일을 생성합니다:
-
-```gitignore
-*
-```
-
-///
-
-## 패키지 설치 { #install-packages }
-
-환경을 활성화한 뒤, 그 안에 패키지를 설치할 수 있습니다.
-
-/// tip | 팁
-
-프로젝트에 필요한 패키지를 설치하거나 업그레이드할 때는 **한 번**만 하면 됩니다.
-
-버전을 업그레이드하거나 새 패키지를 추가해야 한다면 **다시 이 작업을** 하게 됩니다.
-
-///
-
-### 패키지 직접 설치 { #install-packages-directly }
-
-급하게 작업 중이고 프로젝트의 패키지 요구사항을 선언하는 파일을 사용하고 싶지 않다면, 패키지를 직접 설치할 수 있습니다.
-
-/// tip | 팁
-
-프로그램에 필요한 패키지와 버전을 파일(예: `requirements.txt` 또는 `pyproject.toml`)에 적어두는 것은 (매우) 좋은 생각입니다.
-
-///
-
-//// tab | `pip`
-
-
-
-```console
-$ pip install "fastapi[standard]"
-
----> 100%
-```
-
-
-
-////
-
-//// tab | `uv`
-
-[`uv`](https://github.com/astral-sh/uv)가 있다면:
-
-
-
-```console
-$ uv pip install "fastapi[standard]"
----> 100%
-```
-
-
-
-////
-
-### `requirements.txt`에서 설치 { #install-from-requirements-txt }
-
-`requirements.txt`가 있다면, 이제 이를 사용해 그 안의 패키지를 설치할 수 있습니다.
-
-//// tab | `pip`
-
-
-
-```console
-$ pip install -r requirements.txt
----> 100%
-```
-
-
-
-////
-
-//// tab | `uv`
-
-[`uv`](https://github.com/astral-sh/uv)가 있다면:
-
-
-
-```console
-$ uv pip install -r requirements.txt
----> 100%
-```
-
-
-
-////
-
-/// details | `requirements.txt`
-
-일부 패키지가 있는 `requirements.txt`는 다음과 같이 생겼을 수 있습니다:
-
-```requirements.txt
-fastapi[standard]==0.113.0
-pydantic==2.8.0
-```
-
-///
-
-## 프로그램 실행 { #run-your-program }
-
-가상 환경을 활성화한 뒤에는 프로그램을 실행할 수 있으며, 설치한 패키지가 들어있는 가상 환경 내부의 Python을 사용하게 됩니다.
-
-
-
-```console
-$ python main.py
-
-Hello World
-```
-
-
-
-## 에디터 설정 { #configure-your-editor }
-
-아마 에디터를 사용할 텐데, 자동 완성과 인라인 오류 표시를 받을 수 있도록 생성한 가상 환경을 사용하도록 설정하세요(대부분 자동 감지합니다).
-
-예를 들면:
-
-* [VS Code](https://code.visualstudio.com/docs/python/environments#_select-and-activate-an-environment)
-* [PyCharm](https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html)
-
-/// tip | 팁
-
-보통 이 설정은 가상 환경을 만들 때 **한 번만** 하면 됩니다.
-
-///
-
-## 가상 환경 비활성화 { #deactivate-the-virtual-environment }
-
-프로젝트 작업을 마쳤다면 가상 환경을 **비활성화**할 수 있습니다.
-
-
-
-```console
-$ deactivate
-```
-
-
-
-이렇게 하면 `python`을 실행할 때, 해당 가상 환경과 그 안에 설치된 패키지에서 실행하려고 하지 않습니다.
-
-## 작업할 준비 완료 { #ready-to-work }
-
-이제 프로젝트 작업을 시작할 준비가 되었습니다.
-
-
-
-/// tip | 팁
-
-위의 내용이 무엇인지 더 이해하고 싶으신가요?
-
-계속 읽어보세요. 👇🤓
-
-///
-
-## 가상 환경을 왜 사용하나요 { #why-virtual-environments }
-
-FastAPI로 작업하려면 [Python](https://www.python.org/)을 설치해야 합니다.
-
-그 다음 FastAPI와 사용하려는 다른 **패키지**를 **설치**해야 합니다.
-
-패키지를 설치할 때는 보통 Python에 포함된 `pip` 명령어(또는 유사한 대안)를 사용합니다.
-
-하지만 `pip`를 그대로 직접 사용하면, 패키지는 **전역 Python 환경**(전역 Python 설치)에 설치됩니다.
-
-### 문제점 { #the-problem }
-
-그렇다면, 전역 Python 환경에 패키지를 설치하면 어떤 문제가 있을까요?
-
-어느 시점이 되면 **서로 다른 패키지**에 의존하는 다양한 프로그램을 작성하게 될 것입니다. 그리고 작업하는 프로젝트 중 일부는 같은 패키지의 **서로 다른 버전**에 의존할 수도 있습니다. 😱
-
-예를 들어 `philosophers-stone`이라는 프로젝트를 만들 수 있습니다. 이 프로그램은 **`harry`라는 다른 패키지의 버전 `1`**에 의존합니다. 그래서 `harry`를 설치해야 합니다.
-
-```mermaid
-flowchart LR
- stone(philosophers-stone) -->|requires| harry-1[harry v1]
-```
-
-그다음, 나중에 `prisoner-of-azkaban`이라는 또 다른 프로젝트를 만들고, 이 프로젝트도 `harry`에 의존하지만, 이 프로젝트는 **`harry` 버전 `3`**이 필요합니다.
-
-```mermaid
-flowchart LR
- azkaban(prisoner-of-azkaban) --> |requires| harry-3[harry v3]
-```
-
-하지만 이제 문제가 생깁니다. 로컬 **가상 환경**이 아니라 전역(전역 환경)에 패키지를 설치한다면, 어떤 버전의 `harry`를 설치할지 선택해야 합니다.
-
-`philosophers-stone`을 실행하고 싶다면, 먼저 `harry` 버전 `1`을 다음과 같이 설치해야 합니다:
-
-
-
-```console
-$ pip install "harry==1"
-```
-
-
-
-그리고 전역 Python 환경에 `harry` 버전 `1`이 설치된 상태가 됩니다.
-
-```mermaid
-flowchart LR
- subgraph global[global env]
- harry-1[harry v1]
- end
- subgraph stone-project[philosophers-stone project]
- stone(philosophers-stone) -->|requires| harry-1
- end
-```
-
-하지만 `prisoner-of-azkaban`을 실행하려면 `harry` 버전 `1`을 제거하고 `harry` 버전 `3`을 설치해야 합니다(또는 버전 `3`을 설치하기만 해도 버전 `1`이 자동으로 제거됩니다).
-
-
-
-```console
-$ pip install "harry==3"
-```
-
-
-
-그러면 전역 Python 환경에 `harry` 버전 `3`이 설치된 상태가 됩니다.
-
-그리고 `philosophers-stone`을 다시 실행하려고 하면, `harry` 버전 `1`이 필요하기 때문에 **작동하지 않을** 가능성이 있습니다.
-
-```mermaid
-flowchart LR
- subgraph global[global env]
- harry-1[
harry v1]
- style harry-1 fill:#ccc,stroke-dasharray: 5 5
- harry-3[harry v3]
- end
- subgraph stone-project[philosophers-stone project]
- stone(philosophers-stone) -.-x|⛔️| harry-1
- end
- subgraph azkaban-project[prisoner-of-azkaban project]
- azkaban(prisoner-of-azkaban) --> |requires| harry-3
- end
-```
-
-/// tip | 팁
-
-Python 패키지에서는 **새 버전**에서 **호환성을 깨뜨리는 변경(breaking changes)**을 **피하려고** 최선을 다하는 것이 매우 일반적이지만, 안전을 위해 더 최신 버전은 의도적으로 설치하고, 테스트를 실행해 모든 것이 올바르게 작동하는지 확인할 수 있을 때 설치하는 것이 좋습니다.
-
-///
-
-이제 이런 일이 여러분의 **모든 프로젝트가 의존하는** **많은** 다른 **패키지**에서도 일어난다고 상상해 보세요. 이는 관리하기가 매우 어렵습니다. 그리고 결국 일부 프로젝트는 패키지의 **호환되지 않는 버전**으로 실행하게 될 가능성이 높으며, 왜 무언가가 작동하지 않는지 알지 못하게 될 수 있습니다.
-
-또한 운영체제(Linux, Windows, macOS 등)에 따라 Python이 이미 설치되어 있을 수도 있습니다. 그런 경우에는 시스템에 **필요한 특정 버전**의 패키지가 일부 미리 설치되어 있을 가능성이 큽니다. 전역 Python 환경에 패키지를 설치하면, 운영체제에 포함된 프로그램 일부가 **깨질** 수 있습니다.
-
-## 패키지는 어디에 설치되나요 { #where-are-packages-installed }
-
-Python을 설치하면 컴퓨터에 몇몇 파일이 들어 있는 디렉터리가 생성됩니다.
-
-이 디렉터리 중 일부는 설치한 모든 패키지를 담는 역할을 합니다.
-
-다음을 실행하면:
-
-
-
-```console
-// 지금은 실행하지 마세요, 예시일 뿐입니다 🤓
-$ pip install "fastapi[standard]"
----> 100%
-```
-
-
-
-FastAPI 코드를 담은 압축 파일을 다운로드합니다. 보통 [PyPI](https://pypi.org/project/fastapi/)에서 받습니다.
-
-또한 FastAPI가 의존하는 다른 패키지들의 파일도 **다운로드**합니다.
-
-그 다음 모든 파일을 **압축 해제**하고 컴퓨터의 한 디렉터리에 넣습니다.
-
-기본적으로, 다운로드하고 압축 해제한 파일들은 Python 설치와 함께 제공되는 디렉터리, 즉 **전역 환경**에 저장됩니다.
-
-## 가상 환경이란 무엇인가요 { #what-are-virtual-environments }
-
-전역 환경에 모든 패키지를 두는 문제에 대한 해결책은 작업하는 **각 프로젝트마다 가상 환경**을 사용하는 것입니다.
-
-가상 환경은 전역 환경과 매우 유사한 하나의 **디렉터리**이며, 프로젝트의 패키지를 설치할 수 있습니다.
-
-이렇게 하면 각 프로젝트는 자체 가상 환경(`.venv` 디렉터리)과 자체 패키지를 갖게 됩니다.
-
-```mermaid
-flowchart TB
- subgraph stone-project[philosophers-stone project]
- stone(philosophers-stone) --->|requires| harry-1
- subgraph venv1[.venv]
- harry-1[harry v1]
- end
- end
- subgraph azkaban-project[prisoner-of-azkaban project]
- azkaban(prisoner-of-azkaban) --->|requires| harry-3
- subgraph venv2[.venv]
- harry-3[harry v3]
- end
- end
- stone-project ~~~ azkaban-project
-```
-
-## 가상 환경을 활성화한다는 것은 무엇을 의미하나요 { #what-does-activating-a-virtual-environment-mean }
-
-가상 환경을 활성화한다는 것은, 예를 들어 다음과 같은 명령어로:
-
-//// tab | Linux, macOS
-
-
-
-```console
-$ source .venv/bin/activate
-```
-
-
-
-////
-
-//// tab | Windows PowerShell
-
-
-
-```console
-$ .venv\Scripts\Activate.ps1
-```
-
-
-
-////
-
-//// tab | Windows Bash
-
-또는 Windows에서 Bash(예: [Git Bash](https://gitforwindows.org/))를 사용하는 경우:
-
-
-
-```console
-$ source .venv/Scripts/activate
-```
-
-
-
-////
-
-다음 명령어들에서 사용할 수 있는 몇몇 [환경 변수](environment-variables.md)를 생성하거나 수정하는 것을 의미합니다.
-
-그 변수 중 하나가 `PATH` 변수입니다.
-
-/// tip | 팁
-
-`PATH` 환경 변수에 대해 더 알아보려면 [환경 변수](environment-variables.md#path-environment-variable) 섹션을 참고하세요.
-
-///
-
-가상 환경을 활성화하면 가상 환경의 경로인 `.venv/bin`(Linux와 macOS) 또는 `.venv\Scripts`(Windows)를 `PATH` 환경 변수에 추가합니다.
-
-가령 환경을 활성화하기 전에는 `PATH` 변수가 다음과 같았다고 해보겠습니다:
-
-//// tab | Linux, macOS
-
-```plaintext
-/usr/bin:/bin:/usr/sbin:/sbin
-```
-
-이는 시스템이 다음 위치에서 프로그램을 찾는다는 뜻입니다:
-
-* `/usr/bin`
-* `/bin`
-* `/usr/sbin`
-* `/sbin`
-
-////
-
-//// tab | Windows
-
-```plaintext
-C:\Windows\System32
-```
-
-이는 시스템이 다음 위치에서 프로그램을 찾는다는 뜻입니다:
-
-* `C:\Windows\System32`
-
-////
-
-가상 환경을 활성화한 뒤에는 `PATH` 변수가 다음과 같이 보일 수 있습니다:
-
-//// tab | Linux, macOS
-
-```plaintext
-/home/user/code/awesome-project/.venv/bin:/usr/bin:/bin:/usr/sbin:/sbin
-```
-
-이는 시스템이 이제 다음 위치에서 프로그램을 가장 먼저 찾기 시작한다는 뜻입니다:
-
-```plaintext
-/home/user/code/awesome-project/.venv/bin
-```
-
-그리고 나서 다른 디렉터리들을 탐색합니다.
-
-따라서 터미널에 `python`을 입력하면, 시스템은 다음 위치에서 Python 프로그램을 찾고:
-
-```plaintext
-/home/user/code/awesome-project/.venv/bin/python
-```
-
-그것을 사용하게 됩니다.
-
-////
-
-//// tab | Windows
-
-```plaintext
-C:\Users\user\code\awesome-project\.venv\Scripts;C:\Windows\System32
-```
-
-이는 시스템이 이제 다음 위치에서 프로그램을 가장 먼저 찾기 시작한다는 뜻입니다:
-
-```plaintext
-C:\Users\user\code\awesome-project\.venv\Scripts
-```
-
-그리고 나서 다른 디렉터리들을 탐색합니다.
-
-따라서 터미널에 `python`을 입력하면, 시스템은 다음 위치에서 Python 프로그램을 찾고:
-
-```plaintext
-C:\Users\user\code\awesome-project\.venv\Scripts\python
-```
-
-그것을 사용하게 됩니다.
-
-////
-
-중요한 세부 사항은 가상 환경 경로가 `PATH` 변수의 **맨 앞**에 들어간다는 점입니다. 시스템은 다른 어떤 Python보다도 **먼저** 이를 찾게 됩니다. 이렇게 하면 `python`을 실행할 때, 다른 어떤 `python`(예: 전역 환경의 `python`)이 아니라 **가상 환경의 Python**을 사용하게 됩니다.
-
-가상 환경을 활성화하면 다른 몇 가지도 변경되지만, 이것이 그중 가장 중요한 것 중 하나입니다.
-
-## 가상 환경 확인하기 { #checking-a-virtual-environment }
-
-가상 환경이 활성화되어 있는지 확인할 때는, 예를 들어 다음을 사용합니다:
-
-//// tab | Linux, macOS, Windows Bash
-
-
-
-```console
-$ which python
-
-/home/user/code/awesome-project/.venv/bin/python
-```
-
-
-
-////
-
-//// tab | Windows PowerShell
-
-
-
-```console
-$ Get-Command python
-
-C:\Users\user\code\awesome-project\.venv\Scripts\python
-```
-
-
-
-////
-
-이는 사용될 `python` 프로그램이 **가상 환경 내부에 있는 것**이라는 뜻입니다.
-
-Linux와 macOS에서는 `which`, Windows PowerShell에서는 `Get-Command`를 사용합니다.
-
-이 명령어는 `PATH` 환경 변수에 있는 경로를 **순서대로** 확인하면서 `python`이라는 프로그램을 찾습니다. 찾는 즉시, 그 프로그램의 **경로를 보여줍니다**.
-
-가장 중요한 부분은 `python`을 호출했을 때, 실행될 정확한 "`python`"이 무엇인지 알 수 있다는 점입니다.
-
-따라서 올바른 가상 환경에 있는지 확인할 수 있습니다.
-
-/// tip | 팁
-
-가상 환경을 하나 활성화해서 Python을 사용한 다음, **다른 프로젝트로 이동**하기 쉽습니다.
-
-그리고 두 번째 프로젝트는 다른 프로젝트의 가상 환경에서 온 **잘못된 Python**을 사용하고 있기 때문에 **작동하지 않을** 수 있습니다.
-
-어떤 `python`이 사용되고 있는지 확인할 수 있으면 유용합니다. 🤓
-
-///
-
-## 가상 환경을 왜 비활성화하나요 { #why-deactivate-a-virtual-environment }
-
-예를 들어 `philosophers-stone` 프로젝트에서 작업하면서, **그 가상 환경을 활성화**하고, 패키지를 설치하고, 그 환경으로 작업하고 있다고 해보겠습니다.
-
-그런데 이제 **다른 프로젝트**인 `prisoner-of-azkaban`에서 작업하고 싶습니다.
-
-해당 프로젝트로 이동합니다:
-
-
-
-```console
-$ cd ~/code/prisoner-of-azkaban
-```
-
-
-
-`philosophers-stone`의 가상 환경을 비활성화하지 않으면, 터미널에서 `python`을 실행할 때 `philosophers-stone`의 Python을 사용하려고 할 것입니다.
-
-
-
-```console
-$ cd ~/code/prisoner-of-azkaban
-
-$ python main.py
-
-// sirius 임포트 오류, 설치되어 있지 않습니다 😱
-Traceback (most recent call last):
- File "main.py", line 1, in
- import sirius
-```
-
-
-
-하지만 가상 환경을 비활성화하고 `prisoner-of-azkaban`에 대한 새 가상 환경을 활성화하면, `python`을 실행할 때 `prisoner-of-azkaban`의 가상 환경에 있는 Python을 사용하게 됩니다.
-
-
-
-```console
-$ cd ~/code/prisoner-of-azkaban
-
-// 비활성화를 위해 이전 디렉터리에 있을 필요는 없습니다. 어디서든, 다른 프로젝트로 이동한 뒤에도 할 수 있습니다 😎
-$ deactivate
-
-// prisoner-of-azkaban/.venv의 가상 환경을 활성화하세요 🚀
-$ source .venv/bin/activate
-
-// 이제 python을 실행하면, 이 가상 환경에 설치된 sirius 패키지를 찾습니다 ✨
-$ python main.py
-
-I solemnly swear 🐺
-```
-
-
-
-## 대안들 { #alternatives }
-
-이 문서는 시작을 돕고, 내부에서 모든 것이 어떻게 작동하는지 알려주는 간단한 가이드입니다.
-
-가상 환경, 패키지 의존성(requirements), 프로젝트를 관리하는 방법에는 많은 **대안**이 있습니다.
-
-준비가 되었고 **프로젝트 전체**, 패키지 의존성, 가상 환경 등을 **관리**하는 도구를 사용하고 싶다면 [uv](https://github.com/astral-sh/uv)를 사용해 보시길 권합니다.
-
-`uv`는 많은 일을 할 수 있습니다. 예를 들어:
-
-* 여러 버전을 포함해 **Python을 설치**
-* 프로젝트의 **가상 환경** 관리
-* **패키지** 설치
-* 프로젝트의 패키지 **의존성과 버전** 관리
-* 의존성을 포함해 설치할 패키지와 버전의 **정확한** 세트를 보장하여, 개발 중인 컴퓨터와 동일하게 프로덕션에서 실행할 수 있도록 합니다. 이를 **locking**이라고 합니다
-* 그 외에도 많은 기능이 있습니다
-
-## 결론 { #conclusion }
-
-여기까지 모두 읽고 이해했다면, 이제 많은 개발자들보다 가상 환경에 대해 **훨씬 더 많이** 알게 된 것입니다. 🤓
-
-이 세부 사항을 알고 있으면, 나중에 복잡해 보이는 무언가를 디버깅할 때 아마도 도움이 될 것입니다. **내부에서 어떻게 작동하는지** 알고 있기 때문입니다. 😎
+가상 환경이 내부적으로 어떻게 작동하는지, 활성화와 대안인 `python -m venv` 및 `pip` 워크플로를 포함해 알아보려면 [가상 환경 가이드](https://tiangolo.com/guides/virtual-environments/)를 읽어보세요.