]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
🌐 Add Korean translation for `docs/tutorial/cors.md` (#3764)
authorNina Hwang <79563565+NinaHwang@users.noreply.github.com>
Sat, 7 Jan 2023 14:21:23 +0000 (23:21 +0900)
committerGitHub <noreply@github.com>
Sat, 7 Jan 2023 14:21:23 +0000 (18:21 +0400)
Co-authored-by: weekwith.me <63915557+0417taehyun@users.noreply.github.com>
Co-authored-by: SebastiΓ‘n RamΓ­rez <tiangolo@gmail.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
docs/ko/docs/tutorial/cors.md [new file with mode: 0644]
docs/ko/mkdocs.yml

diff --git a/docs/ko/docs/tutorial/cors.md b/docs/ko/docs/tutorial/cors.md
new file mode 100644 (file)
index 0000000..39e9ea8
--- /dev/null
@@ -0,0 +1,84 @@
+# κ΅μ°¨ μΆœμ²˜ λ¦¬μ†ŒμŠ€ κ³΅μœ 
+
+<a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS" class="external-link" target="_blank">CORS λ˜λŠ” "ꡐ차-좜처 λ¦¬μ†ŒμŠ€ κ³΅μœ "</a>λž€, λΈŒλΌμš°μ €μ—μ„œ λ™μž‘ν•˜λŠ” ν”„λ‘ νŠΈμ—”λ“œκ°€ μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ μ½”λ“œλ‘œ λ°±μ—”λ“œμ™€ ν†΅μ‹ ν•˜κ³ , λ°±μ—”λ“œλŠ” ν•΄λ‹Ή ν”„λ‘ νŠΈμ—”λ“œμ™€ λ‹€λ₯Έ "좜처"에 μ‘΄μž¬ν•˜λŠ” μƒν™©μ„ μ˜λ―Έν•©λ‹ˆλ‹€.
+
+## μΆœμ²˜
+
+μΆœμ²˜λž€ ν”„λ‘œν† μ½œ(`http` , `https`), λ„메인(`myapp.com`, `localhost`, `localhost.tiangolo.com` ), κ·Έλ¦¬κ³  ν¬νŠΈ(`80`, `443`, `8080` )의 μ‘°ν•©μ„ μ˜λ―Έν•©λ‹ˆλ‹€.
+
+λ”°λΌμ„œ, μ•„λž˜λŠ” λͺ¨λ‘ μƒμ΄ν•œ μΆœμ²˜μž…λ‹ˆλ‹€:
+
+* `http://localhost`
+* `https://localhost`
+* `http://localhost:8080`
+
+λͺ¨λ‘ `localhost` μ— μžˆμ§€λ§Œ, μ„œλ‘œ λ‹€λ₯Έ ν”„λ‘œν† μ½œκ³Ό ν¬νŠΈλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμœΌλ―€λ‘œ λ‹€λ₯Έ "좜처"μž…λ‹ˆλ‹€.
+
+## λ‹¨κ³„
+
+λΈŒλΌμš°μ € λ‚΄ `http://localhost:8080`μ—μ„œ λ™μž‘ν•˜λŠ” ν”„λ‘ νŠΈμ—”λ“œκ°€ μžˆκ³ , μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” `http://localhost`λ₯Ό ν†΅ν•΄ λ°±μ—”λ“œμ™€ ν†΅μ‹ ν•œλ‹€κ³  κ°€μ •ν•΄λ΄…μ‹œλ‹€(포트λ₯Ό λͺ…μ‹œν•˜μ§€ μ•ŠλŠ” κ²½μš°, λΈŒλΌμš°μ €λŠ” `80` μ„ κΈ°λ³Έ ν¬νŠΈλ‘œ κ°„μ£Όν•©λ‹ˆλ‹€).
+
+그러면 λΈŒλΌμš°μ €λŠ” λ°±μ—”λ“œμ— HTTP `OPTIONS` μš”청을 λ³΄λ‚΄κ³ , λ°±μ—”λ“œμ—μ„œ μ΄ λ‹€λ₯Έ μΆœμ²˜(`http://localhost:8080`)μ™€μ˜ ν†΅μ‹ μ„ ν—ˆκ°€ν•˜λŠ” μ μ ˆν•œ ν—€λ”λ₯Ό λ³΄λ‚΄λ©΄, λΈŒλΌμš°μ €λŠ” ν”„λ‘ νŠΈμ—”λ“œμ˜ μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ λ°±μ—”λ“œμ— μš”청을 λ³΄λ‚Ό μˆ˜ μžˆλ„둝 ν•©λ‹ˆλ‹€.
+
+이λ₯Ό μœ„ν•΄, λ°±μ—”λ“œλŠ” "ν—ˆμš©λœ μΆœμ²˜(allowed origins)" λͺ©λ‘μ„ κ°€μ§€κ³  μžˆμ–΄μ•Όλ§Œ ν•©λ‹ˆλ‹€.
+
+이 κ²½μš°, ν”„λ‘ νŠΈμ—”λ“œκ°€ μ œλŒ€λ‘œ λ™μž‘ν•˜κΈ° μœ„ν•΄ `http://localhost:8080`을 λͺ©λ‘μ— ν¬ν•¨ν•΄μ•Ό ν•©λ‹ˆλ‹€.
+
+## μ™€μΌλ“œμΉ΄λ“œ
+
+λͺ¨λ“  μΆœμ²˜λ₯Ό ν—ˆμš©ν•˜κΈ° μœ„ν•΄ λͺ©λ‘μ„ `"*"` ("μ™€μΌλ“œμΉ΄λ“œ")둜 μ„ μ–Έν•˜λŠ” κ²ƒλ„ κ°€λŠ₯ν•©λ‹ˆλ‹€.
+
+ν•˜μ§€λ§Œ μ΄κ²ƒμ€ νŠΉμ •ν•œ μœ ν˜•μ˜ ν†΅μ‹ λ§Œμ„ ν—ˆμš©ν•˜λ©°, μΏ ν‚€ λ° μ•‘μ„ΈμŠ€ ν† ν°κ³Ό μ‚¬μš©λ˜λŠ” μΈμ¦ ν—€λ”(Authoriztion header) λ“±μ΄ ν¬ν•¨λœ κ²½μš°μ™€ κ°™μ΄ μžκ²© μ¦λͺ…(credentials)이 ν¬ν•¨λœ ν†΅μ‹ μ€ ν—ˆμš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
+
+λ”°λΌμ„œ λͺ¨λ“  μž‘업을 μ˜λ„ν•œλŒ€λ‘œ μ‹€ν–‰ν•˜κΈ° μœ„ν•΄, ν—ˆμš©λ˜λŠ” μΆœμ²˜λ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ§€μ •ν•˜λŠ” κ²ƒμ΄ μ’‹μŠ΅λ‹ˆλ‹€.
+
+## `CORSMiddleware` μ‚¬μš©
+
+`CORSMiddleware` μ„ μ‚¬μš©ν•˜μ—¬ **FastAPI** μ‘μš© ν”„λ‘œκ·Έλž¨μ˜ κ΅μ°¨ μΆœμ²˜ λ¦¬μ†ŒμŠ€ κ³΅μœ  ν™˜κ²½μ„ μ„€μ •ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
+
+* `CORSMiddleware` μž„ν¬νŠΈ.
+* ν—ˆμš©λ˜λŠ” μΆœμ²˜(λ¬Έμžμ—΄ ν˜•식)의 λ¦¬μŠ€νŠΈ μƒμ„±.
+* FastAPI μ‘μš© ν”„λ‘œκ·Έλž¨μ— "미듀웨어(middleware)"둜 μΆ”κ°€.
+
+λ°±μ—”λ“œμ—μ„œ λ‹€μŒμ˜ μ‚¬ν•­μ„ ν—ˆμš©ν• μ§€μ— λŒ€ν•΄ μ„€μ •ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€:
+
+* μžκ²©μ¦λͺ… (인증 ν—€λ”, μΏ ν‚€ λ“±).
+* νŠΉμ •ν•œ HTTP λ©”μ†Œλ“œ(`POST`, `PUT`) λ˜λŠ” μ™€μΌλ“œμΉ΄λ“œ `"*"` λ₯Ό μ‚¬μš©ν•œ λͺ¨λ“  HTTP λ©”μ†Œλ“œ.
+* νŠΉμ •ν•œ HTTP ν—€λ” λ˜λŠ” μ™€μΌλ“œμΉ΄λ“œ `"*"` λ₯Ό μ‚¬μš©ν•œ λͺ¨λ“  HTTP ν—€λ”.
+
+```Python hl_lines="2  6-11  13-19"
+{!../../../docs_src/cors/tutorial001.py!}
+```
+
+`CORSMiddleware` μ—μ„œ μ‚¬μš©ν•˜λŠ” κΈ°λ³Έ λ§€κ°œλ³€μˆ˜λŠ” μ œν•œμ μ΄λ―€λ‘œ, λΈŒλΌμš°μ €κ°€ κ΅μ°¨-도메인 μƒν™©μ—μ„œ νŠΉμ •ν•œ μΆœμ²˜, λ©”μ†Œλ“œ, ν—€λ” λ“±μ„ μ‚¬μš©ν•  μˆ˜ μžˆλ„둝 ν•˜λ €λ©΄ μ΄λ“€μ„ λͺ…μ‹œμ μœΌλ‘œ ν—ˆμš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.
+
+λ‹€μŒμ˜ μΈμžλ“€μ΄ μ§€μ›λ©λ‹ˆλ‹€:
+
+* `allow_origins` - κ΅μ°¨-좜처 μš”청을 λ³΄λ‚Ό μˆ˜ μžˆλŠ” μΆœμ²˜μ˜ λ¦¬μŠ€νŠΈμž…λ‹ˆλ‹€. μ˜ˆ) `['https://example.org', 'https://www.example.org']`. λͺ¨λ“  μΆœμ²˜λ₯Ό ν—ˆμš©ν•˜κΈ° μœ„ν•΄ `['*']` λ₯Ό μ‚¬μš©ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
+* `allow_origin_regex` - κ΅μ°¨-좜처 μš”청을 λ³΄λ‚Ό μˆ˜ μžˆλŠ” μΆœμ²˜λ₯Ό μ •κ·œν‘œν˜„μ‹ λ¬Έμžμ—΄λ‘œ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.  `'https://.*\.example\.org'`.
+* `allow_methods` - κ΅μ°¨-좜처 μš”청을 ν—ˆμš©ν•˜λŠ” HTTP λ©”μ†Œλ“œμ˜ λ¦¬μŠ€νŠΈμž…λ‹ˆλ‹€. κΈ°λ³Έκ°’은 `['GET']` μž…λ‹ˆλ‹€. `['*']` μ„ μ‚¬μš©ν•˜μ—¬ λͺ¨λ“  ν‘œμ€€ λ©”μ†Œλ“œλ“€μ„ ν—ˆμš©ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
+* `allow_headers` - κ΅μ°¨-좜처λ₯Ό μ§€μ›ν•˜λŠ” HTTP μš”μ²­ ν—€λ”μ˜ λ¦¬μŠ€νŠΈμž…λ‹ˆλ‹€. κΈ°λ³Έκ°’은 `[]` μž…λ‹ˆλ‹€. λͺ¨λ“  ν—€λ”듀을 ν—ˆμš©ν•˜κΈ° μœ„ν•΄ `['*']` λ₯Ό μ‚¬μš©ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€. `Accept`, `Accept-Language`, `Content-Language` κ·Έλ¦¬κ³  `Content-Type` ν—€λ”λŠ” CORS μš”μ²­μ‹œ μ–Έμ œλ‚˜ ν—ˆμš©λ©λ‹ˆλ‹€.
+* `allow_credentials` - κ΅μ°¨-좜처 μš”μ²­μ‹œ μΏ ν‚€ μ§€μ› μ—¬λΆ€λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. κΈ°λ³Έκ°’은 `False` μž…λ‹ˆλ‹€. λ˜ν•œ ν•΄λ‹Ή ν•­λͺ©μ„ ν—ˆμš©ν•  κ²½μš° `allow_origins` λŠ” `['*']` λ‘œ μ„€μ •ν•  μˆ˜ μ—†μœΌλ©°, μΆœμ²˜λ₯Ό λ°˜λ“œμ‹œ νŠΉμ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.
+* `expose_headers` - λΈŒλΌμš°μ €μ— μ ‘κ·Όν•  μˆ˜ μžˆμ–΄μ•Ό ν•˜λŠ” λͺ¨λ“  μ‘λ‹΅ ν—€λ”λ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€. κΈ°λ³Έκ°’은 `[]` μž…λ‹ˆλ‹€.
+* `max_age` - λΈŒλΌμš°μ €κ°€ CORS μ‘닡을 μΊμ‹œμ— μ €μž₯ν•˜λŠ” μ΅œλŒ€ μ‹œκ°„을 μ΄ˆ λ‹¨μœ„λ‘œ μ„€μ •ν•©λ‹ˆλ‹€. κΈ°λ³Έκ°’은 `600` μž…λ‹ˆλ‹€.
+
+λ―Έλ“€μ›¨μ–΄λŠ” λ‘κ°€μ§€ νŠΉμ •ν•œ μ’…λ₯˜μ˜ HTTP μš”청에 μ‘λ‹΅ν•©λ‹ˆλ‹€...
+
+### CORS μ‚¬μ „ μš”μ²­
+
+`Origin` λ° `Access-Control-Request-Method` ν—€λ”와 ν•¨κ»˜ μ „μ†‘ν•˜λŠ” λͺ¨λ“  `OPTIONS` μš”μ²­μž…λ‹ˆλ‹€.
+
+이 κ²½μš° λ―Έλ“€μ›¨μ–΄λŠ” λ“€μ–΄μ˜€λŠ” μš”청을 κ°€λ‘œμ±„ μ μ ˆν•œ CORS ν—€λ”와, μ •보 μ œκ³΅μ„ μœ„ν•œ `200` λ˜λŠ” `400` μ‘λ‹΅μœΌλ‘œ μ‘λ‹΅ν•©λ‹ˆλ‹€.
+
+### λ‹¨μˆœν•œ μš”μ²­
+
+`Origin` ν—€λ”λ₯Ό κ°€μ§„ λͺ¨λ“  μš”μ²­. μ΄ κ²½μš° λ―Έλ“€μ›¨μ–΄λŠ” μš”청을 μ •μƒμ μœΌλ‘œ μ „λ‹¬ν•˜μ§€λ§Œ, μ μ ˆν•œ CORS ν—€λ”λ₯Ό μ‘닡에 ν¬ν•¨μ‹œν‚΅λ‹ˆλ‹€.
+
+## λ” λ§Žμ€ μ •보
+
+<abbr title="ꡐ차-좜처 λ¦¬μ†ŒμŠ€ κ³΅μœ ">CORS</abbr>에 λŒ€ν•œ λ” λ§Žμ€ μ •보λ₯Ό μ•Œκ³ μ‹Άλ‹€λ©΄, <a href="https://developer.mozilla.org/ko/docs/Web/HTTP/CORS" class="external-link" target="_blank">Mozilla CORS λ¬Έμ„œ</a>λ₯Ό μ°Έκ³ ν•˜κΈ° λ°”λžλ‹ˆλ‹€.
+
+!!! note "기술적 μ„ΈλΆ€ μ‚¬ν•­"
+    `from starlette.middleware.cors import CORSMiddleware` μ—­μ‹œ μ‚¬μš©ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
+
+    **FastAPI**λŠ” κ°œλ°œμžμΈ λ‹Ήμ‹ μ˜ νŽΈμ˜λ₯Ό μœ„ν•΄ `fastapi.middleware` μ—μ„œ λͺ‡κ°€μ§€μ˜ λ―Έλ“€μ›¨μ–΄λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ λŒ€λΆ€λΆ„μ˜ λ―Έλ“€μ›¨μ–΄κ°€ StraletteμœΌλ‘œλΆ€ν„° μ§μ ‘ μ œκ³΅λ©λ‹ˆλ‹€.
index 50931e134cf0646e3c47f8fe7e4db2370969cdf6..3dfc208c8a36a8fb731bdfe7da48edef296c0314 100644 (file)
@@ -69,6 +69,7 @@ nav:
   - tutorial/request-files.md
   - tutorial/request-forms-and-files.md
   - tutorial/encoder.md
+  - tutorial/cors.md
 markdown_extensions:
 - toc:
     permalink: true