From 030012bf4c225a2b5dbb3c6b3443bd2051e614f8 Mon Sep 17 00:00:00 2001
From: 11kkw <11kkw17@gmail.com>
Date: Sat, 15 Feb 2025 20:21:20 +0900
Subject: [PATCH] =?utf8?q?=F0=9F=8C=90=20Add=20Korean=20translation=20for?=
=?utf8?q?=20`docs/ko/docs/advanced/custom-response.md`=20(#13265)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit
---
docs/ko/docs/advanced/custom-response.md | 313 +++++++++++++++++++++++
1 file changed, 313 insertions(+)
create mode 100644 docs/ko/docs/advanced/custom-response.md
diff --git a/docs/ko/docs/advanced/custom-response.md b/docs/ko/docs/advanced/custom-response.md
new file mode 100644
index 0000000000..2001956fa2
--- /dev/null
+++ b/docs/ko/docs/advanced/custom-response.md
@@ -0,0 +1,313 @@
+# ì¬ì©ì ì ì ìëµ - HTML, Stream, íì¼, 기í
+
+기본ì ì¼ë¡, **FastAPI** ìëµì `JSONResponse`를 ì¬ì©íì¬ ë°íí©ëë¤.
+
+ì´ë¥¼ ì¬ì ì íë ¤ë©´ [ìëµì ì§ì ë°íí기](response-directly.md){.internal-link target=_blank}ìì 본 ê²ì²ë¼ `Response`를 ì§ì ë°ííë©´ ë©ëë¤.
+
+ê·¸ë¬ë `Response` (ëë `JSONResponse`ì ê°ì íì í´ëì¤)를 ì§ì ë°ííë©´, ë°ì´í°ê° ìëì¼ë¡ ë³íëì§ ìì¼ë©° (ì¬ì§ì´ `response_model`ì ì ì¸íëë¼ë), 문ìíê° ìëì¼ë¡ ìì±ëì§ ììµëë¤(ì를 ë¤ì´, ìì±ë OpenAPIì ì¼ë¶ë¡ HTTP í¤ë `Content-Type`ì í¹ì "미ëì´ íì
"ì í¬í¨íë ê²½ì°).
+
+íì§ë§ *ê²½ë¡ ìì
ë°ì½ë ì´í°*ìì `response_class` 매ê°ë³ì를 ì¬ì©íì¬ ìíë `Response`(ì: 모ë `Response` íì í´ëì¤)를 ì ì¸í ìë ììµëë¤.
+
+*ê²½ë¡ ìì
í¨ì*ìì ë°ííë ë´ì©ì í´ë¹ `Response`ìì í¬í¨ë©ëë¤.
+
+ê·¸ë¦¬ê³ ë§ì½ ê·¸ `Response`ê° `JSONResponse`ì `UJSONResponse`ì ê²½ì° ì²ë¼ JSON 미ëì´ íì
(`application/json`)ì ê°ì§ê³ ìë¤ë©´, *ê²½ë¡ ìì
ë°ì½ë ì´í°*ìì ì ì¸í Pydanticì `response_model`ì ì¬ì©í´ ìëì¼ë¡ ë³í(ë° íí°ë§) ë©ëë¤.
+
+/// note | ì°¸ê³
+
+미ëì´ íì
ì´ ìë ìëµ í´ëì¤ë¥¼ ì¬ì©íë ê²½ì°, FastAPIë ìëµì ë´ì©ì´ ìì ê²ì¼ë¡ ììíë¯ë¡ ìì±ë OpenAPI 문ììì ìëµ íìì 문ìííì§ ììµëë¤.
+
+///
+
+## `ORJSONResponse` ì¬ì©í기
+
+ì를 ë¤ì´, ì±ë¥ì ê·¹ëííë ¤ë ê²½ì°, orjsonì ì¤ì¹íì¬ ì¬ì©íê³ ìëµì `ORJSONResponse`ë¡ ì¤ì í ì ììµëë¤.
+
+ì¬ì©íê³ ì íë `Response` í´ëì¤(íì í´ëì¤)를 ìí¬í¸í í, **ê²½ë¡ ìì
ë°ì½ë ì´í°*ìì ì ì¸íì¸ì.
+
+ëê·ëª¨ ìëµì ê²½ì°, ëì
ë리를 ë°ííë ê²ë³´ë¤ `Response`를 ë°ííë ê²ì´ í¨ì¬ ë¹ ë¦
ëë¤.
+
+ì´ì ë 기본ì ì¼ë¡, FastAPIê° ë´ë¶ì 모ë í목ì ê²ì¬íê³ JSONì¼ë¡ ì§ë ¬íí ì ìëì§ íì¸í기 ë문ì
ëë¤. ì´ë ì¬ì©ì ìë´ììì ì¤ëª
ë [JSON í¸í ê°ë¥ ì¸ì½ë](../tutorial/encoder.md){.internal-link target=_blank}를 ì¬ì©íë ë°©ìê³¼ ëì¼í©ëë¤. ì´ë¥¼ íµí´ ë°ì´í°ë² ì´ì¤ 모ë¸ê³¼ ê°ì **ììì ê°ì²´**를 ë°íí ì ììµëë¤.
+
+íì§ë§ ë°ííë ë´ì©ì´ **JSONì¼ë¡ ì§ë ¬í ê°ë¥**íë¤ê³ íì íë ê²½ì°, í´ë¹ ë´ì©ì ìëµ í´ëì¤ì ì§ì ì ë¬í ì ìì¼ë©°, FastAPIê° ë°í ë´ì©ì `jsonable_encoder`를 íµí´ ì²ë¦¬í ë¤ ìëµ í´ëì¤ì ì ë¬íë ì¤ë²í¤ë를 í¼í ì ììµëë¤.
+
+{* ../../docs_src/custom_response/tutorial001b.py hl[2,7] *}
+
+/// info | ì ë³´
+
+`response_class` 매ê°ë³ìë ìëµì "미ëì´ íì
"ì ì ìíë ë°ìë ì¬ì©ë©ëë¤.
+
+ì´ ê²½ì°, HTTP í¤ë `Content-Type`ì `application/json`ì¼ë¡ ì¤ì ë©ëë¤.
+
+ê·¸ë¦¬ê³ ì´ë OpenAPIì ê·¸ëë¡ ë¬¸ìíë©ëë¤.
+
+///
+
+/// tip | í
+
+`ORJSONResponse`ë FastAPIììë§ ì¬ì©í ì ìê³ Starletteììë ì¬ì©í ì ììµëë¤.
+
+///
+
+## HTML ìëµ
+
+**FastAPI**ìì HTML ìëµì ì§ì ë°ííë ¤ë©´ `HTMLResponse`를 ì¬ì©íì¸ì.
+
+* `HTMLResponse`를 ìí¬í¸ í©ëë¤.
+* *ê²½ë¡ ìì
ë°ì½ë ì´í°*ì `response_class` 매ê°ë³ìë¡ `HTMLResponse`를 ì ë¬í©ëë¤.
+
+{* ../../docs_src/custom_response/tutorial002.py hl[2,7] *}
+
+/// info | ì ë³´
+
+`response_class` 매ê°ë³ìë ìëµì "미ëì´ íì
"ì ì ìíë ë°ìë ì¬ì©ë©ëë¤.
+
+ì´ ê²½ì°, HTTP í¤ë `Content-Type`ì `text/html`ë¡ ì¤ì ë©ëë¤.
+
+ê·¸ë¦¬ê³ ì´ë OpenAPIì ê·¸ëë¡ ë¬¸ìí ë©ëë¤.
+
+///
+
+### `Response` ë°íí기
+
+[ìëµì ì§ì ë°íí기](response-directly.md){.internal-link target=_blank}ìì 본 ê² ì²ë¼, *ê²½ë¡ ìì
*ìì ìëµì ì§ì ë°ííì¬ ì¬ì ìí ìë ììµëë¤.
+
+ìì ìì ì ëì¼íê² `HTMLResponse`를 ë°ííë ì½ëë ë¤ìê³¼ ê°ì ì ììµëë¤:
+
+{* ../../docs_src/custom_response/tutorial003.py hl[2,7,19] *}
+
+/// warning | ê²½ê³
+
+*ê²½ë¡ ìì
í¨ì*ìì ì§ì ë°íë `Response`ë OpenAPIì 문ìíëì§ ììµëë¤(ì를ë¤ì´, `Content-Type`ì´ ë¬¸ìíëì§ ìì) ìë ëíí 문ìììë íìëì§ ììµëë¤.
+
+///
+
+/// info | ì ë³´
+
+ë¬¼ë¡ ì¤ì `Content-Type` í¤ë, ìí ì½ë ë±ì ë°íë `Response` ê°ì²´ìì ê°ì ¸ìµëë¤.
+
+///
+
+### OpenAPIì 문ìííê³ `Response` ì¬ì ì í기
+
+í¨ì ë´ë¶ìì ìëµì ì¬ì ìíë©´ì ëìì OpenAPIìì "미ëì´ íì
"ì 문ìííê³ ì¶ë¤ë©´, `response_class` 매ê²ë³ì를 ì¬ì©íë©´ì `Response` ê°ì²´ë¥¼ ë°íí ì ììµëë¤.
+
+ì´ ê²½ì° `response_class`ë OpenAPI *ê²½ë¡ ìì
*ì 문ìííë ë°ë§ ì¬ì©ëê³ , ì¤ì ë¡ë ì¬ë¬ë¶ì´ ë°íí `Response`ê° ê·¸ëë¡ ì¬ì©ë©ëë¤.
+
+### `HTMLResponse`ì§ì ë°íí기
+
+ì를 ë¤ì´, ë¤ìê³¼ ê°ì´ ìì±í ì ììµëë¤:
+
+{* ../../docs_src/custom_response/tutorial004.py hl[7,21,23] *}
+
+ì´ ìì ìì, `generate_html_response()` í¨ìë HTMLì `str`ë¡ ë°ííë ëì ì´ë¯¸ `Response`를 ìì±íê³ ë°íí©ëë¤.
+
+`generate_html_response()`를 í¸ì¶í 결과를 ë°íí¨ì¼ë¡ì¨, 기본ì ì¸ **FastAPI** 기본 ëìì ì¬ì ì íë `Response`를 ì´ë¯¸ ë°ííê³ ììµëë¤.
+
+íì§ë§ `response_class`ì `HTMLResponse`를 í¨ê» ì ë¬í기 ë문ì, FastAPIë ì´ë¥¼ OpenAPI ë° ëíí 문ììì `text/html`ë¡ HTMLì 문ìí íë ë°©ë²ì ì ì ììµëë¤.
+
+
+
+## ì¬ì© ê°ë¥í ìëµë¤
+
+ë¤ìì ì¬ì©í ì ìë ëªê°ì§ ìëµë¤ ì
ëë¤.
+
+`Response`를 ì¬ì©íì¬ ë¤ë¥¸ ì´ë¤ ê²ë ë°í í ì ìì¼ë©°, ì§ì íì í´ëì¤ë¥¼ ë§ë¤ ìë ììµëë¤.
+
+/// note | 기ì ì¸ë¶ì¬í
+
+`from starlette.responses import HTMLResponse`를 ì¬ì©í ìë ììµëë¤.
+
+**FastAPI**ë ê°ë°ìì¸ ì¬ë¬ë¶ì í¸ì를 ìí´ `starlette.responses`를 `fastapi.responses`ë¡ ì ê³µ íì§ë§, ëë¶ë¶ì ì¬ì© ê°ë¥í ìëµì Starletteìì ì§ì ê°ì ¸ìµëë¤.
+
+///
+
+### `Response`
+
+기본 `Response` í´ëì¤ë ë¤ë¥¸ 모ë ìëµ í´ëì¤ì ë¶ëª¨ í´ëì¤ ì
ëë¤.
+
+ì´ í´ëì¤ë¥¼ ì§ì ë°íí ì ììµëë¤.
+
+ë¤ì 매ê°ë³ì를 ë°ì ì ììµëë¤:
+
+* `content` - `str` ëë `bytes`.
+* `status_code` - HTTP ìíì½ë를 ëíë´ë `int`.
+* `headers` - 문ìì´ë¡ ì´ë£¨ì´ì§ `dict`.
+* `media_type` - 미ëì´ íì
ì ëíë´ë `str` ì: `"text/html"`.
+
+FastAPI (ì¤ì ë¡ë Starlette)ê° ìëì¼ë¡ `Content-Length` í¤ë를 í¬í¨ìíµëë¤. ëí `media_type`ì 기ë°íì¬ `Content-Type` í¤ë를 í¬í¨íë©°, í
ì¤í¸ íì
ì ê²½ì° ë¬¸ì ì§í©ì ì¶ê° í©ëë¤.
+
+{* ../../docs_src/response_directly/tutorial002.py hl[1,18] *}
+
+### `HTMLResponse`
+
+í
ì¤í¸ ëë ë°ì´í¸ë¥¼ ë°ì HTML ìëµì ë°íí©ëë¤. ììì ì¤ëª
í ë´ì©ê³¼ ê°ìµëë¤.
+
+### `PlainTextResponse`
+
+í
ì¤í¸ ëë ë°ì´í¸ë¥¼ ë°ì ì¼ë° í
ì¤í¸ ìëµì ë°íí©ëë¤.
+
+{* ../../docs_src/custom_response/tutorial005.py hl[2,7,9] *}
+
+### `JSONResponse`
+
+ë°ì´í°ë¥¼ ë°ì `application/json`ì¼ë¡ ì¸ì½ë©ë ìëµì ë°íí©ëë¤.
+
+ì´ë ììì ì¤ëª
íë¯ì´ **FastAPI**ìì 기본ì ì¼ë¡ ì¬ì©ëë ìëµ íìì
ëë¤.
+
+### `ORJSONResponse`
+
+ `orjson`ì ì¬ì©íì¬ ë¹ ë¥¸ JSON ìëµì ì ê³µíë ëìì
ëë¤. ììì ì¤ëª
í ë´ì©ê³¼ ê°ìµëë¤.
+
+/// info | ì ë³´
+
+ì´ë¥¼ ì¬ì©íë ¤ë©´ `orjson`ì ì¤ì¹í´ì¼í©ëë¤. ì: `pip install orjson`.
+
+///
+
+### `UJSONResponse`
+
+`ujson`ì ì¬ì©í ë ë¤ë¥¸ JSON ìëµ íìì
ëë¤.
+
+/// info | ì ë³´
+
+ì´ ìëµì ì¬ì©íë ¤ë©´ `ujson`ì ì¤ì¹í´ì¼í©ëë¤. ì: 'pip install ujson`.
+
+///
+
+/// warning | ê²½ê³
+
+`ujson` ì ì¼ë¶ ìì¸ ê²½ì°ë¥¼ ì²ë¦¬íë ë° ìì´ Python ë´ì¥ 구íë³´ë¤ ë ì격í©ëë¤.
+
+///
+
+{* ../../docs_src/custom_response/tutorial001.py hl[2,7] *}
+
+/// tip | í
+
+`ORJSONResponse`ê° ë ë¹ ë¥¸ ëìì¼ ê°ë¥ì±ì´ ììµëë¤.
+
+///
+
+### `RedirectResponse`
+
+HTTP 리ëë ì
ìëµì ë°íí©ëë¤. 기본ì ì¼ë¡ ìí ì½ëë 307(ìì 리ëë ì
)ì¼ë¡ ì¤ì ë©ëë¤.
+
+`RedirectResponse`를 ì§ì ë°íí ì ììµëë¤.
+
+{* ../../docs_src/custom_response/tutorial006.py hl[2,9] *}
+
+---
+
+ëë `response_class` 매ê°ë³ììì ì¬ì©í ìë ììµëë¤:
+
+
+{* ../../docs_src/custom_response/tutorial006b.py hl[2,7,9] *}
+
+ì´ ê²½ì°, *ê²½ë¡ ìì
* í¨ììì URLì ì§ì ë°íí ì ììµëë¤.
+
+ì´ ê²½ì°, ì¬ì©ëë `status_code`ë `RedirectResponse`ì 기본ê°ì¸ `307` ì
ëë¤.
+
+---
+
+`status_code` 매ê°ë³ì를 `response_class` 매ê°ë³ìì í¨ê» ì¬ì©í ìë ììµëë¤:
+
+{* ../../docs_src/custom_response/tutorial006c.py hl[2,7,9] *}
+
+### `StreamingResponse`
+
+ë¹ë기 ì ëë ì´í° ëë ì¼ë° ì ëë ì´í°/ì´í°ë ì´í°ë¥¼ ë°ì ìëµ ë³¸ë¬¸ì ì¤í¸ë¦¬ë° í©ëë¤.
+
+{* ../../docs_src/custom_response/tutorial007.py hl[2,14] *}
+
+#### íì¼ê³¼ ê°ì ê°ì²´ë¥¼ ì¬ì©í `StreamingResponse`
+
+íì¼ê³¼ ê°ì ê°ì²´(ì: `open()`ì¼ë¡ ë°íë ê°ì²´)ê° ìë ê²½ì°, í´ë¹ íì¼ê³¼ ê°ì ê°ì²´ë¥¼ ë°ë³µ(iterate)íë ì ëë ì´í° í¨ì를 ë§ë¤ ì ììµëë¤.
+
+ì´ ë°©ìì¼ë¡, íì¼ ì 체를 ë©ëª¨ë¦¬ì 먼ì ì½ì´ë¤ì¼ íì ìì´, ì ëë ì´í° í¨ì를 `StreamingResponse`ì ì ë¬íì¬ ë°íí ì ììµëë¤.
+
+ì´ ë°©ìì í´ë¼ì°ë ì¤í 리ì§, ë¹ëì¤ ì²ë¦¬ ë±ì ë¤ìí ë¼ì´ë¸ë¬ë¦¬ì í¨ê» ì¬ì©í ì ììµëë¤.
+
+{* ../../docs_src/custom_response/tutorial008.py hl[2,10:12,14] *}
+
+1. ì´ê²ì´ ì ëë ì´í° í¨ìì
ëë¤. `yield` 문ì í¬í¨íê³ ìì¼ë¯ë¡ "ì ëë ì´í° í¨ì"ì
ëë¤.
+2. `with` ë¸ë¡ì ì¬ì©í¨ì¼ë¡ì¨, ì ëë ì´í° í¨ìê° ìë£ë í íì¼ê³¼ ê°ì ê°ì²´ê° ë«íëë¡ í©ëë¤. ì¦, ìëµ ì ì¡ì´ ëë í ë«íëë¤.
+3. ì´ `yield from`ì í¨ìê° `file_like`ë¼ë ê°ì²´ë¥¼ ë°ë³µ(iterate)íëë¡ í©ëë¤. ë°ë³µë ê° ë¶ë¶ì ì´ ì ëë ì´í° í¨ì(`iterfile`)ìì ìì±ë ê²ì²ë¼ `yield` ë©ëë¤.
+
+ ì´ë ê² íë©´ "ìì±(generating)" ìì
ì ë´ë¶ì ì¼ë¡ ë¤ë¥¸ 무ì¸ê°ì ììíë ì ëë ì´í° í¨ìê° ë©ëë¤.
+
+ ì´ ë°©ìì ì¬ì©íë©´ `with` ë¸ë¡ ììì íì¼ì ì´ ì ìì´, ìì
ì´ ìë£ë í íì¼ê³¼ ê°ì ê°ì²´ê° ë«íë ê²ì ë³´ì¥í ì ììµëë¤.
+
+/// tip | í
+
+ì¬ê¸°ì íì¤ `open()`ì ì¬ì©íê³ ì기 ë문ì `async`ì `await`를 ì§ìíì§ ììµëë¤. ë°ë¼ì ê²½ë¡ ìì
ì ì¼ë° `def`ë¡ ì ì¸í©ëë¤.
+
+///
+
+### `FileResponse`
+
+íì¼ì ë¹ëê¸°ë¡ ì¤í¸ë¦¬ë°íì¬ ìëµí©ëë¤.
+
+ë¤ë¥¸ ìëµ ì íê³¼ë ë¤ë¥¸ ì¸ì를 ì¬ì©íì¬ ê°ì²´ë¥¼ ìì±í©ëë¤:
+
+* `path` - ì¤í¸ë¦¬ë°í íì¼ì ê²½ë¡.
+* `headers` - ëì
ë리 íìì ì¬ì©ì ì ì í¤ë.
+* `media_type` - 미ëì´ íì
ì ëíë´ë 문ìì´. ì¤ì ëì§ ìì ê²½ì° íì¼ ì´ë¦ì´ë ê²½ë¡ë¥¼ ì¬ì©íì¬ ì¶ë¡ í©ëë¤.
+* `filename` - ì¤ì ë ê²½ì° ìëµì `Content-Disposition`ì í¬í¨ë©ëë¤.
+
+íì¼ ìëµìë ì ì í `Content-Length`, `Last-Modified`, ë° `ETag` í¤ëê° í¬í¨ë©ëë¤.
+
+{* ../../docs_src/custom_response/tutorial009.py hl[2,10] *}
+
+ëí `response_class` 매ê°ë³ì를 ì¬ì©í ìë ììµëë¤:
+
+{* ../../docs_src/custom_response/tutorial009b.py hl[2,8,10] *}
+
+ì´ ê²½ì°, ê²½ë¡ ìì
í¨ììì íì¼ ê²½ë¡ë¥¼ ì§ì ë°íí ì ììµëë¤.
+
+## ì¬ì©ì ì ì ìëµ í´ëì¤
+
+`Response`를 ììë°ì ì¬ì©ì ì ì ìëµ í´ëì¤ë¥¼ ìì±íê³ ì¬ì©í ì ììµëë¤.
+
+ì를 ë¤ì´, í¬í¨ë `ORJSONResponse` í´ëì¤ìì ì¬ì©ëì§ ìë ì¤ì ì¼ë¡ orjsonì ì¬ì©íê³ ì¶ë¤ê³ ê°ì í´ë´
ìë¤.
+
+ë§ì½ ë¤ì¬ì°ê¸° ë° í¬ë§·ë JSONì ë°ííê³ ì¶ë¤ë©´, `orjson.OPT_INDENT_2` ìµì
ì ì¬ì©í ì ììµëë¤.
+
+`CustomORJSONResponse`를 ìì±í ì ììµëë¤. ì¬ê¸°ì íµì¬ì `Response.render(content)` ë©ìë를 ìì±íì¬ ë´ì©ì `bytes`ë¡ ë°ííë ê²ì
ëë¤:
+
+{* ../../docs_src/custom_response/tutorial009c.py hl[9:14,17] *}
+
+ì´ì ë¤ì ëì :
+
+```json
+{"message": "Hello World"}
+```
+
+ì´ ìëµì ì´ë ê² ë°íë©ëë¤:
+
+```json
+{
+ "message": "Hello World"
+}
+```
+
+ë¬¼ë¡ JSON í¬ë§·í
ë³´ë¤ ë ì ì©íê² íì©í ë°©ë²ì ì°¾ì ì ìì ê²ì
ëë¤. ð
+
+## 기본 ìëµ í´ëì¤
+
+**FastAPI** í´ëì¤ ê°ì²´ ëë `APIRouter`를 ìì±í ë 기본ì ì¼ë¡ ì¬ì©í ìëµ í´ëì¤ë¥¼ ì§ì í ì ììµëë¤.
+
+ì´ë¥¼ ì ìíë 매ê°ë³ìë `default_response_class`ì
ëë¤.
+
+ìë ìì ìì **FastAPI**ë 모ë ê²½ë¡ ìì
ìì 기본ì ì¼ë¡ `JSONResponse` ëì `ORJSONResponse`를 ì¬ì©í©ëë¤.
+
+{* ../../docs_src/custom_response/tutorial010.py hl[2,4] *}
+
+/// tip | í
+
+ì¬ì í ì´ì ì²ë¼ *ê²½ë¡ ìì
*ìì `response_class`를 ì¬ì ìí ì ììµëë¤.
+
+///
+
+## ì¶ê° 문ìí
+
+OpenAPIìì `responses`를 ì¬ì©íì¬ ë¯¸ëì´ íì
ë° ê¸°í ì¸ë¶ ì 보를 ì ì¸í ìë ììµëë¤: [OpenAPIìì ì¶ê° ìëµ](additional-responses.md){.internal-link target=_blank}.
--
2.47.2