Skip to content

Commit

Permalink
🌐 Add Korean translation for docs/tutorial/cors.md (tiangolo#3764)
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
4 people authored and mahenzon committed Mar 11, 2023
1 parent 662e524 commit 11e8c63
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 0 deletions.
84 changes: 84 additions & 0 deletions 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 change: 1 addition & 0 deletions docs/ko/mkdocs.yml
Expand Up @@ -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
Expand Down

0 comments on commit 11e8c63

Please sign in to comment.