--- /dev/null
+# 쿼리 λ§€κ°λ³μμ λ¬Έμμ΄ κ²μ¦
+
+**FastAPI**λ₯Ό μ¬μ©νλ©΄ λ§€κ°λ³μμ λν μΆκ° μ 보 λ° κ²μ¦μ μ μΈν μ μμ΅λλ€.
+
+μ΄ μμ© νλ‘κ·Έλ¨μ μλ‘ λ€μ΄λ³΄κ² μ΅λλ€:
+
+```Python hl_lines="9"
+{!../../../docs_src/query_params_str_validations/tutorial001.py!}
+```
+
+쿼리 λ§€κ°λ³μ `q`λ `Optional[str]` μλ£νμ
λλ€. μ¦, `str` μλ£νμ΄μ§λ§ `None` μμ λ μ μμμ λ»νκ³ , μ€μ λ‘ κΈ°λ³Έκ°μ `None`μ΄κΈ° λλ¬Έμ FastAPIλ μ΄ λ§€κ°λ³μκ° νμκ° μλλΌλ κ²μ μλλ€.
+
+!!! note "μ°Έκ³ "
+ FastAPIλ `q`μ κΈ°λ³Έκ°μ΄ `= None`μ΄κΈ° λλ¬Έμ νμκ° μλμ μλλ€.
+
+ `Optional[str]`μ μλ `Optional`μ FastAPIκ° μ¬μ©νλκ² μλμ§λ§, νΈμ§κΈ°μκ² λ λμ μ§μκ³Ό μ€λ₯ νμ§λ₯Ό μ 곡νκ² ν΄μ€λλ€.
+
+## μΆκ° κ²μ¦
+
+`q`κ° μ νμ μ΄μ§λ§ κ°μ΄ μ£Όμ΄μ§ λλ§λ€ **κ°μ΄ 50 κΈμλ₯Ό μ΄κ³Όνμ§ μκ²** κ°μ νλ € ν©λλ€.
+
+### `Query` μν¬νΈ
+
+μ΄λ₯Ό μν΄ λ¨Όμ `fastapi`μμ `Query`λ₯Ό μν¬νΈν©λλ€:
+
+```Python hl_lines="3"
+{!../../../docs_src/query_params_str_validations/tutorial002.py!}
+```
+
+## κΈ°λ³Έκ°μΌλ‘ `Query` μ¬μ©
+
+μ΄μ `Query`λ₯Ό λ§€κ°λ³μμ κΈ°λ³Έκ°μΌλ‘ μ¬μ©νμ¬ `max_length` λ§€κ°λ³μλ₯Ό 50μΌλ‘ μ€μ ν©λλ€:
+
+```Python hl_lines="9"
+{!../../../docs_src/query_params_str_validations/tutorial002.py!}
+```
+
+κΈ°λ³Έκ° `None`μ `Query(None)`μΌλ‘ λ°κΏμΌ νλ―λ‘, `Query`μ 첫 λ²μ§Έ λ§€κ°λ³μλ κΈ°λ³Έκ°μ μ μνλ κ²κ³Ό κ°μ λͺ©μ μΌλ‘ μ¬μ©λ©λλ€.
+
+κ·Έλ¬λ―λ‘:
+
+```Python
+q: Optional[str] = Query(None)
+```
+
+...μ μ½λλ μλμ λμΌνκ² λ§€κ°λ³μλ₯Ό μ νμ μΌλ‘ λ§λλλ€:
+
+```Python
+q: Optional[str] = None
+```
+
+νμ§λ§ λͺ
μμ μΌλ‘ 쿼리 λ§€κ°λ³μλ₯Ό μ μΈν©λλ€.
+
+!!! info "μ 보"
+ FastAPIλ λ€μ λΆλΆμ κ΄μ¬μ΄ μμ΅λλ€:
+
+ ```Python
+ = None
+ ```
+
+ λλ:
+
+ ```Python
+ = Query(None)
+ ```
+
+ κ·Έλ¦¬κ³ `None`μ μ¬μ©νμ¬ μΏΌλΌ λ§€κ°λ³μκ° νμμ μ΄μ§ μλ€λ κ²μ νμ
ν©λλ€.
+
+ `Optional` λΆλΆμ νΈμ§κΈ°μκ² λ λμ μ§μμ μ 곡νκΈ° μν΄μλ§ μ¬μ©λ©λλ€.
+
+λν `Query`λ‘ λ λ§μ λ§€κ°λ³μλ₯Ό μ λ¬ν μ μμ΅λλ€. μ§κΈμ κ²½μ° λ¬Έμμ΄μ μ μ©λλ `max_length` λ§€κ°λ³μμ
λλ€:
+
+```Python
+q: str = Query(None, max_length=50)
+```
+
+μ΄λ λ°μ΄ν°λ₯Ό κ²μ¦ν κ²μ΄κ³ , λ°μ΄ν°κ° μ ν¨νμ§ μλ€λ©΄ λͺ
λ°±ν μ€λ₯λ₯Ό 보μ¬μ£Όλ©°, OpenAPI μ€ν€λ§ *κ²½λ‘ λμ*μ λ§€κ°λ³μλ₯Ό λ¬Έμν ν©λλ€.
+
+## κ²μ¦ μΆκ°
+
+λ§€κ°λ³μ `min_length` λν μΆκ°ν μ μμ΅λλ€:
+
+```Python hl_lines="9"
+{!../../../docs_src/query_params_str_validations/tutorial003.py!}
+```
+
+## μ κ·μ μΆκ°
+
+λ§€κ°λ³μμ μΌμΉν΄μΌ νλ <abbr title="μ κ·ννμ(regular expression), regex λλ regexpλ λ¬Έμμ΄ μ‘°ν ν¨ν΄μ μ μνλ λ¬Έμλ€μ μμ΄μ
λλ€">μ κ·ννμ</abbr>μ μ μν μ μμ΅λλ€:
+
+```Python hl_lines="10"
+{!../../../docs_src/query_params_str_validations/tutorial004.py!}
+```
+
+μ΄ νΉμ μ κ·ννμμ μ λ¬ λ°μ λ§€κ°λ³μ κ°μ κ²μ¬ν©λλ€:
+
+* `^`: μ΄μ μ λ¬Έμκ° μκ³ λ€λ°λ₯΄λ λ¬Έμλ‘ μμν©λλ€.
+* `fixedquery`: μ νν `fixedquery` κ°μ κ°μ΅λλ€.
+* `$`: μ¬κΈ°μ λλκ³ `fixedquery` μ΄νλ‘ μ무 λ¬Έμλ κ°μ§ μμ΅λλ€.
+
+**"μ κ·ννμ"** κ°λ
μ λν΄ μμ€κ°μ λκΌλ€λ©΄ κ±±μ νμ§ μμλ λ©λλ€. λ§μ μ¬λμκ² μ΄λ €μ΄ μ£Όμ μ
λλ€. μμ§μ μ κ·ννμ μμ΄λ λ§μ μμ
λ€μ ν μ μμ΅λλ€.
+
+νμ§λ§ μΈμ λ μ§ κ°μ λ°°μΈμ μκ³ , **FastAPI**μμ μ§μ μ¬μ©ν μ μλ€λ μ¬μ€μ μκ³ μμ΄μΌ ν©λλ€.
+
+## κΈ°λ³Έκ°
+
+κΈ°λ³Έκ°μΌλ‘ μ¬μ©νλ 첫 λ²μ§Έ μΈμλ‘ `None`μ μ λ¬νλ―μ΄, λ€λ₯Έ κ°μ μ λ¬ν μ μμ΅λλ€.
+
+`min_length`κ° `3`μ΄κ³ , κΈ°λ³Έκ°μ΄ `"fixedquery"`μΈ μΏΌλ¦¬ λ§€κ°λ³μ `q`λ₯Ό μ μΈν΄λ΄
μλ€:
+
+```Python hl_lines="7"
+{!../../../docs_src/query_params_str_validations/tutorial005.py!}
+```
+
+!!! note "μ°Έκ³ "
+ κΈ°λ³Έκ°μ κ°λ κ²λ§μΌλ‘ λ§€κ°λ³μλ μ νμ μ΄ λ©λλ€.
+
+## νμλ‘ λ§λ€κΈ°
+
+λ λ§μ κ²μ¦μ΄λ λ©νλ°μ΄ν°λ₯Ό μ μΈν νμκ° μλ κ²½μ°, λ€μκ³Ό κ°μ΄ κΈ°λ³Έκ°μ μ μΈνμ§ μκ³ μΏΌλ¦¬ λ§€κ°λ³μ `q`λ₯Ό νμλ‘ λ§λ€ μ μμ΅λλ€:
+
+```Python
+q: str
+```
+
+μλ λμ :
+
+```Python
+q: Optional[str] = None
+```
+
+κ·Έλ¬λ μ΄μ λ€μκ³Ό κ°μ΄ `Query`λ‘ μ μΈν©λλ€:
+
+```Python
+q: Optional[str] = Query(None, min_length=3)
+```
+
+κ·Έλμ `Query`λ₯Ό νμκ°μΌλ‘ λ§λ€μ΄μΌ ν λλ©΄, 첫 λ²μ§Έ μΈμλ‘ `...`λ₯Ό μ¬μ©ν μ μμ΅λλ€:
+
+```Python hl_lines="7"
+{!../../../docs_src/query_params_str_validations/tutorial006.py!}
+```
+
+!!! info "μ 보"
+ μ΄μ μ `...`λ₯Ό λ³Έμ μ΄ μλ€λ©΄: νΉλ³ν λ¨μΌκ°μΌλ‘, <a href="https://docs.python.org/3/library/constants.html#Ellipsis" class="external-link" target="_blank">νμ΄μ¬μ μΌλΆμ΄λ©° "Ellipsis"λΌ λΆλ¦
λλ€</a>.
+
+μ΄λ κ² νλ©΄ **FastAPI**κ° μ΄ λ§€κ°λ³μλ νμμμ μ μ μμ΅λλ€.
+
+## 쿼리 λ§€κ°λ³μ 리μ€νΈ / λ€μ€κ°
+
+쿼리 λ§€κ°λ³μλ₯Ό `Query`μ ν¨κ» λͺ
μμ μΌλ‘ μ μΈν λ, κ°λ€μ 리μ€νΈλ λ€λ₯Έ λ°©λ²μΌλ‘ μ¬λ¬ κ°μ λ°λλ‘ μ μΈ ν μλ μμ΅λλ€.
+
+μλ₯Ό λ€μ΄, URLμμ μ¬λ¬λ² λμ€λ `q` 쿼리 λ§€κ°λ³μλ₯Ό μ μΈνλ €λ©΄ λ€μκ³Ό κ°μ΄ μμ±ν μ μμ΅λλ€:
+
+```Python hl_lines="9"
+{!../../../docs_src/query_params_str_validations/tutorial011.py!}
+```
+
+μλμ κ°μ URLμ μ¬μ©ν©λλ€:
+
+```
+http://localhost:8000/items/?q=foo&q=bar
+```
+
+μ¬λ¬ `q` *쿼리 λ§€κ°λ³μ* κ°λ€μ (`foo` λ° `bar`) νμ΄μ¬ `list`λ‘ *κ²½λ‘ μλ ν¨μ* λ΄ *ν¨μ λ§€κ°λ³μ* `q`λ‘ μ λ¬ λ°μ΅λλ€.
+
+λ°λΌμ ν΄λΉ URLμ λν μλ΅μ λ€μκ³Ό κ°μ΅λλ€:
+
+```JSON
+{
+ "q": [
+ "foo",
+ "bar"
+ ]
+}
+```
+
+!!! tip "ν"
+ μμ μμ κ°μ΄ `list` μλ£νμΌλ‘ 쿼리 λ§€κ°λ³μλ₯Ό μ μΈνλ €λ©΄ `Query`λ₯Ό λͺ
μμ μΌλ‘ μ¬μ©ν΄μΌ ν©λλ€. κ·Έλ μ§ μμΌλ©΄ μμ² λ³Έλ¬ΈμΌλ‘ ν΄μλ©λλ€.
+
+λνν API λ¬Έμλ μ¬λ¬ κ°μ νμ©νλλ‘ μμ λ©λλ€:
+
+<img src="/img/tutorial/query-params-str-validations/image02.png">
+
+### 쿼리 λ§€κ°λ³μ 리μ€νΈ / κΈ°λ³Έκ°μ μ¬μ©νλ λ€μ€κ°
+
+κ·Έλ¦¬κ³ μ 곡λ κ°μ΄ μμΌλ©΄ κΈ°λ³Έ `list` κ°μ μ μν μλ μμ΅λλ€:
+
+```Python hl_lines="9"
+{!../../../docs_src/query_params_str_validations/tutorial012.py!}
+```
+
+μλλ‘ μ΄λνλ€λ©΄:
+
+```
+http://localhost:8000/items/
+```
+
+`q`μ κΈ°λ³Έκ°μ: `["foo", "bar"]`μ΄λ©° μλ΅μ λ€μμ΄ λ©λλ€:
+
+```JSON
+{
+ "q": [
+ "foo",
+ "bar"
+ ]
+}
+```
+
+#### `list` μ¬μ©νκΈ°
+
+`List[str]` λμ `list`λ₯Ό μ§μ μ¬μ©ν μλ μμ΅λλ€:
+
+```Python hl_lines="7"
+{!../../../docs_src/query_params_str_validations/tutorial013.py!}
+```
+
+!!! note "μ°Έκ³ "
+ μ΄ κ²½μ° FastAPIλ 리μ€νΈμ λ΄μ©μ κ²μ¬νμ§ μμμ λͺ
μ¬νκΈ° λ°λλλ€.
+
+ μλ₯Ό λ€μ΄, `List[int]`λ 리μ€νΈ λ΄μ©μ΄ μ μμΈμ§ κ²μ¬(λ° λ¬Έμν)ν©λλ€. νμ§λ§ `list` λ¨λ
μΌ κ²½μ°λ μλλλ€.
+
+## λ λ§μ λ©νλ°μ΄ν° μ μΈ
+
+λ§€κ°λ³μμ λν μ 보λ₯Ό μΆκ°ν μ μμ΅λλ€.
+
+ν΄λΉ μ 보λ μμ±λ OpenAPIμ ν¬ν¨λκ³ λ¬Έμ μ¬μ©μ μΈν°νμ΄μ€ λ° μΈλΆ λꡬμμ μ¬μ©λ©λλ€.
+
+!!! note "μ°Έκ³ "
+ λꡬμ λ°λΌ OpenAPI μ§μ μμ€μ΄ λ€λ₯Ό μ μμμ λͺ
μ¬νκΈ° λ°λλλ€.
+
+ μΌλΆλ μμ§ μ μΈλ μΆκ° μ 보λ₯Ό λͺ¨λ νμνμ§ μμ μ μμ§λ§, λλΆλΆμ κ²½μ° λλ½λ κΈ°λ₯μ μ΄λ―Έ κ°λ° κ³νμ΄ μμ΅λλ€.
+
+`title`μ μΆκ°ν μ μμ΅λλ€:
+
+```Python hl_lines="10"
+{!../../../docs_src/query_params_str_validations/tutorial007.py!}
+```
+
+κ·Έλ¦¬κ³ `description`λ μΆκ°ν μ μμ΅λλ€:
+
+```Python hl_lines="13"
+{!../../../docs_src/query_params_str_validations/tutorial008.py!}
+```
+
+## λ³μΉ λ§€κ°λ³μ
+
+λ§€κ°λ³μκ° `item-query`μ΄κΈΈ μνλ€κ³ κ°μ ν΄ λ΄
μλ€.
+
+λ§μΉ λ€μκ³Ό κ°μ΅λλ€:
+
+```
+http://127.0.0.1:8000/items/?item-query=foobaritems
+```
+
+κ·Έλ¬λ `item-query`μ μ ν¨ν νμ΄μ¬ λ³μ μ΄λ¦μ΄ μλλλ€.
+
+κ°μ₯ κ°κΉμ΄ κ²μ `item_query`μΌ κ²λλ€.
+
+νμ§λ§ μ νν`item-query`μ΄κΈΈ μν©λλ€...
+
+μ΄λ΄ κ²½μ° `alias`λ₯Ό μ μΈν μ μμΌλ©°, ν΄λΉ λ³μΉμ λ§€κ°λ³μ κ°μ μ°Ύλ λ° μ¬μ©λ©λλ€:
+
+```Python hl_lines="9"
+{!../../../docs_src/query_params_str_validations/tutorial009.py!}
+```
+
+## λ§€κ°λ³μ μ¬μ©νμ§ μκ² νκΈ°
+
+μ΄μ λ λμ΄μ μ΄ λ§€κ°λ³μλ₯Ό λ§μμ λ€μ΄νμ§ μλλ€κ³ κ°μ ν΄ λ΄
μλ€.
+
+μ΄ λ§€κ°λ³μλ₯Ό μ¬μ©νλ ν΄λΌμ΄μΈνΈκ° μκΈ° λλ¬Έμ νλμμ λ¨κ²¨λ¬μΌ νμ§λ§, <abbr title="ꡬμμ΄λ©°, μ¬μ©νμ§ μλ κ²μ μΆμ²">μ¬μ©λμ§ μλλ€(deprecated)</abbr>κ³ νμ€νκ² λ¬Έμμμ 보μ¬μ£Όκ³ μΆμ΅λλ€.
+
+κ·Έλ λ€λ©΄ `deprecated=True` λ§€κ°λ³μλ₯Ό `Query`λ‘ μ λ¬ν©λλ€:
+
+```Python hl_lines="18"
+{!../../../docs_src/query_params_str_validations/tutorial010.py!}
+```
+
+λ¬Έμκ° μλμ κ°μ΄ 보μΌκ²λλ€:
+
+<img src="/img/tutorial/query-params-str-validations/image01.png">
+
+## μμ½
+
+λ§€κ°λ³μμ κ²μ¦κ³Ό λ©νλ°μ΄ν°λ₯Ό μΆκ° μ μΈν μ μμ΅λλ€.
+
+μ λ€λ¦ κ²μ¦κ³Ό λ©νλ°μ΄ν°:
+
+* `alias`
+* `title`
+* `description`
+* `deprecated`
+
+νΉμ λ¬Έμμ΄ κ²μ¦:
+
+* `min_length`
+* `max_length`
+* `regex`
+
+μμ μμ `str` κ°μ κ²μ¦μ μ΄λ»κ² μΆκ°νλμ§ μ΄ν΄λ³΄μμ΅λλ€.
+
+μ«μμ κ°μ λ€λ₯Έ μλ£νμ λν κ²μ¦μ μ΄λ»κ² μ μΈνλμ§ νμΈνλ €λ©΄ λ€μ μ₯μ νμΈνκΈ° λ°λλλ€.