]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
🌐 Update translations for ko (add-missing) (#15888)
authorSebastiΓ‘n RamΓ­rez <tiangolo@gmail.com>
Wed, 1 Jul 2026 10:44:10 +0000 (12:44 +0200)
committerGitHub <noreply@github.com>
Wed, 1 Jul 2026 10:44:10 +0000 (10:44 +0000)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
docs/ko/docs/tutorial/frontend.md [new file with mode: 0644]

diff --git a/docs/ko/docs/tutorial/frontend.md b/docs/ko/docs/tutorial/frontend.md
new file mode 100644 (file)
index 0000000..5014943
--- /dev/null
@@ -0,0 +1,133 @@
+# ν”„λ‘ νŠΈμ—”λ“œ { #frontend }
+
+`app.frontend()`(λ˜λŠ” `router.frontend()`)둜 μ •적 ν”„λ‘ νŠΈμ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ œκ³΅ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
+
+μ΄λŠ” Viteλ₯Ό μ‚¬μš©ν•˜λŠ” React, TanStack Router, Astro, Vue, Svelte, Angular, Solid λ“±κ³Ό κ°™μ΄ μ •적 νŒŒμΌμ„ μƒμ„±ν•˜λŠ” ν”„λ‘ νŠΈμ—”λ“œ λ„ꡬ에 μœ μš©ν•©λ‹ˆλ‹€.
+
+μ΄λŸ¬ν•œ λ„κ΅¬μ—μ„œλŠ” λ³΄ν†΅ λ‹€μŒκ³Ό κ°™μ€ λͺ…λ Ήμ–΄λ‘œ ν”„λ‘ νŠΈμ—”λ“œλ₯Ό λΉŒλ“œν•˜λŠ” λ‹¨κ³„κ°€ μžˆμŠ΅λ‹ˆλ‹€:
+
+```bash
+npm run build
+```
+
+그러면 ν”„λ‘ νŠΈμ—”λ“œ νŒŒμΌμ΄ λ“€μ–΄ μžˆλŠ” `./dist/` κ°™μ€ λ””렉터리가 μƒμ„±λ©λ‹ˆλ‹€.
+
+`app.frontend()`λ₯Ό μ‚¬μš©ν•˜λ©΄ μ΄λŸ¬ν•œ ν”„λ‘ νŠΈμ—”λ“œ ν”„λ ˆμž„μ›Œν¬μ— ν•„μš”ν•œ κ·œμΉ™μ— λ”°λΌ ν•΄λ‹Ή λ””렉터리λ₯Ό μ œκ³΅ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
+
+**FastAPI**λŠ” λ¨Όμ € *경둜 μ²˜λ¦¬*λ₯Ό ν™•μΈν•©λ‹ˆλ‹€. ν”„λ‘ νŠΈμ—”λ“œ νŒŒμΌμ€ μΌλ°˜ λΌμš°νŠΈμ™€ λ§€μΉ­λ˜μ§€ μ•ŠλŠ” κ²½μš°μ—λ§Œ ν™•μΈλ˜λ―€λ‘œ, APIμ—λŠ” μ˜ν–₯을 μ£Όμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
+
+## ν”„λ‘ νŠΈμ—”λ“œ μ œκ³΅ν•˜κΈ° { #serve-a-frontend }
+
+예λ₯Ό λ“€μ–΄ `npm run build`둜 ν”„λ‘ νŠΈμ—”λ“œλ₯Ό λΉŒλ“œν•œ ν›„, μƒμ„±λœ νŒŒμΌμ„ `dist` κ°™μ€ λ””렉터리에 λ„£μŠ΅λ‹ˆλ‹€.
+
+ν”„λ‘œμ νŠΈ κ΅¬μ‘°λŠ” λ‹€μŒκ³Ό κ°™μ„ μˆ˜ μžˆμŠ΅λ‹ˆλ‹€:
+
+```text
+.
+β”œβ”€β”€ pyproject.toml
+β”œβ”€β”€ app
+β”‚   β”œβ”€β”€ __init__.py
+β”‚   β””── main.py
+└── dist
+    β”œβ”€β”€ index.html
+    β””── assets
+        β””── app.js
+```
+
+그런 λ‹€μŒ `app.frontend()`둜 μ œκ³΅ν•©λ‹ˆλ‹€:
+
+{* ../../docs_src/frontend/tutorial001_py310.py hl[5] *}
+
+μ΄λ ‡κ²Œ ν•˜λ©΄ `/assets/app.js`에 λŒ€ν•œ μš”청이 `dist/assets/app.js`λ₯Ό μ œκ³΅ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
+
+**FastAPI** *경둜 μ²˜λ¦¬*도 μžˆλ‹€λ©΄, *경둜 μ²˜λ¦¬*κ°€ μš°μ„ ν•©λ‹ˆλ‹€.
+
+## ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ λΌμš°νŒ… { #client-side-routing }
+
+**single-page apps**(SPAs)λ₯Ό ν¬ν•¨ν•œ λ§Žμ€ ν”„λ‘ νŠΈμ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ λΌμš°νŒ…을 μ‚¬μš©ν•©λ‹ˆλ‹€. `/dashboard/settings` κ°™μ€ κ²½λ‘œλŠ” μ‹€μ œ νŒŒμΌμ΄ μ•„닐 μˆ˜ μžˆμ§€λ§Œ, ν”„λ ˆμž„μ›Œν¬κ°€ μ΄λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€.
+
+λ”°λΌμ„œ ν•΄λ‹Ή URL에 μ§μ ‘ μ ‘κ·Όν•˜λŠ” κ²½μš°(μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ•ˆμ—μ„œ νƒμƒ‰ν•˜λŠ” λŒ€μ‹ ), λ°±μ—”λ“œλŠ” `index.html`μ—μ„œ ν”„λ‘ νŠΈμ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ œκ³΅ν•΄μ•Ό ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ©΄ ν”„λ‘ νŠΈμ—”λ“œ ν”„λ ˆμž„μ›Œν¬κ°€ ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ λΌμš°νŒ…을 μ²˜λ¦¬ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
+
+이λ₯Ό μœ„ν•΄ `fallback="index.html"`을 μ‚¬μš©ν•©λ‹ˆλ‹€:
+
+{* ../../docs_src/frontend/tutorial002_py310.py hl[5] *}
+
+**FastAPI**λŠ” λΈŒλΌμš°μ € νƒμƒ‰μ²˜λŸΌ λ³΄μ΄λŠ” `GET` λ° `HEAD` μš”μ²­μ—λ§Œ μ΄ fallback을 μ‚¬μš©ν•©λ‹ˆλ‹€. JavaScript, CSS, μ΄λ―Έμ§€μ²˜λŸΌ λˆ„λ½λœ νŒŒμΌμ€ μ—¬μ „νžˆ `404`λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
+
+`POST`λ‚˜ `PUT` κ°™μ€ λ‹€λ₯Έ λ©”μ„œλ“œμ˜ μš”청이 ν”„λ‘ νŠΈμ—”λ“œ fallbackμ—λ§Œ λ§€μΉ­λ˜λŠ” κ²½λ‘œλ‘œ λ“€μ–΄μ™€λ„ `404`λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. μΌλ°˜ **FastAPI** *경둜 μ²˜λ¦¬*λŠ” μ—¬μ „νžˆ ν”„λ‘ νŠΈμ—”λ“œ λΌμš°νŠΈλ³΄λ‹€ λ†’은 μš°μ„ μˆœμœ„λ₯Ό κ°€μ§‘λ‹ˆλ‹€.
+
+/// tip | νŒ
+
+기본적으둜 `fallback`은 `fallback="auto"` κ°’을 κ°€μ§‘λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ κ²½μš° `fallback`을 μ§€μ •ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ μ•„λž˜λ₯Ό μ½μ–΄λ³΄μ„Έμš”.
+
+///
+
+μ΄λŠ” ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ λΌμš°νŒ…을 μ‚¬μš©ν•˜λŠ” λ§Žμ€ ν”„λ‘ νŠΈμ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ›ν•˜λŠ” λ™μž‘μž…λ‹ˆλ‹€. μ˜ˆλ₯Ό λ“€μ–΄ TanStack Routerλ₯Ό μ‚¬μš©ν•˜λŠ” React, Vue, Angular, SvelteKit, Solid λ“±μ΄ μžˆμŠ΅λ‹ˆλ‹€.
+
+## μ‚¬μš©μž μ •μ˜ 404 νŽ˜μ΄μ§€ { #custom-404-page }
+
+λˆ„λ½λœ ν”„λ‘ νŠΈμ—”λ“œ κ²½λ‘œμ— λŒ€ν•΄ μ •적 `404.html` νŽ˜μ΄μ§€λ₯Ό μ œκ³΅ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€:
+
+{* ../../docs_src/frontend/tutorial003_py310.py hl[5] *}
+
+이 μ‘닡은 `404` μƒνƒœ μ½”λ“œλ₯Ό μœ μ§€ν•©λ‹ˆλ‹€.
+
+이 κ²½μš° **FastAPI**λŠ” λˆ„λ½λœ ν”„λ‘ νŠΈμ—”λ“œ κ²½λ‘œμ— λŒ€ν•΄ `index.html`을 μ œκ³΅ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€μ‹  `404.html` νŒŒμΌμ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.
+
+/// tip | νŒ
+
+기본적으둜 `fallback`은 `fallback="auto"` κ°’을 κ°€μ§‘λ‹ˆλ‹€. μ΄λ₯Ό μ‚¬μš©ν•˜λ©΄ `404.html` νŒŒμΌμ΄ λ°œκ²¬λ  κ²½μš° μžλ™μœΌλ‘œ fallback으둜 μ‚¬μš©λ©λ‹ˆλ‹€.
+
+λ”°λΌμ„œ μΌλ°˜μ μœΌλ‘œ `fallback` μΈμžλ₯Ό μƒλž΅ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
+
+///
+
+μ΄λŠ” Astro처럼 κ° νŽ˜μ΄μ§€μ— λŒ€ν•œ μ •적 HTML νŒŒμΌμ„ μƒμ„±ν•˜λŠ” ν”„λ‘ νŠΈμ—”λ“œ λ„ꡬ에 μœ μš©ν•©λ‹ˆλ‹€.
+
+## Fallback μžλ™ μ„€μ • { #fallback-auto }
+
+기본적으둜 `app.frontend()`λŠ” `fallback="auto"`λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
+
+ν”„λ‘ νŠΈμ—”λ“œ λ””렉터리에 `404.html` νŒŒμΌμ΄ μžˆμœΌλ©΄, λˆ„λ½λœ ν”„λ‘ νŠΈμ—”λ“œ κ²½λ‘œλŠ” μƒνƒœ μ½”λ“œ `404`와 ν•¨κ»˜ ν•΄λ‹Ή νŒŒμΌμ„ μ œκ³΅ν•©λ‹ˆλ‹€.
+
+κ·Έλ ‡μ§€ μ•Šκ³  `index.html` νŒŒμΌμ΄ μžˆμœΌλ©΄, λˆ„λ½λœ λΈŒλΌμš°μ € νƒμƒ‰ κ²½λ‘œλŠ” `index.html`을 μ œκ³΅ν•©λ‹ˆλ‹€. μ΄λŠ” ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ λΌμš°νŒ…을 μ‚¬μš©ν•˜λŠ” λ§Žμ€ ν”„λ‘ νŠΈμ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ κΈ°λŒ€ν•˜λŠ” λ™μž‘μž…λ‹ˆλ‹€.
+
+λ”°λΌμ„œ λŒ€λΆ€λΆ„μ˜ κ²½μš° `fallback` μΈμžλ₯Ό μ§€μ •ν•˜μ§€ μ•Šκ³  `app.frontend("/", directory="dist")`λ₯Ό μ‚¬μš©ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
+
+{* ../../docs_src/frontend/tutorial001_py310.py hl[5] *}
+
+## Fallback λΉ„ν™œμ„±ν™” { #disable-fallback }
+
+λˆ„λ½λœ ν”„λ‘ νŠΈμ—”λ“œ κ²½λ‘œμ— λŒ€ν•΄ fallback νŒŒμΌμ„ μ œκ³΅ν•˜κ³  μ‹Άμ§€ μ•Šλ‹€λ©΄ `fallback=None`을 μ‚¬μš©ν•©λ‹ˆλ‹€:
+
+{* ../../docs_src/frontend/tutorial005_py310.py hl[5] *}
+
+그러면 λˆ„λ½λœ ν”„λ‘ νŠΈμ—”λ“œ κ²½λ‘œλŠ” μΌλ°˜ `404`λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
+
+## λ””렉터리 ν™•μΈν•˜κΈ° { #check-directory }
+
+기본적으둜 `app.frontend()`λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μƒμ„±λ  λ•Œ λ””렉터리가 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.
+
+μ΄λŠ” μ„€μ • μ˜€λ₯˜λ₯Ό μΌμ° λ°œκ²¬ν•˜λŠ” λ° λ„움이 λ©λ‹ˆλ‹€. μ˜ˆλ₯Ό λ“€μ–΄ ν”„λ‘ νŠΈμ—”λ“œ λΉŒλ“œ μΆœλ ₯ λ””렉터리가 μ—†λ‹€λ©΄ **FastAPI**λŠ” μ‹œμž‘ μ‹œ μ˜€λ₯˜λ₯Ό λ°œμƒμ‹œν‚΅λ‹ˆλ‹€.
+
+ν”„λ‘ νŠΈμ—”λ“œ νŒŒμΌμ΄ λ‚˜μ€‘에 μƒμ„±λœλ‹€λ©΄, μ˜ˆλ₯Ό λ“€μ–΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°μ²΄κ°€ μƒμ„±λœ ν›„ λ³„λ„μ˜ λΉŒλ“œ λ‹¨κ³„μ—μ„œ μƒμ„±λœλ‹€λ©΄, `check_dir=False`λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€:
+
+{* ../../docs_src/frontend/tutorial006_py310.py hl[5] *}
+
+`check_dir=False`λ₯Ό μ‚¬μš©ν•˜λ©΄ **FastAPI**λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μƒμ„±λ  λ•Œ λ””렉터리λ₯Ό ν™•μΈν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μš”청이 μ²˜λ¦¬λ  λ•Œ μ„€μ •λœ λ””렉터리가 μ—¬μ „νžˆ μ—†λ‹€λ©΄, κ·Έλ•Œ **FastAPI**κ°€ μ˜€λ₯˜λ₯Ό λ°œμƒμ‹œν‚΅λ‹ˆλ‹€.
+
+## `APIRouter`와 ν•¨κ»˜ μ‚¬μš©ν•˜κΈ° { #use-it-with-apirouter }
+
+ν”„λ‘ νŠΈμ—”λ“œ νŒŒμΌμ„ `APIRouter`에 μΆ”κ°€ν•˜κ³  prefix와 ν•¨κ»˜ ν¬ν•¨ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€:
+
+{* ../../docs_src/frontend/tutorial004_py310.py hl[6,7] *}
+
+이 μ˜ˆμ œμ—μ„œλŠ” ν”„λ‘ νŠΈμ—”λ“œ κ²½λ‘œκ°€ `/app` μ•„λž˜μ—μ„œ μ œκ³΅λ©λ‹ˆλ‹€.
+
+λ‹€λ₯Έ λΌμš°ν„°μ— μžˆλŠ” κ²ƒμ„ ν¬ν•¨ν•˜μ—¬, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λͺ¨λ“  μΌλ°˜ *경둜 μ²˜λ¦¬*κ°€ μ—¬μ „νžˆ μš°μ„ ν•©λ‹ˆλ‹€.
+
+## μ •적 λΉŒλ“œ μΆœλ ₯만 μ‚¬μš©ν•˜κΈ° { #static-build-output-only }
+
+`app.frontend()`λŠ” ν”„λ‘ νŠΈμ—”λ“œ λΉŒλ“œμ—μ„œ μ΄λ―Έ μƒμ„±λœ νŒŒμΌμ„ μ œκ³΅ν•©λ‹ˆλ‹€.
+
+μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”링은 μ‹€ν–‰ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ° μš”μ²­λ§ˆλ‹€ μ„œλ²„μ—μ„œ λ™μ  λ Œλ”링이 ν•„μš”ν•œ ν”„λ ˆμž„μ›Œν¬κ°€ μ•„λ‹ˆλΌ, μ •적 νŒŒμΌμ„ μƒμ„±ν•˜λŠ” ν”„λ‘ νŠΈμ—”λ“œ ν”„λ ˆμž„μ›Œν¬λ₯Ό μœ„ν•œ κ²ƒμž…λ‹ˆλ‹€.