Browse Source

๐ŸŒ Add Korean translation for `docs/tutorial/cors.md` (#3764)

Co-authored-by: weekwith.me <[email protected]>
Co-authored-by: Sebastiรกn Ramรญrez <[email protected]>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
pull/5851/head
Nina Hwang 2 years ago
committed by GitHub
parent
commit
2a3a786dd7
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 84
      docs/ko/docs/tutorial/cors.md
  2. 1
      docs/ko/mkdocs.yml

84
docs/ko/docs/tutorial/cors.md

@ -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์œผ๋กœ๋ถ€ํ„ฐ ์ง์ ‘ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

1
docs/ko/mkdocs.yml

@ -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

Loadingโ€ฆ
Cancel
Save