| ์ธํฐ๋ท ์์ง๋์ด๋ง ํ์คํฌ ํฌ์ค (IETF) | J. Reschke |
| ์๊ฒฌ ์์ฒญ ๋ฌธ์: 10008 | greenbytes |
| ๋ถ๋ฅ: ํ์คํ ๊ณผ์ | J. Snell |
| ISSN: 2070-1721 | Cloudflare |
| M. Bishop | |
| Akamai | |
| 2026๋ 6์ |
HTTP QUERY ๋ฉ์๋
์ด๋ก
์ด ๋ช ์ธ๋ HTTP์ QUERY ๋ฉ์๋๋ฅผ ์ ์ํฉ๋๋ค. QUERY๋ ์์ฒญ ๋์์ด ๋๋ด๋ ์ฝํ ์ธ ๋ฅผ ์์ ํ๊ณ ๋ฉฑ๋ฑ์ ์ธ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ ๋ค์ ๊ทธ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ก ์๋ตํ๋๋ก ์์ฒญํฉ๋๋ค. ์ด๋ POST ์์ฒญ๊ณผ ์ ์ฌํ์ง๋ง, QUERY ์์ฒญ์ ๋ถ๋ถ์ ์ธ ์ํ ๋ณ๊ฒฝ์ ์ผ๋ คํ์ง ์๊ณ ์๋์ผ๋ก ๋ฐ๋ณตํ๊ฑฐ๋ ๋ค์ ์์ํ ์ ์์ต๋๋ค.
์ด ๋ฉ๋ชจ์ ์ํ
์ด ๋ฌธ์๋ ์ธํฐ๋ท ํ์คํ ๊ณผ์ ๋ฌธ์์ ๋๋ค.
์ด ๋ฌธ์๋ ์ธํฐ๋ท ์์ง๋์ด๋ง ํ์คํฌ ํฌ์ค(IETF)์ ๊ฒฐ๊ณผ๋ฌผ์ ๋๋ค. ์ด ๋ฌธ์๋ IETF ์ปค๋ฎค๋ํฐ์ ํฉ์๋ฅผ ๋ํ๋ ๋๋ค. ๊ณต๊ฐ ๊ฒํ ๋ฅผ ๊ฑฐ์ณค์ผ๋ฉฐ ์ธํฐ๋ท ์์ง๋์ด๋ง ์ด์ ๊ทธ๋ฃน(IESG)์ ๋ฐํ ์น์ธ์ ๋ฐ์์ต๋๋ค. ์ธํฐ๋ท ํ์ค์ ๊ดํ ์์ธํ ์ ๋ณด๋ RFC 7841์ 2์ ์์ ํ์ธํ ์ ์์ต๋๋ค.
์ด ๋ฌธ์์ ํ์ฌ ์ํ, ์ ์คํ ๋ฐ ํผ๋๋ฐฑ ์ ๊ณต ๋ฐฉ๋ฒ์ ๊ดํ ์ ๋ณด๋ https://www.rfc-editor.org/info/rfc10008์์ ํ์ธํ ์ ์์ต๋๋ค.
Copyright Notice
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.
1. ์๊ฐ
์ด ๋ช ์ธ๋ HTTP QUERY ์์ฒญ ๋ฉ์๋๋ฅผ ์์ ํ๊ณ ๋ฉฑ๋ฑ์ ์ธ ์์ฒญ(9.2์ , [HTTP])์ ์ํํ๋ ์๋จ์ผ๋ก ์ ์ํ๋ฉฐ, ๋์ ๋ฆฌ์์ค๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๊ธฐ์ ํ๋ ํํ์ ๋๋ดํฉ๋๋ค.
์ผ๋ฐ์ ์ธ ์ฟผ๋ฆฌ ํจํด์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
GET /feed?q=foo&limit=10&sort=-published HTTP/1.1 Host: example.org
๊ทธ๋ฌ๋ ์ ๋ฌํ๋ ๋ฐ์ดํฐ์ ์์ด ๋๋ฌด ๋ง์ ์์ฒญ URI์ ์ธ์ฝ๋ฉํ ์ ์๋ค๋ฉด, ์ด ํจํด์๋ ๋ฌธ์ ๊ฐ ์๊น๋๋ค:
- ์์ฒญ์ด ์๋ก ์กฐ์จ๋์ง ์์ ์ฌ๋ฌ ์์คํ ์ ๊ฑฐ์น ์ ์์ผ๋ฏ๋ก ํฌ๊ธฐ ์ ํ์ ๋ฏธ๋ฆฌ ์ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค(๋ค๋ง 4.1์ , [HTTP]์์๋ ์ก์ ์์ ์์ ์๊ฐ ์ต์ 8000์ฅํ ์ ์ง์ํ๋๋ก ๊ถ๊ณ ํ๋ค๋ ์ ์ ์ ์ํ์ญ์์ค),
- ํน์ ์ข ๋ฅ์ ๋ฐ์ดํฐ๋ฅผ ๋์ URI์ ํํํ๋ ๊ฒ์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ ํจํ URI๋ก ์ธ์ฝ๋ฉํ๋ ๋ฐ ๋๋ ๋ถ๊ฐ ๋น์ฉ ๋๋ฌธ์ ๋นํจ์จ์ ์ ๋๋ค,
- ์์ฒญ URI๋ ์์ฒญ ์ฝํ ์ธ ๋ณด๋ค ๋ก๊ทธ์ ๊ธฐ๋ก๋ ๊ฐ๋ฅ์ฑ์ด ๋์ผ๋ฉฐ ๋ถ๋งํฌ์๋ ๋ํ๋ ์ ์์ต๋๋ค,
- ์ฟผ๋ฆฌ๋ฅผ ์์ฒญ URI์ ์ง์ ์ธ์ฝ๋ฉํ๋ฉด ๊ฐ๋ฅํ ๋ชจ๋ ์ฟผ๋ฆฌ ์ ๋ ฅ ์กฐํฉ์ ์ฌ์ค์ ์๋ก ๋ค๋ฅธ ๋ฆฌ์์ค๋ก ์ทจ๊ธํ๊ฒ ๋ฉ๋๋ค.
GET ์ฌ์ฉ์ ๋์์ผ๋ก, ๋ง์ ๊ตฌํ์์๋ HTTP POST ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์ํํ๋ฉฐ, ์๋ ์์ ์์ ์ด๋ฅผ ๋ณด์ฌ ์ค๋๋ค. ์ด ๊ฒฝ์ฐ ์ฟผ๋ฆฌ ์ฐ์ฐ์ ์ ๋ ฅ์ ์์ฒญ URI์ ์ฟผ๋ฆฌ ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ๋ ๋์ ์์ฒญ ์ฝํ ์ธ ๋ก ์ ๋ฌ๋ฉ๋๋ค.
์ฟผ๋ฆฌ๋ฅผ ์์ฒญํ๊ธฐ ์ํ ์ผ๋ฐ์ ์ธ HTTP POST ์ฌ์ฉ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
POST /feed HTTP/1.1 Host: example.org Content-Type: application/x-www-form-urlencoded q=foo&limit=10&sort=-published
๊ทธ๋ฌ๋ ์ด ๋ณํ์์๋ -- ์์ฒญ์ ๋ณด๋ด๋ ๋์์ธ ๋ฆฌ์์ค์ ์๋ฒ์ ๊ดํ ๊ตฌ์ฒด์ ์ธ ์ง์ ์์ด๋ -- ์์ ํ๊ณ ๋ฉฑ๋ฑ์ ์ธ ์ฟผ๋ฆฌ๊ฐ ์ํ๋๋ค๋ ์ฌ์ค์ด ๋ช ํํ๊ฒ ๋๋ฌ๋์ง ์์ต๋๋ค.
QUERY ๋ฉ์๋๋ GET๊ณผ POST ์ฌ์ฉ ์ฌ์ด์ ๊ฐ๊ทน์ ๋ฉ์ฐ๋ ํด๊ฒฐ์ฑ ์ ์ ๊ณตํ๋ฉฐ, ์ ์์ ๋ ๋ค์๊ณผ ๊ฐ์ด ํํ๋ฉ๋๋ค:
QUERY /feed HTTP/1.1 Host: example.org Content-Type: application/x-www-form-urlencoded q=foo&limit=10&sort=-published
POST์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฟผ๋ฆฌ ์ฐ์ฐ์ ์ ๋ ฅ์ ์์ฒญ URI์ ์ผ๋ถ๊ฐ ์๋๋ผ ์์ฒญ ์ฝํ ์ธ ๋ก ์ ๋ฌ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ POST์ ๋ฌ๋ฆฌ ์ด ๋ฉ์๋๋ ๋ช ์์ ์ผ๋ก ์์ ํ๊ณ ๋ฉฑ๋ฑ์ ์ด๋ฏ๋ก ์บ์ฑ์ด๋ ์๋ ์ฌ์๋ ๊ฐ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ค์ํ ๋ชจ๋ ๋ฆฌ์์ค๋ URI๋ก ์๋ณ๋์ด์ผ ํ๋ค๋ ์ค๊ณ ์์น์ ๊ณ ๋ คํ์ฌ, ์ด ๋ช ์ธ๋ ์๋ฒ๊ฐ ์ฟผ๋ฆฌ ์์ฒด ๋๋ ํน์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ URI๋ฅผ ํ ๋นํ์ฌ ๋์ค์ GET ์์ฒญ์์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
์์ฝํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
| GET | QUERY | POST | |
|---|---|---|---|
| ์์ ํจ | ์ | ์ | ์๋ ์ ์์ |
| ๋ฉฑ๋ฑ์ ์ | ์ | ์ | ์๋ ์ ์์ |
| ์ฟผ๋ฆฌ ์์ฒด์ URI | ์ (์ ์์) | ์ ํ ์ฌํญ (Location ์๋ต ํ๋) | ์๋์ |
| ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ URI | ์ ํ ์ฌํญ (Content-Location ์๋ต ํ๋) | ์ ํ ์ฌํญ (Content-Location ์๋ต ํ๋) | ์ ํ ์ฌํญ (Content-Location ์๋ต ํ๋) |
| ์บ์ ๊ฐ๋ฅ | ์ | ์ | ์, ๋จ ์ดํ์ GET ๋๋ HEAD ์์ฒญ์๋ง ํด๋น |
| ์ฝํ ์ธ (๋ณธ๋ฌธ) | "์ ์๋ ์๋ฏธ๋ก ์์" | ์์๋จ (์๋ฏธ๋ก ์ ๋์ ๋ฆฌ์์ค์ ๋ฐ๋ฆ) | ์์๋จ (์๋ฏธ๋ก ์ ๋์ ๋ฆฌ์์ค์ ๋ฐ๋ฆ) |
1.1. ์ฉ์ด
1.2. ํ๊ธฐ ๊ท์น
ํต์ฌ ๋จ์ด "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY" ๋ฐ "OPTIONAL"์ ์ด ๋ฌธ์์์ ๋ค์์ ์ค๋ช ๋ ๋๋ก ํด์ํด์ผ ํฉ๋๋ค: BCP 14 [RFC2119] [RFC8174]. ๋จ, ์ฌ๊ธฐ์ ํ์๋ ๊ฒ์ฒ๋ผ ๋ชจ๋ ๋๋ฌธ์๋ก ๋ํ๋๋ ๊ฒฝ์ฐ์๋ง ํด๋นํฉ๋๋ค.
2. QUERY ๋ฉ์๋
QUERY ๋ฉ์๋๋ ์๋ฒ ์ธก ์ฟผ๋ฆฌ๋ฅผ ์์ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋์ URI๋ก ์๋ณ๋๋ ๋ฆฌ์์ค์ ํํ์ ์์ฒญํ๋ GET ๋ฉ์๋์ ๋ฌ๋ฆฌ(๋ค์์ ์ ์๋จ: 7.1์ , [HTTP]), QUERY ๋ฉ์๋๋ ๋์ ๋ฆฌ์์ค์ ํด๋น ๋์ ๋ฆฌ์์ค์ ๋ฒ์ ๋ด์์ ์ฟผ๋ฆฌ ์ฐ์ฐ์ ์ํํ๋๋ก ์์ฒญํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์์ฒญ ์ฝํ ์ธ ์ ๊ทธ ๋ฏธ๋์ด ์ ํ์ด ์ฟผ๋ฆฌ๋ฅผ ์ ์ํฉ๋๋ค. ์๋ณธ ์๋ฒ๋ ๋์ ๋ฆฌ์์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฐ์ฐ์ ๋ฒ์๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
์๋ฒ๋ ๋ฐ๋์ ์์ฒญ์ ์คํจ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. Content-Type ์์ฒญ ํ๋๊ฐ ([HTTP], 8.3์ ) ๋๋ฝ๋์๊ฑฐ๋ ์์ฒญ ์ฝํ ์ธ ์ ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์ด์ ํด๋นํฉ๋๋ค.
๋ชจ๋ HTTP ๋ฉ์๋์ ๋ง์ฐฌ๊ฐ์ง๋ก, ๋์ URI์ ์ฟผ๋ฆฌ ๋ถ๋ถ์ ์ฟผ๋ฆฌ ๋์ ๋ฆฌ์์ค๋ฅผ ์๋ณํ๋ ๋ฐ ๊ด์ฌํฉ๋๋ค. ์ด๊ฒ์ด ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ ์ง์ ์ํฅ์ ๋ฏธ์น๋์ง ์ฌ๋ถ์ ๊ทธ ๋ฐฉ์์ ๋ฆฌ์์ค์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ฉฐ ์ด ๋ช ์ธ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฉ๋๋ค.
QUERY ์์ฒญ์ ๋์ ๋ฆฌ์์ค์ ๋ํด ์์ ํฉ๋๋ค ([HTTP], 9.2.1์ ). ์ฆ, ํด๋ผ์ด์ธํธ๋ ๋์ ๋ฆฌ์์ค์ ์ํ์ ๋ํ ์ด๋ ํ ๋ณ๊ฒฝ๋ ์์ฒญํ๊ฑฐ๋ ์์ํ์ง ์์ต๋๋ค. ๊ทธ๋ ๋ค๊ณ ํด์ ์๋ฒ๊ฐ ์ถ๊ฐ ์ ๋ณด๋ฅผ ๊ฒ์ํ ์ ์๋ ์ถ๊ฐ HTTP ๋ฆฌ์์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ด ๊ธ์ง๋์ง๋ ์์ต๋๋ค (2.3์ ๋ฐ 2.4์ ์ฐธ์กฐ).
๋ํ QUERY ์์ฒญ์ ๋ฉฑ๋ฑ์ ์ ๋๋ค ([HTTP], 9.2.2์ ). ์๋ฅผ ๋ค์ด ์ฐ๊ฒฐ ์คํจ ํ์ ๊ฐ์ด ํ์ํ ๋ ์ฌ์๋ํ๊ฑฐ๋ ๋ฐ๋ณตํ ์ ์์ต๋๋ค.
๋ค์์ ๋ฐ๋ผ, 15.3์ , [HTTP], 2xx (์ฑ๊ณต) ์๋ต ์ฝ๋๋ ์์ฒญ์ด ์ฑ๊ณต์ ์ผ๋ก ์์ ๋๊ณ ์ดํด๋์ด ์๋ฝ๋์์์ ๋ํ๋ ๋๋ค.
ํนํ 200 (OK) ์๋ต์ ์ฟผ๋ฆฌ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๋์์ผ๋ฉฐ ๊ทธ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ ์๋ต ์ฝํ ์ธ ๋ก ๋๋ด๋์์์ ๋ํ๋ ๋๋ค.
2.1. ๋ฏธ๋์ด ์ ํ ๋ฐ ์ฝํ ์ธ ํ์
QUERY ์์ฒญ์ ์๋ฏธ๋ก ์ ์์ฒญ ์ฝํ ์ธ ์ ๋ฏธ๋์ด ์ ํ ๊ฐ์ ๊ด๋ จ ๋ฉํ๋ฐ์ดํฐ ๋ชจ๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค ([HTTP], 8.3.1์ ). ์ผ๋ฐ์ ์ผ๋ก ์ฝํ ์ธ ์ ๋ฉํ๋ฐ์ดํฐ๊ฐ ์ผ์นํ์ง ์๋ ์์ฒญ์ ๋ฌธ์ ๋ ๋ฐ๋์ 4xx (ํด๋ผ์ด์ธํธ ์ค๋ฅ) ์๋ต์ผ๋ก ๊ฑฐ๋ถํด์ผ ํฉ๋๋ค ([HTTP], 15.5์ ).
์๋ ๋ชฉ๋ก์ ์ฌ๋ฌ ์คํจ ์ฌ๋ก๋ฅผ ์ค๋ช ํ๊ณ ๊ตฌ์ฒด์ ์ธ ์ํ ์ฝ๋๋ฅผ ๊ถ๊ณ ํฉ๋๋ค:
- ์์ฒญ์ ๋ฏธ๋์ด ์ ํ ์ ๋ณด๊ฐ ์์ผ๋ฉด ์ ์์ ์ฌ๋ฐ๋ฅด์ง ์์ผ๋ฉฐ 400 (ํด๋ผ์ด์ธํธ ์ค๋ฅ) ๊ฐ์ 4xx ์ํ ์ฝ๋๋ก ์คํจํด์ผ ํฉ๋๋ค.
- ๋ฏธ๋์ด ์ ํ์ด ์ง์ ๋์์ง๋ง ๋ฆฌ์์ค์์ ์ง์ํ์ง ์๋ ๊ฒฝ์ฐ์๋ 415 (์ง์ํ์ง ์๋ ๋ฏธ๋์ด ์ ํ)๊ฐ ์ ์ ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ํนํ ๋ฏธ๋์ด ์ ํ ์์ฒด๋ ์๋ ค์ ธ ์์ง๋ง ๋์ ๋ฆฌ์์ค์ ๋ํ QUERY์ ํนํ๋ ์๋ฏธ๋ก ์ด ์๋ ๊ฒฝ์ฐ๊ฐ ํฌํจ๋ฉ๋๋ค. ๋ ๊ฒฝ์ฐ ๋ชจ๋ Accept-Query ์๋ต ํ๋(3์ )๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ์ ์ง์๋๋ ๋ฏธ๋์ด ์ ํ์ ์๋ฆด ์ ์์ต๋๋ค.
- ๋ฏธ๋์ด ์ ํ์ด ์ง์ ๋์์ง๋ง ์ค์ ์์ฒญ ์ฝํ ์ธ ์ ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ์๋ 400 (์๋ชป๋ ์์ฒญ)์ ๋ฐํํ ์ ์์ต๋๋ค. ์ฆ, ์๋ฒ๋ ์์ฒญ ์ฝํ ์ธ ์์ ๋ฏธ๋์ด ์ ํ์ ์ถ๋ก ํ ๋ค์ ๋๋ฝ๋๊ฑฐ๋ "์๋ชป๋" ๊ฐ์ ๋ฎ์ด์ฐ๋ ๊ฒ์ด ํ์ฉ๋์ง ์์ต๋๋ค (์ฆ, "์ฝํ ์ธ ์ค๋ํ").
- ๋ฏธ๋์ด ์ ํ์ด ์ง์ ๋์ด ์ดํดํ ์ ์๊ณ ์ฝํ ์ธ ๊ฐ ์ค์ ๋ก ํด๋น ์ ํ๊ณผ ์ผ์นํ์ง๋ง, ์ฟผ๋ฆฌ์ ์ค์ ๋ด์ฉ ๋๋ฌธ์ ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค๋ฉด 422 (์ฒ๋ฆฌํ ์ ์๋ ์ฝํ ์ธ ) ์ํ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์กด์ฌํ์ง ์๋ ํ ์ด๋ธ์ ์๋ณํ๋, ๊ตฌ๋ฌธ์ ์ฌ๋ฐ๋ฅธ SQL ์ฟผ๋ฆฌ๊ฐ ์์ต๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ Accept ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ์๋ต ๋ฏธ๋์ด ์ ํ์ ์์ฒญํ์ง๋ง ([HTTP], 12.5.1์ ), ๋ฆฌ์์ค์์ ์ด๋ฅผ ์ง์ํ์ง ์๋ ๊ฒฝ์ฐ์๋ 406 (์์ฉํ ์ ์์) ์ํ ์ฝ๋๊ฐ ์ ์ ํฉ๋๋ค.
2.2. ๋๋ฑ ๋ฆฌ์์ค
์ฃผ์ด์ง QUERY ์์ฒญ์ ๋๋ฑ ๋ฆฌ์์ค๋ GET ์์ฒญ์ ์๋ตํ๊ณ , ํด๋น QUERY ์์ฒญ๊ณผ ๊ทธ ๋์์ ๋ํ๋ด๋ฉฐ, ๋ฉ์์ง ์ฝํ ์ธ ์ ๋ฉํ๋ฐ์ดํฐ ๋ชจ๋๋ฅผ ๊ณ ๋ คํ๋ ๋ฆฌ์์ค์ ๋๋ค (6์ , [HTTP]). ํนํ ์ฌ๊ธฐ์๋ ํํ ๋ฉํ๋ฐ์ดํฐ(8์ , [HTTP]), ์๋ฅผ ๋ค์ด ์ฝํ ์ธ ์ ๋ฏธ๋์ด ์ ํ์ด ํฌํจ๋ฉ๋๋ค.
์ฆ, ๋๋ฑ ๋ฆฌ์์ค๋ QUERY๋ฅผ ๊ตฌํํ๋ ๋ฆฌ์์ค์์ ์์ฒญ ์ฝํ ์ธ ๋ฅผ ๋ฐ์ํ์ฌ ํ์๋ฉ๋๋ค.
๋๋ฑ ๋ฆฌ์์ค๋ผ๋ ์ฉ์ด๋ ์ ํ๋ ํํ ๊ฐ์ ๋ค๋ฅธ HTTP ์ธก๋ฉด์ ๋์์ ์ ์ํ๊ธฐ ์ํ ์๋จ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฒ๋ ์ด๋ฌํ ๋ฆฌ์์ค์ URI๋ฅผ ํ ๋นํ ์ ์์ง๋ง ๋ฐ๋์ ํ ๋นํ ํ์๋ ์์ต๋๋ค (1.1์ , [URI] ์ฐธ์กฐ). URI๋ฅผ ํ ๋นํ๋ฉด ์ด๋ฌํ ๋ฆฌ์์ค์ GET ์์ฒญ์ผ๋ก ์ ๊ทผํ ์ ์๊ฒ ๋ฉ๋๋ค.
2.3. Content-Location ์๋ต ํ๋
์ฑ๊ณต ์๋ต(2xx, 15.3์ , [HTTP])์๋ ์ฐ์ฐ ๊ฒฐ๊ณผ์ ํด๋นํ๋ ๋ฆฌ์์ค์ ์๋ณ์๊ฐ ๋ด๊ธด Content-Location ํค๋ ํ๋๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ 8.7์ , [HTTP]๋ฅผ ์ฐธ์กฐํ์ญ์์ค. ์ด๋ ํด๋ผ์ด์ธํธ๊ฐ ํ์๋ URI์ GET ์์ฒญ์ ๋ณด๋ด ๋ฐฉ๊ธ ์ํ๋ ์ฟผ๋ฆฌ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ํ ์ ์๋ค๋ ์๋ฒ์ ์ฃผ์ฅ์ ๋ํ๋ ๋๋ค. ํ์๋ ๋ฆฌ์์ค๋ ์์์ ์ผ ์ ์์ต๋๋ค.
๋ถ๋ก A.4.1์์ ์์ ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
2.4. Location ์๋ต ํ๋
์๋ฒ๋ QUERY ์์ฒญ์ ๋๋ฑ ๋ฆฌ์์ค(2.2์ )์ URI๋ฅผ ํ ๋นํ ์ ์์ต๋๋ค. ์๋ฒ๊ฐ ๊ทธ๋ ๊ฒ ํ๋ฉด ํด๋น ๋ฆฌ์์ค์ URI๋ฅผ 2xx ์๋ต์ Location ํค๋ ํ๋์ ํฌํจํ ์ ์์ต๋๋ค (๋ค์ ์ฐธ์กฐ: 10.2.2์ , [HTTP]). ์ด๋ ํด๋ผ์ด์ธํธ๊ฐ ํ์๋ URI์ GET ์์ฒญ์ ๋ณด๋ด ์ฟผ๋ฆฌ ์ฝํ ์ธ ๋ฅผ ๋ค์ ์ ์กํ์ง ์๊ณ ๋ฐฉ๊ธ ์ํ๋ ์ฟผ๋ฆฌ ์ฐ์ฐ์ ๋ฐ๋ณตํ ์ ์๋ค๋ ์ฃผ์ฅ์ ๋๋ค. ์ด ๋ฆฌ์์ค์ URI๋ ์์์ ์ผ ์ ์์ต๋๋ค. ์ดํ ์์ฒญ์ด ์คํจํ๋ฉด ํด๋ผ์ด์ธํธ๋ ์๋ QUERY ์์ฒญ ๋์๊ณผ ์ด์ ์ ์ ์ถํ ์ฝํ ์ธ ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์๋ํ ์ ์์ต๋๋ค.
๋ถ๋ก A.4.2์์ ์์ ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
2.5. ๋ฆฌ๋๋ ์
๊ฒฝ์ฐ์ ๋ฐ๋ผ ์๋ฒ๋ ์ฌ์ฉ์ ์์ด์ ํธ๋ฅผ ๋ค๋ฅธ URI๋ก ๋ฆฌ๋๋ ์ ํ์ฌ QUERY ์์ฒญ์ ๊ฐ์ ์ ์ผ๋ก ์๋ตํ ์ ์์ต๋๋ค (๋ค์ ์ฐธ์กฐ: 15.4์ , [HTTP]).
์ํ ์ฝ๋๊ฐ 301 (์๊ตฌ ์ด๋, [HTTP], 15.4.2์ ) ๋๋ 308 (์๊ตฌ ๋ฆฌ๋๋ ์ , [HTTP], 15.4.9์ )์ธ ์๋ต์ ๋์ ๋ฆฌ์์ค๊ฐ Location ์๋ต ํ๋์์ ์ฐธ์กฐํ๋ ๋ค๋ฅธ URI๋ก ์๊ตฌ์ ์ผ๋ก ์ด๋ํ์์ ๋ํ๋ ๋๋ค ([HTTP], 10.2.2์ ). ๋ง์ฐฌ๊ฐ์ง๋ก ์ํ ์ฝ๋๊ฐ 302 (๋ฐ๊ฒฌ๋จ, [HTTP], 15.4.3์ ) ๋๋ 307 (์์ ๋ฆฌ๋๋ ์ , [HTTP], 15.4.8์ )์ธ ์๋ต์ ๋์ ๋ฆฌ์์ค๊ฐ ์ผ์์ ์ผ๋ก ์ด๋ํ์์ ๋ํ๋ ๋๋ค. ๋ค ๊ฒฝ์ฐ ๋ชจ๋ ์๋ฒ๋ ์ฌ์ฉ์ ์์ด์ ํธ๊ฐ Location์์ ์ฐธ์กฐํ๋ ์ ๋์ URI๋ก ์ ์ฌํ QUERY ์์ฒญ์ ๋ณด๋ด ์๋ QUERY ์์ฒญ์ ์๋ฃํ ์ ์์์ ์ ์ํฉ๋๋ค.
301 ๋๋ 302 ์๋ต ํ POST๋ฅผ GET ์์ฒญ์ผ๋ก ๋ฆฌ๋๋ ์ ํ๋ ์์ธ๋ QUERY ์์ฒญ์ ์ ์ฉ๋์ง ์๋๋ค๋ ์ ์ ์ ์ํ์ญ์์ค.
QUERY์ ๋ํด ์ํ ์ฝ๋๊ฐ 303 (๋ค๋ฅธ ๋ฆฌ์์ค ์ฐธ์กฐ, 15.4.4์ , [HTTP])์ธ ์๋ต์ Location ์๋ต ํ๋์์ ์ฐธ์กฐํ๋ URI์ ๋ํ ์ผ๋ฐ์ ์ธ ๊ฒ์ ์์ฒญ์ ํตํด ์๋ ์ฟผ๋ฆฌ๋ฅผ ์๋ฃํ ์ ์์์ ๋ํ๋ ๋๋ค ([HTTP], 10.2.2์ ). HTTP์์๋ ์ ๋์ URI์ GET ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ์ ์๋ฏธํ๋ฉฐ, ์ด๋ ๋ค์ ์์ ์ ๋์ ์์ต๋๋ค: ๋ถ๋ก A.4.3.
2.6. ์กฐ๊ฑด๋ถ ์์ฒญ
์ ํ๋ ํํ(3.2์ , [HTTP])์ QUERY ์์ฒญ์ ๊ฒฝ์ฐ ํด๋น QUERY ์์ฒญ์ ๋๋ฑ ๋ฆฌ์์ค(2.2์ )์ ๋ํ GET ์์ฒญ์ ์ ํ๋ ํํ๊ณผ ๊ฐ์ต๋๋ค.
์กฐ๊ฑด๋ถ QUERY๋ ์ ํ๋ ํํ(์ฆ, ์ฝํ ์ธ ํ์์ด ์ด๋ฃจ์ด์ง ํ์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ)์ด ์กฐ๊ฑด๋ถ ํค๋ ํ๋์ ๊ธฐ์ ๋ ์ํฉ์์๋ง ์๋ต์ผ๋ก ๋ฐํ๋๋๋ก ์์ฒญํ๋ฉฐ, ์ด๋ ๋ค์์ ์ ์๋์ด ์์ต๋๋ค: 13์ , [HTTP].
๋ถ๋ก A.5์์ ์์ ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
2.7. ์บ์ฑ
QUERY ๋ฉ์๋์ ๋ํ ์๋ต์ ์บ์ํ ์ ์์ต๋๋ค. ์บ์๋ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ํ์ QUERY ์์ฒญ์ ์ถฉ์กฑํ ์ ์์ต๋๋ค. ๋ค์์ ๋ฐ๋ฆ ๋๋ค: 4์ , [HTTP-CACHING].
QUERY ์์ฒญ์ ์บ์ ํค(2์ , [HTTP-CACHING])๋ ๋ฐ๋์ ์์ฒญ ์ฝํ ์ธ (6์ , [HTTP-CACHING]) ๋ฐ ๊ด๋ จ ๋ฉํ๋ฐ์ดํฐ(8์ , [HTTP])๋ฅผ ๋ฐ์ํด์ผ ํฉ๋๋ค.
์บ์ ํจ์จ์ ๋์ด๊ธฐ ์ํด ์บ์๋ ์๋ฏธ์ ์ค์ํ์ง ์์ ์ฐจ์ด๋ฅผ ์์ฒญ ์ฝํ ์ธ ์ ๊ด๋ จ ๋ฉํ๋ฐ์ดํฐ์์ ๋จผ์ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค:
- ์ฝํ ์ธ ์ธ์ฝ๋ฉ ์ ๊ฑฐ (8.4์ , [HTTP]).
- ์์ฒญ์ Content-Type ํ๋์ ์๋ ๋ฏธ๋์ด ํ์ ์ ํ ์ ๋ฏธ์ฌ๋ก ํ์๋๋ ํ์ ๊ท์น์ ๊ดํ ์ง์์ ๋ฐํ์ผ๋ก ์ ๊ทํ (์: "+json"; ๋ค์ ์ฐธ์กฐ: 4.2.8์ , [RFC6838]).
- ์์ฒญ์ Content-Type ํ๋๋ก ํ์๋๋ ์ฝํ ์ธ ์์ฒด์ ์๋ฏธ๋ก ์ ๊ดํ ์ง์์ ๋ฐํ์ผ๋ก ์ ๊ทํ.
์ด๋ฌํ ๋ณํ์ ์ค์ง ์บ์ ํค๋ฅผ ์์ฑํ๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก๋ง ์ํ๋๋ฉฐ, ์์ฒญ ์์ฒด๋ฅผ ๋ณ๊ฒฝํ์ง ์๋๋ค๋ ์ ์ ์ ์ํ์ญ์์ค.
ํด๋ผ์ด์ธํธ๋ "no-transform" ์บ์ ์ง์์ด๋ฅผ ์ฌ์ฉํ์ฌ ( 5.2.1.6์ , [HTTP-CACHING]) ์ด๋ฌํ ๋ณํ์ด ์ด๋ฃจ์ด์ง์ง ์๊ธฐ๋ฅผ ๋ฐ๋๋ค๋ ๋ป์ ๋ํ๋ผ ์ ์์ต๋๋ค(๋จ, ์ด ์ง์์ด๋ ๊ถ๊ณ ์ผ ๋ฟ์ ๋๋ค).
QUERY ๋ฉ์๋ ์๋ต์ ์บ์ฑ์ GET ์๋ต์ ์บ์ฑ๋ณด๋ค ๋ณธ์ง์ ์ผ๋ก ๋ณต์กํ๋ค๋ ์ ์ ์ ์ํ์ญ์์ค. ์บ์ ํค๋ฅผ ๊ฒฐ์ ํ๋ ค๋ฉด ์์ฒญ ์ฝํ ์ธ ๋ฅผ ์์ ํ ์ฝ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. QUERY ์๋ต์ด Location ์๋ต ํ๋(2.4์ )๋ฅผ ์ ๊ณตํ์ฌ ๋๋ฑ ๋ฆฌ์์ค์ URI๋ฅผ ๋ํ๋ธ๋ค๋ฉด (2.2์ ), ํด๋ผ์ด์ธํธ๋ ํ์ ์์ฒญ์์ GET์ผ๋ก ์ ํํ์ฌ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ํํ ์ ์์ต๋๋ค.
2.8. ๋ฒ์ ์์ฒญ
QUERY์ ๋ํ ๋ฒ์ ์์ฒญ์ ์๋ฏธ๋ก ์ GET์ ๋ํ ์๋ฏธ๋ก ๊ณผ ๊ฐ์ผ๋ฉฐ, ๋ค์์ ์ ์๋์ด ์์ต๋๋ค: 14์ , [HTTP]. ๊ทธ๋ฌ๋ ๋ฐ์ดํธ ๋ฒ์ ์์ฒญ์ (์์ฑ ์์ ์ ์ ์๋ ์ ์ผํ ๋ฒ์ ๋จ์) QUERY ์์ฒญ์ ๊ฒฐ๊ณผ์๋ ๋ณ๋ค๋ฅธ ๊ฐ์น๋ฅผ ์ ๊ณตํ์ง ์์ต๋๋ค.
์ฟผ๋ฆฌ ํ์์ ๊ฒฐ๊ณผ ์งํฉ์ ์ ํํ๊ฑฐ๋ ํ์ด์ง๋ณ๋ก ํ์ํ๋ ๊ณ ์ ํ ๋ฐฉ์์ ์ ์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ๋ฉฐ, SQL์ "FETCH FIRST ... ROWS ONLY"๊ฐ ๊ทธ ์์ ๋๋ค. ์ด๋ฌํ ๋ด์ฅ ๊ธฐ๋ฅ์ด HTTP ๋ฒ์ ์์ฒญ ๋์ ์ฌ์ฉ๋ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค.
3. Accept-Query ํค๋ ํ๋
"Accept-Query" ์๋ต ํค๋ ํ๋๋ ๋ฆฌ์์ค๊ฐ QUERY ๋ฉ์๋ ์ง์์ ์ง์ ์๋ฆฌ๋ฉด์ ์ฌ์ฉํ ์ ์๋ ๊ตฌ์ฒด์ ์ธ ์ฟผ๋ฆฌ ํ์์ ๋ฏธ๋์ด ์ ํ์ ์๋ณํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Accept-Query์๋ ๋ฏธ๋์ด ๋ฒ์ ๋ชฉ๋ก(12.5.1์ , [HTTP])์ด "๊ตฌ์กฐํ ํ๋" ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ํฌํจ๋ฉ๋๋ค [STRUCTURED-FIELDS]. ๋ฏธ๋์ด ๋ฒ์๋ Token ๋๋ String์ผ๋ก ๊ตฌ์ฑ๋ List ๊ตฌ์กฐํ ํค๋ ํ๋๋ก ํํ๋๋ฉฐ, ๋งค๊ฐ๋ณ์๊ฐ ์๋ ๋ฏธ๋์ด ๋ฒ์ ๊ฐ์ ํฌํจํฉ๋๋ค.
๋ฏธ๋์ด ์ ํ ๋งค๊ฐ๋ณ์๊ฐ ์๋ค๋ฉด String ๋๋ Token ์ ํ์ ๊ตฌ์กฐํ ํ๋ ๋งค๊ฐ๋ณ์๋ก ๋งคํ๋ฉ๋๋ค. Token๊ณผ String ์ค ์ด๋ ๊ฒ์ ์ ํํ๋์ง๋ ์๋ฏธ์ ์ค์ํ์ง ์์ต๋๋ค. ์ฆ, ์์ ์๋ Token์ String์ผ๋ก ๋ณํํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํด์๋ ์ ๋ฉ๋๋ค, ์ฆ ์์ ํ ์ ํ์ ๋ฐ๋ผ ์ด๋ค์ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌํด์๋ ์ ๋ฉ๋๋ค.
๋ฏธ๋์ด ์ ํ์ Token์ ์ ํํ ๋์ํ์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ฏธ๋์ด ์ ํ์ ์ซ์๋ก ์์ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ์๋ String ํ์์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ง์๋๋ ์์ผ๋์นด๋ ์ฌ์ฉ์ ๋ชจ๋ ์ ํ์ ์ผ์นํ๋ "*/*" ๋๋ ํ์๋ ์ ํ์ ๋ชจ๋ ํ์ ์ ํ์ ์ผ์นํ๋ "xxxx/*"๋ฟ์ ๋๋ค.
ํ๋ ๊ฐ์ ๋์ด๋ ์ ํ์ ์์๋ ์ค์ํ์ง ์์ต๋๋ค.
Accept-Query ํ๋์ ๊ฐ์ ์๋ฒ์์ ๊ฐ์ ๊ฒฝ๋ก๋ฅผ ๊ณต์ ํ๋ ๋ชจ๋ URI์ ์ ์ฉ๋ฉ๋๋ค. ์ฆ, ์ฟผ๋ฆฌ ๊ตฌ์ฑ ์์๋ ๋ฌด์๋ฉ๋๋ค. ๊ฐ์ ๋ฆฌ์์ค์ ๋ํ ์์ฒญ์ด ์๋ก ๋ค๋ฅธ Accept-Query ๊ฐ์ ๋ฐํํ๋ฉด ๊ฐ์ฅ ์ต๊ทผ์ ์์ ํ ์ ์ ํ ๊ฐ(๋ค์์ ๋ฐ๋ฆ: 4.2์ , [HTTP-CACHING])์ ์ฌ์ฉํฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
Accept-Query: "application/jsonpath", application/sql;charset="UTF-8"
์ด ํ๋์ ๊ตฌ๋ฌธ์ "Accept" ๊ฐ์ ๋ค๋ฅธ ํ๋์ ์ ์ฌํด ๋ณด์ด์ง๋ง (12.5.1์ , [HTTP]), ๊ตฌ์กฐํ ํ๋์ด๋ฏ๋ก ๋ฐ๋์ ๋ค์์ ๋ช ์๋ ๋๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค: 4์ , [STRUCTURED-FIELDS].
4. ๋ณด์ ๊ณ ๋ ค ์ฌํญ
QUERY ๋ฉ์๋์๋ ๋ชจ๋ HTTP ๋ฉ์๋์ ๋์ผํ ์ผ๋ฐ ๋ณด์ ๊ณ ๋ ค ์ฌํญ์ด ์ ์ฉ๋๋ฉฐ, ์ด๋ [HTTP]์ ์ค๋ช ๋์ด ์์ต๋๋ค.
์ด ๋ฉ์๋๋ ์์ฒญ ์ ๋ณด๋ฅผ URI(์: ์ฟผ๋ฆฌ ๊ตฌ์ฑ ์์)์ ์ ๋ฌํ๋ ๋ฐฉ์์ ๋์์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. URI๋ ์์ฒญ ์ฝํ ์ธ ๋ณด๋ค ์ค๊ฐ์์ ์ํด ๋ก๊ทธ์ ๊ธฐ๋ก๋๊ฑฐ๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ผ๋ฏ๋ก, ์ผ๋ถ ๊ฒฝ์ฐ์๋ ์ด ๋ฐฉ์์ด ์ ํธ๋ฉ๋๋ค. ์ฟผ๋ฆฌ์ ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ํฌํจ๋ ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ URI๊ฐ ๋ก๊ทธ์ ๊ธฐ๋ก๋ ๊ฐ๋ฅ์ฑ์ด GET๋ณด๋ค QUERY๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ ์ด์ ๊ฐ ๋ ์ ์์ต๋๋ค.
์๋ฒ๊ฐ QUERY ์์ฒญ์ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด๋ ์์ ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ณ (์: Location ๋๋ Content-Location ํ๋์์ ์ฌ์ฉํ๊ธฐ ์ํด), ํด๋น ๋ฆฌ์์ค์ URI๋ฅผ ํ ๋นํ๋ฉฐ, ์์ฒญ์ ๋ก๊ทธ์ ๊ธฐ๋กํ ์ ์๋ ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์๋ค๋ฉด, ํด๋น URI๋ ๊ฐ๊ธ์ ์๋ ์์ฒญ ์ฝํ ์ธ ์ ๋ฏผ๊ฐํ ๋ถ๋ถ์ ํฌํจํ์ง ์๋๋ก ์ ํํด์ผ ํฉ๋๋ค.
QUERY ์ฝํ ์ธ ๋ฅผ ์๋ชป ์ ๊ทํํ๊ฑฐ๋ ๋ฆฌ์์ค๊ฐ ์ฝํ ์ธ ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์๊ณผ ํฌ๊ฒ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ ๊ทํํ๋ ์บ์๋ ์ ๊ทํ๋ก ์ธํด ๊ฑฐ์ง ์์ฑ์ด ๋ฐ์ํ๋ฉด ์๋ชป๋ ์๋ต์ ๋ฐํํ ์ ์์ต๋๋ค.
๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ๊ณต์ (CORS)๋ฅผ ๊ตฌํํ๋ ์ฌ์ฉ์ ์์ด์ ํธ์ QUERY ์์ฒญ์๋ "์ฌ์ ์์ฒญ"์ด ํ์ํฉ๋๋ค. QUERY๋ CORS ์์ ๋ชฉ๋ก์ ํฌํจ๋ ๋ฉ์๋ ์งํฉ์ ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค ([FETCH] ์ฐธ์กฐ).
5. IANA ๊ณ ๋ ค ์ฌํญ
5.1. QUERY ๋ฉ์๋ ๋ฑ๋ก
IANA๋ QUERY ๋ฉ์๋๋ฅผ "ํ์ดํผํ ์คํธ ์ ์ก ํ๋กํ ์ฝ(HTTP) ๋ฉ์๋ ๋ ์ง์คํธ๋ฆฌ"์ ์ถ๊ฐํ์ต๋๋ค. ์์น๋ <http://www.iana.org/assignments/http-methods>์ ๋๋ค (๋ค์ ์ฐธ์กฐ: 16.3.1์ , [HTTP]).
| ๋ฉ์๋ ์ด๋ฆ | ์์ ํจ | ๋ฉฑ๋ฑ์ ์ | ๋ช ์ธ |
|---|---|---|---|
| QUERY | ์ | ์ | 2์ , RFC 10008 |
5.2. Accept-Query ํ๋ ๋ฑ๋ก
IANA๋ Accept-Query ํ๋๋ฅผ "ํ์ดํผํ ์คํธ ์ ์ก ํ๋กํ ์ฝ(HTTP) ํ๋ ์ด๋ฆ ๋ ์ง์คํธ๋ฆฌ"์ ์ถ๊ฐํ์ต๋๋ค. ์์น๋ <https://www.iana.org/assignments/http-fields>์ ๋๋ค (๋ค์ ์ฐธ์กฐ: 16.1.1์ , [HTTP]).
| ํ๋ ์ด๋ฆ | ์ํ | ๊ตฌ์กฐํ ์ ํ | ์ฐธ์กฐ | ์ค๋ช |
|---|---|---|---|---|
| Accept-Query | ์๊ตฌ | List | 3์ , RFC 10008 |
6. ์ฐธ๊ณ ๋ฌธํ
6.1. ๊ท๋ฒ์ ์ฐธ๊ณ ๋ฌธํ
- [HTTP-CACHING]
- Fielding, R., ํธ์ง, Nottingham, M., ํธ์ง ๋ฐ J. Reschke, ํธ์ง, โHTTP ์บ์ฑโ, STD 98, RFC 9111, DOI 10.17487/RFC9111, 6์ 2022๋ , <https://www.rfc-editor.org/info/rfc9111>.
- [HTTP]
- Fielding, R., ํธ์ง, Nottingham, M., ํธ์ง ๋ฐ J. Reschke, ํธ์ง, โHTTP ์๋ฏธ๋ก โ, STD 97, RFC 9110, DOI 10.17487/RFC9110, 6์ 2022๋ , <https://www.rfc-editor.org/info/rfc9110>.
- [RFC2119]
- Bradner, S., โํต์ฌ ๋จ์ด: ์๊ตฌ ์ฌํญ ์์ค์ ๋ํ๋ด๊ธฐ ์ํด RFC์์ ์ฌ์ฉโ, BCP 14, RFC 2119, DOI 10.17487/RFC2119, 3์ 1997๋ , <https://www.rfc-editor.org/info/rfc2119>.
- [RFC8174]
- Leiba, B., โ๋ชจํธ์ฑ: RFC 2119 ํต์ฌ ๋จ์ด์ ๋๋ฌธ์์ ์๋ฌธ์ ๊ฐโ, BCP 14, RFC 8174, DOI 10.17487/RFC8174, 5์ 2017๋ , <https://www.rfc-editor.org/info/rfc8174>.
- [STRUCTURED-FIELDS]
- Nottingham, M. ๋ฐ P-H. Kamp, โ๊ตฌ์กฐํ ํ๋ ๊ฐ: HTTP์ฉโ, RFC 9651, DOI 10.17487/RFC9651, 2024๋ 9์, <https://www.rfc-editor.org/info/rfc9651>.
- [URI]
- Berners-Lee, T., Fielding, R. ๋ฐ L. Masinter, โํตํฉ ๋ฆฌ์์ค ์๋ณ์ (URI): ์ผ๋ฐ ๊ตฌ๋ฌธโ, STD 66, RFC 3986, DOI 10.17487/RFC3986, 1์ 2005๋ , <https://www.rfc-editor.org/info/rfc3986>.
6.2. ์ ๋ณด์ฑ ์ฐธ๊ณ ๋ฌธํ
- [FETCH]
- WHATWG, โFETCHโ, WHATWG ํํ
ํ์ค, <https://fetch.spec.whatwg.org>.
์ปค๋ฐ ์ค๋ ์ท: <https://fetch.spec.whatwg.org/commit-snapshots/3bab31a55154bda73f25b45a23df718616f2f64e/>. - [RFC3253]
- Clemm, G., Amsden, J., Ellison, T., Kaler, C. ๋ฐ J. Whitehead, โ๋ฒ์ ๊ด๋ฆฌ ํ์ฅ: WebDAV (์น ๋ถ์ฐ ์ ์ ๋ฐ ๋ฒ์ ๊ด๋ฆฌ)โ, RFC 3253, DOI 10.17487/RFC3253, 3์ 2002๋ , <https://www.rfc-editor.org/info/rfc3253>.
- [RFC4918]
- Dusseault, L., ํธ์ง, โHTTP ํ์ฅ: ์น ๋ถ์ฐ ์ ์ ๋ฐ ๋ฒ์ ๊ด๋ฆฌ (WebDAV)โ, RFC 4918, DOI 10.17487/RFC4918, 2007๋ 6์, <https://www.rfc-editor.org/info/rfc4918>.
- [RFC5323]
- Reschke, J., ํธ์ง, Reddy, S., Davis, J. ๋ฐ A. Babich, โ์น ๋ถ์ฐ ์ ์ ๋ฐ ๋ฒ์ ๊ด๋ฆฌ (WebDAV) SEARCHโ, RFC 5323, DOI 10.17487/RFC5323, 2008๋ 11์, <https://www.rfc-editor.org/info/rfc5323>.
- [RFC6838]
- Freed, N., Klensin, J. ๋ฐ T. Hansen, โ๋ฏธ๋์ด ์ ํ ๋ช ์ธ ๋ฐ ๋ฑ๋ก ์ ์ฐจโ, BCP 13, RFC 6838, DOI 10.17487/RFC6838, 1์ 2013๋ , <https://www.rfc-editor.org/info/rfc6838>.
- [RFC8259]
- Bray, T., ํธ์ง, โ JavaScript ๊ฐ์ฒด ํ๊ธฐ๋ฒ (JSON) ๋ฐ์ดํฐ ๊ตํ ํ์โ, STD 90, RFC 8259, DOI 10.17487/RFC8259, 2017๋ 12์, <https://www.rfc-editor.org/info/rfc8259>.
- [RFC9535]
- Gรถssner, S., ํธ์ง, Normington, G., ํธ์ง ๋ฐ C. Bormann, ํธ์ง, โJSONPath: ์ฟผ๋ฆฌ ํํ์, JSON์ฉโ, RFC 9535, DOI 10.17487/RFC9535, 2024๋ 2์, <https://www.rfc-editor.org/info/rfc9535>.
- [URL]
- WHATWG, โURLโ, WHATWG ํํ ํ์ค,
<https://url.spec.whatwg.org>.
์ปค๋ฐ ์ค๋ ์ท: <https://url.spec.whatwg.org/commit-snapshots/52526653e848c5a56598c84aa4bc8ac9025fb66b/>. - [XSLT]
- Kay, M., ํธ์ง, โXSL
๋ณํ (XSLT) ๋ฒ์ 3.0โ, W3C ๊ถ๊ณ ์, 2017๋
6์,
<https://www.w3.org/TR/2017/REC-xslt-30-20170608/>.
์ต์ ๋ฒ์ ์ ๋ค์์์ ํ์ธํ ์ ์์ต๋๋ค: https://www.w3.org/TR/xslt-30/.
๋ถ๋ก A. ์์
์๋ ์์ ๋ ์ค๋ช ๋ง์ ์ํ ๊ฒ์ ๋๋ค. ์ค์ ๋ก ์ด๋ ๊ฒ ์งง์ ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ด์ผ ํ๋ค๋ฉด GET์ ์ฌ์ฉํ๋ ํธ์ด ๋ ๋์ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
๋๋ถ๋ถ์ ์์ ์์ ์ฌ์ฉ๋๋ ๋ฏธ๋์ด ์ ํ์ "application/x-www-form-urlencoded"์ ๋๋ค(๋ธ๋ผ์ฐ์ ์ฌ์ฉ์ ํด๋ผ์ด์ธํธ์ POST ์์ฒญ์์ ์ฌ์ฉ๋๋ฉฐ, ๋ค์์ ์ ์๋์ด ์์ต๋๋ค: "application/x-www-form-urlencoded", [URL]). ๊ฐ๊ฒฐํจ์ ์ํด Content-Length ํ๋๋ ์๋ตํ์ต๋๋ค.
A.1. ๊ฐ๋จํ ์ฟผ๋ฆฌ
์๋๋ ์ง์ ์๋ต์ด ์๋ ๊ฐ๋จํ ์ฟผ๋ฆฌ์ ๋๋ค:
QUERY /contacts HTTP/1.1 Host: example.org Content-Type: application/x-www-form-urlencoded Accept: application/json select=surname,givenname,email&limit=10&match=%22email=*@example.*%22
์๋ต:
HTTP/1.1 200 OK
Content-Type: application/json
[
{ "surname": "Smith",
"givenname": "John",
"email": "smith@example.org" },
{ "surname": "Jones",
"givenname": "Sally",
"email": "sally.jones@example.com" },
{ "surname": "Dubois",
"givenname": "Camille",
"email": "camille.dubois@example.net" }
]
A.2. QUERY ์ง์ ํ์ธ
QUERY ์ง์์ ํ์ธํ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ OPTIONS (9.3.7์ , [HTTP]) ๋ฉ์๋๊ฐ ์ ๊ณตํฉ๋๋ค:
OPTIONS /contacts HTTP/1.1 Host: example.org
์๋ต:
HTTP/1.1 200 OK Allow: GET, QUERY, OPTIONS, HEAD
Allow ์๋ต ํ๋(10.2.1์ , [HTTP])๋ ์ง์ ๋ ๋ฆฌ์์ค์์ ์ง์๋๋ ๋ฉ์๋ ์งํฉ์ ๋ํ๋ ๋๋ค.
OPTIONS ์ฌ์ฉ์๋ ๋์์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์๋ฒ์ ์ง์ ์ฌ๋ถ๋ฅผ ๋ฏธ๋ฆฌ ์์ง ๋ชปํด๋ QUERY ์์ฒญ์ ์๋ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์๋ฒ๋ ์์ฒญ์ ์ฒ๋ฆฌํ๊ฑฐ๋ 405 (ํ์ฉ๋์ง ์๋ ๋ฉ์๋, 15.5.6์ , [HTTP]) ๊ฐ์ 4xx ์ํ๋ก Allow ์๋ต ํ๋๋ฅผ ํฌํจํ์ฌ ์๋ตํ ์ ์์ต๋๋ค.
A.3. QUERY ํ์ ํ์ธ
QUERY์์ ์ง์๋๋ ๋ฏธ๋์ด ์ ํ์ Accept-Query ์๋ต ํ๋๋ฅผ ํตํด ํ์ธํ ์ ์์ต๋๋ค (3์ ):
HEAD /contacts HTTP/1.1 Host: example.org
์๋ต:
HTTP/1.1 200 OK Content-Type: application/xhtml Accept-Query: application/x-www-form-urlencoded, application/sql
์ด๋ค ์์ฒญ ๋ฉ์๋์ ๋ํ ์๋ต์ Accept-Query๊ฐ ํฌํจ๋๋์ง๋ ์ ๊ทผํ๋ ๋ฆฌ์์ค์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
Accept-Query๋ฅผ ํ์ธํ๋ ๋์ QUERY ์์ฒญ์ ๋ณด๋ด๊ณ , ๊ทธ๋ฐ ๋ค์ -- 415 ์๋ต(์ง์ํ์ง ์๋ ๋ฏธ๋์ด ์ ํ, 15.5.16์ , [HTTP]) ๊ฐ์ 4xx ์ํ์ธ ๊ฒฝ์ฐ -- Accept ์๋ต ํ๋๋ฅผ ๊ฒ์ฌํ ์ ์์ต๋๋ค (12.5.1์ , [HTTP]):
HTTP/1.1 415 Unsupported Media Type Content-Type: application/xhtml Accept: application/x-www-form-urlencoded, application/sql
A.4. Content-Location, Location ๋ฐ ๊ฐ์ ์๋ต
๋ค์ ์ ์์ ์ค๋ช ํ ๋๋ก, 2.3์ ๋ฐ 2.4์ , ์ฑ๊ณต ์๋ต์ ์๋ Content-Location ๋ฐ Location ์๋ต ํ๋๋ (2xx, 15.3์ , [HTTP]) GET ์์ฒญ์ ์๋ตํ๋ ๋์ฒด ๋ฆฌ์์ค๋ฅผ ์๋ณํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ ์์ฒญ์์ ์์ ํ ๊ฒฐ๊ณผ๋ฅผ ์ํ ๊ฒ์ผ ์๋ ์๊ณ , ๊ฐ์ ์ฐ์ฐ์ ์ํํ๋ ํฅํ ์์ฒญ์ ์ํ ๊ฒ์ผ ์๋ ์์ต๋๋ค. ๋ค์์ ์์ ๋ก ๋์๊ฐ ๋ณด๊ฒ ์ต๋๋ค: ๋ถ๋ก A.1:
QUERY /contacts HTTP/1.1 Host: example.org Content-Type: application/x-www-form-urlencoded Accept: application/json select=surname,givenname,email&limit=10&match=%22email=*@example.*%22
์๋ต:
HTTP/1.1 200 OK
Content-Type: application/json
Content-Location: /contacts/stored-results/17
Location: /contacts/stored-queries/42
Last-Modified: Sat, 25 Aug 2012 23:34:45 GMT
Date: Sun, 17 Nov 2024, 16:10:24 GMT
[
{ "surname": "Smith",
"givenname": "John",
"email": "smith@example.org" },
{ "surname": "Jones",
"givenname": "Sally",
"email": "sally.jones@example.com" },
{ "surname": "Dubois",
"givenname": "Camille",
"email": "camille.dubois@example.net" }
]
A.4.1. Content-Location ์ฌ์ฉ
์์์ ์์ ํ Content-Location ์๋ต ํ๋๋ ์์ ์ด ํฌํจ๋ QUERY ์๋ต์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ ํ๋ ๋ฆฌ์์ค๋ฅผ ์๋ณํฉ๋๋ค:
GET /contacts/stored-results/17 HTTP/1.1 Host: example.org Accept: application/json
์๋ต:
HTTP/1.1 200 OK
Last-Modified: Sat, 25 Aug 2012 23:34:45 GMT
Date: Sun, 17 Nov 2024, 16:10:25 GMT
[
{ "surname": "Smith",
"givenname": "John",
"email": "smith@example.org" },
{ "surname": "Jones",
"givenname": "Sally",
"email": "sally.jones@example.com" },
{ "surname": "Dubois",
"givenname": "Camille",
"email": "camille.dubois@example.net" }
]
์๋ฒ๊ฐ ์ด ๋ฆฌ์์ค๋ฅผ ๋ฌด๊ธฐํ ๊ตฌํํ๋ฆฌ๋ผ๋ ๋ณด์ฅ์ ์๋ค๋ ์ ์ ์ ์ํ์ญ์์ค. ๋ฐ๋ผ์ ์ค๋ฅ ์๋ต ํ ํด๋ผ์ด์ธํธ๋ ์๋ก์ด ๋์ฒด ์์น๋ฅผ ์ป๊ธฐ ์ํด ์๋ QUERY ์์ฒญ์ ๋ค์ ์ํํด์ผ ํฉ๋๋ค.
A.4.2. Location ์ฌ์ฉ
Location ์๋ต ํ๋๋ ์๋ QUERY ์์ฒญ๊ณผ ๊ฐ์ ์ฒ๋ฆฌ ๋ฐ ๋งค๊ฐ๋ณ์์ ๋ํ ํ์ฌ ๊ฒฐ๊ณผ๋ก GET์ ์๋ตํ๋ ๋ฆฌ์์ค๋ฅผ ์๋ณํฉ๋๋ค.
GET /contacts/stored-queries/42 HTTP/1.1 Host: example.org Accept: application/json
์ด ์์ ์์๋ 2024-11-17T16:12:01Z์ ํญ๋ชฉ ํ๋๊ฐ ์ ๊ฑฐ๋์์ผ๋ฏ๋ก( Last-Modified ํ๋์ ํ์๋ ๋๋ก), ์๋ต์๋ ํญ๋ชฉ ๋ ๊ฐ๋ง ํฌํจ๋ฉ๋๋ค:
HTTP/1.1 200 OK
Content-Type: application/json
Last-Modified: Sun, 17 November 2024, 16:12:01 GMT
ETag: "42-1"
Date: Sun, 17 Nov 2024, 16:13:17 GMT
[
{ "surname": "Smith",
"givenname": "John",
"email": "smith@example.org" },
{ "surname": "Dubois",
"givenname": "Camille",
"email": "camille.dubois@example.net" }
]
์๋ฒ๊ฐ ์ฌ์ ํ ๋ฆฌ์์ค๋ฅผ ๋ ธ์ถํ๊ณ ์๊ณ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ ๋ณ๊ฒฝ์ด ์๋ค๊ณ ๊ฐ์ ํ๋ฉด, ๋ค์์ ํฌํจํ๋ ํ์ ์กฐ๊ฑด๋ถ GET ์์ฒญ์:
If-None-Match: "42-1"
A.4.3. ๊ฐ์ ์๋ต
์๋ฒ๋ "๊ฐ์ " ์๋ต์ ๋ณด๋ผ ์ ์์ต๋๋ค (2.5์ ). ์ด๋ ์ํ ์ฝ๋ 303 (๋ค๋ฅธ ๋ฆฌ์์ค ์ฐธ์กฐ, 15.4.4์ , [HTTP])์ ์ฌ์ฉํฉ๋๋ค.
๋ค์์ ์์ ๋ถ๋ถ์ ์๋ ์์ฒญ์ ๋ํด, ๋ถ๋ก A.4, ์๋ฒ๋ ๋ค์๊ณผ ๊ฐ์ด ์๋ตํ ์ ์์ต๋๋ค:
HTTP/1.1 303 See Other Content-Type: text/plain Date: Sun, 17 Nov 2024, 16:13:17 GMT Location: /contacts/stored-queries/42 "/contacts/stored-queries/42"์ ์ ์ฅ๋ ์ฟผ๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
์ด๋ ์ง์ ์๋ต์ Location์ ํฌํจํ๋ ๊ฒ๊ณผ ์ ์ฌํ์ง๋ง, ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ง ์๋๋ค๋ ์ฐจ์ด๊ฐ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์๋ฒ๋ ๋์ฒด ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ฑฐ๋ ์ฌ์ฌ์ฉํ๊ธฐ๋ง ํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด ๋ฆฌ์์ค๋ ๋ค์์ ํ์๋ ๋๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค: ๋ถ๋ก A.4.2.
A.5. ์กฐ๊ฑด๋ถ ์์ฒญ
QUERY๋ฅผ ๊ตฌํํ๋ฉฐ "application/sql" ๋ฐ "application/xslt+xml" [XSLT]์ ์์ฒญ ๋ฏธ๋์ด ์ ํ์ผ๋ก ์ง์ํ๊ณ , "text/csv"๋ก ์๋ต์ ์์ฑํ ์ ์๋ ๋ฆฌ์์ค๋ฅผ ์๊ฐํด ๋ณด์ญ์์ค. ์ฟผ๋ฆฌ ๋์ ๋ฐ์ดํฐ ์งํฉ์๋ RFC ๋ฌธ์ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ, ์ฟผ๋ฆฌ๋ 10๋ ๋จ์๋ก ๊ทธ๋ฃนํ๋ ์ ๋ณด๋ฅผ ๋ฐํํฉ๋๋ค:
QUERY /rfc-index.xml HTTP/1.1 Host: example.org Date: Sun, 7 Sep 2025, 00:00:00 GMT Content-Type: application/xslt+xml Accept: text/csv ...XSLT๋ฅผ ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ ์ฝํ ์ธ ...
์๋ต:
HTTP/1.1 200 OK Date: Sun, 7 Sep 2025, 00:00:00 GMT Location: /stored-queries/4815162342 Content-Type: text/csv Accept-Query: "application/sql", "application/xslt+xml" Last-Modified: Sun, 31 Aug 2025, 08:44:00 GMT Vary: Accept-Query, Content-Encoding, Content-Type decade, total, with errata, % with errata, average page count 1960, 26, 5, 19.2, 5.3 1970, 666, 18, 2.7, 6.1 1980, 376, 44, 11.7, 23.4 1990, 1593, 269, 16.9, 25.5 2000, 2888, 1048, 36.3, 27.3 2010, 2954, 895, 30.3, 26.1 2020, 1133, 230, 20.3, 26.2
์ฌ๊ธฐ์ ์๋ฒ๋ "/stored-queries/4815162342" ๊ฒฝ๋ก๋ฅผ ๋๋ฑ ๋ฆฌ์์ค์ ํ ๋นํ์ฌ (2.4์ ) ์ดํ GET์์ ์ฌ์ฉํ๋๋ก ํ์ต๋๋ค.
๋์ค์ ํด๋ผ์ด์ธํธ๋ ์ฟผ๋ฆฌ๋ฅผ ๋ฐ๋ณตํ์ง๋ง, ๊ฒฐ๊ณผ๊ฐ ๋ณ๊ฒฝ๋์์ ๋๋ง ๋ฐํํ๋๋ก ์ง์ ํฉ๋๋ค:
QUERY /rfc-index.xml HTTP/1.1 Host: example.org Date: Mon, 8, Sep 2025, 11:00:00 GMT Content-Type: application/sql Accept: text/csv If-Modified-Since: Sun, 31 Aug 2025, 08:44:00 GMT Vary: Accept-Query, Content-Type ...๊ฐ์ ์ฟผ๋ฆฌ์ด์ง๋ง SQL ์ฌ์ฉ...
์ฟผ๋ฆฌ ๋์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ง ์์์ผ๋ฏ๋ก ์๋ฒ๋ ๋ค์๊ณผ ๊ฐ์ด ์๋ตํฉ๋๋ค:
HTTP/1.1 304 Not Modified Date: Mon, 8 Sep 2025, 11:00:00 GMT Content-Type: text/csv Location: /stored-queries/4815162342 Accept-Query: "application/sql", "application/xslt+xml" Last-Modified: Sun, 31 Aug 2025, 08:44:00 GMT Vary: Accept-Query, Content-Type
์๋ฒ๊ฐ ๋๋ฑ ๋ฆฌ์์ค์ URI๋ฅผ ์๋ณํ์ผ๋ฏ๋ก ํด๋น ๋ฆฌ์์ค์ GET์ผ๋ก ์ ๊ทผํ ์ ์์ต๋๋ค. ํนํ ์ด๋ฅผ ํตํด ์ฟผ๋ฆฌ ์์ฒญ์ ์ฝํ ์ธ ๋ฅผ ๋ค์ ์ ์กํ์ง ์์ ์ ์์ต๋๋ค:
GET /stored-queries/4815162342 HTTP/1.1 Host: example.org Date: Sun, 21, Sep 2025, 12:08:00 GMT Accept: text/csv If-Modified-Since: Sun, 31 Aug 2025, 00:00:00 GMT
์ฌ๊ธฐ์๋ ๋ฐ์ดํฐ ์งํฉ์ ์ํ๊ฐ ์ค์ ๋ก ๋ณ๊ฒฝ๋์์ผ๋ฏ๋ก ์ ์ฝํ ์ธ ๊ฐ ๋ฐํ๋ฉ๋๋ค:
HTTP/1.1 200 OK Date: Sun, 21, Sep 2025, 12:08:00 GMT Content-Type: text/csv Last-Modified: Thu, 18 Sep 2025, 19:56:00 GMT Vary: Accept-Query, Content-Encoding, Content-Type decade, total, with errata, % with errata, average page count 1960, 26, 5, 19.2, 5.3 1970, 666, 18, 2.7, 6.1 1980, 376, 44, 11.7, 23.4 1990, 1593, 269, 16.9, 25.5 2000, 2888, 1048, 36.3, 27.3 2010, 2954, 895, 30.3, 26.1 2020, 1133, 230, 20.3, 26.2
(์ด 10๋ ๊ธฐ๊ฐ์ ํด๋นํ๋ ํ์ ๋ณ๊ฒฝ์ ์ ์ํ์ญ์์ค.)
์๋ ๋ค์ด์ด๊ทธ๋จ์ ์กฐ๊ฑด๋ถ ์์ฒญ์ ์ฌ์ฉ๊ณผ, ๋๋ฑ ๋ฆฌ์์ค์ URI๊ฐ ํ ๋น๋์์ ๋(๊ทธ๋ฆฌ๊ณ ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฅผ ํ์ฉํ ๋) ์ด๋ป๊ฒ ๋ฌ๋ผ์ง ์ ์๋์ง๋ฅผ ๋ณด์ฌ ์ค๋๋ค. ๊ฐ์์ ํ๋ ์ด๋ฆ "Validator"๋ ์ค๋ช ์ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
๊ทธ๋ฆผ 1: QUERY๋ง ์ฌ์ฉํ๋ ๋ฐ์ดํฐ ํ๋ฆ
๊ทธ๋ฆผ 2: ๋๋ฑ ๋ฆฌ์์ค์ GET์ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ ํ๋ฆ
A.6. ์ถ๊ฐ ์ฟผ๋ฆฌ ํ์
๋ค์ ์์ ๋ JSON ํํ์ [RFC8259] RFC ์ ์คํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์์ฒญ์ ๋ณด์ฌ ์ค๋๋ค.
์๋ ์์ฒญ์ ํ์ฅ ๊ฐ๋ฅ ์คํ์ผ์ํธ ์ธ์ด ๋ณํ(XSLT)์ ์ฌ์ฉํ์ฌ ์ฐ๋ ๋ฐ ์ ์๋ ์ ์คํ ์ ํ๋ณ๋ก ์์ฝ๋ ์ ์คํ ์ ๋ณด๋ฅผ ์ถ์ถํฉ๋๋ค.
QUERY /errata.json HTTP/1.1
Host: example.org
Content-Type: application/xslt+xml
Accept: application/xml, text/csv
<transform xmlns="http://www.w3.org/1999/XSL/Transform"
xmlns:j="http://www.w3.org/2005/xpath-functions"
version="3.0">
<output method="text"/>
<param name="input"/>
<variable name="json"
select="json-to-xml(unparsed-text($input))"/>
<variable name="sc">errata_status_code</variable>
<variable name="sd">submit_date</variable>
<template match="/">
<text>year, total, rejected, verified, hdu, reported</text>
<text> </text>
<variable name="en" select="$json//j:map"/>
<for-each-group select="$en"
group-by="substring-before(j:string[@key=$sd],'-')">
<sort select="current-grouping-key()"/>
<variable name="year" select="current-grouping-key()"/>
<variable name="errata" select=
"$en[$year=substring-before(j:string[@key=$sd],'-')]"/>
<value-of select="concat(
$year,
', ',
count($errata),
', ',
count($errata['Rejected'=j:string[@key=$sc]]),
', ',
count($errata['Verified'=j:string[@key=$sc]]),
', ',
count(
$errata['Held for Document Update'=j:string[@key=$sc]]),
', ',
count($errata['Reported'=j:string[@key=$sc]]),
' ')"/>
</for-each-group>
</template>
</transform>
์๋ต:
HTTP/1.1 200 OK Content-Type: text/csv Accept-Query: "application/jsonpath", "application/xslt+xml" Date: Wed, 19 Feb 2025, 17:10:01 GMT year, total, rejected, verified, hdu, reported 2000, 14, 0, 14, 0, 0 2001, 72, 1, 70, 1, 0 2002, 124, 8, 104, 12, 0 2003, 63, 0, 61, 2, 0 2004, 89, 1, 83, 5, 0 2005, 156, 10, 96, 50, 0 2006, 444, 54, 176, 214, 0 2007, 429, 48, 188, 193, 0 2008, 423, 52, 165, 206, 0 2009, 331, 39, 148, 144, 0 2010, 538, 80, 232, 222, 4 2011, 367, 47, 170, 150, 0 2012, 348, 54, 149, 145, 0 2013, 341, 61, 169, 106, 5 2014, 342, 73, 180, 72, 17 2015, 343, 79, 145, 89, 30 2016, 295, 46, 122, 82, 45 2017, 303, 46, 120, 84, 53 2018, 350, 61, 118, 98, 73 2019, 335, 47, 131, 94, 63 2020, 387, 68, 117, 123, 79 2021, 321, 44, 148, 63, 66 2022, 358, 37, 198, 40, 83 2023, 262, 38, 121, 33, 70 2024, 322, 33, 125, 23, 141 9999, 1, 0, 0, 1, 0
๋ ๋ค๋ฅธ ์ฟผ๋ฆฌ ํ์์ธ JSONPath๋ ์ง์๋จ์ ๋ํ๋ด๋ Accept-Query ์๋ต ํ๋์ ์ ์ํ์ญ์์ค [RFC9535]. ์๋ ์์ฒญ์ 2024๋ ์ดํ ์ ์ถ๋ ์ ์คํ ์ค ๊ฑฐ๋ถ๋ ๋ชจ๋ ์ ์คํ์ ์๋ณ์๋ฅผ ๋ณด๊ณ ํฉ๋๋ค:
QUERY /errata.json HTTP/1.1
Host: example.org
Content-Type: application/jsonpath
Accept: application/json
$..[
?@.errata_status_code=="Rejected"
&& @.submit_date>"2024"
]
["doc-id"]
์๋ต:
HTTP/1.1 200 OK Content-Type: application/json Accept-Query: "application/jsonpath", "application/xslt+xml" Date: Thu, 20 Feb 2025, 09:55:42 GMT Last-Modified: Thu, 20 Feb 2025 06:10:01 GMT [ "RFC1185","RFC8407","RFC6350","RFC8467","RFC1157","RFC9543", "RFC9076","RFC7656","RFC2822","RFC9460","RFC2104","RFC6797", "RFC9499","RFC9557","RFC2131","RFC2328","RFC9001","RFC3325", "RFC9438","RFC2526","RFC2985","RFC7643","RFC9132","RFC6376", "RFC9110","RFC9460","RFC7748","RFC9497","RFC8463","RFC4035", "RFC7239","RFC9083","RFC9537","RFC9537","RFC9420","RFC9000", "RFC9656","RFC9110","RFC2324","RFC2549","RFC6797","RFC2549", "RFC8894" ]
๋ถ๋ก B. ๋ฉ์๋ ์ด๋ฆ 'QUERY'์ ์ ์
"ํ์ดํผํ ์คํธ ์ ์ก ํ๋กํ ์ฝ(HTTP) ๋ฉ์๋ ๋ ์ง์คํธ๋ฆฌ" (<http://www.iana.org/assignments/http-methods>)์๋ "์์ ํจ" ๋ฐ "๋ฉฑ๋ฑ์ ์" ์์ฑ์ ๊ฐ๋ ๋ค๋ฅธ ์ธ ๋ฉ์๋๊ฐ ์ด๋ฏธ ํฌํจ๋์ด ์์ต๋๋ค: "PROPFIND" [RFC4918], "REPORT" [RFC3253] ๋ฐ "SEARCH" [RFC5323].
์ด๋ค ์ค ์ด๋ ๊ฒ์ด๋ ์ฌ์ฌ์ฉํ์ฌ, ์ด ๋ช ์ธ์์ ์ ๋ฉ์๋ "QUERY"๋ก ์ ์ํ๋ ๋ด์ฉ๊ณผ ์ผ์นํ๋๋ก ๊ฐฑ์ ํ ์ ์์์ ๊ฒ์ ๋๋ค. ์ค์ ๋ก ์ด ๋ช ์ธ์ ์ด๊ธฐ ๋จ๊ณ์์๋ "SEARCH"๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
์ต์ข ์ ์ผ๋ก ๋ฉ์๋ ์ด๋ฆ "QUERY"๋ฅผ ์ ํํ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋ค๋ฅธ ํ๋ณด๋ค์ ์์ฒญ ์ฝํ ์ธ ์ ์ผ๋ฐ์ ์ธ ๋ฏธ๋์ด ์ ํ("application/xml")์ ์ฌ์ฉํ๋ฉฐ, ์์ฒญ์ ์๋ฏธ๋ก ์ ์ ์ ์ผ๋ก ์์ฒญ ์ฝํ ์ธ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
- ๋ํ ์ด๋ค์ ๋ชจ๋ WebDAV ํ๋์์ ์ ๋ํ์ผ๋ฉฐ, ์ด์ ๋ํด ๋ง์ ์ฌ๋์ด ๋ณตํฉ์ ์ธ ๊ฐ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- "QUERY"๋ URI์ ์ฟผ๋ฆฌ ๊ตฌ์ฑ ์์์์ ๊ด๊ณ๋ฅผ ์ ๋ํ๋ ๋๋ค.
๊ฐ์ฌ์ ๊ธ
์์ด๋์ด, ๊ฒํ ๋ฐ ํผ๋๋ฐฑ์ ์ ๊ณตํ HTTP ์์ ๊ทธ๋ฃน์ ๋ชจ๋ ๊ตฌ์ฑ์๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋ค์ ๋ถ๋ค๊ป ํน๋ณํ ๊ฐ์ฌ๋๋ฆฝ๋๋ค: Carsten Bormann, Mark Nottingham, Martin Thomson, Michael Thornburgh, Roberto Polli, Roy Fielding ๋ฐ Will Hawkins.
๊ธฐ์ฌ์
Ashok Malhotra๋ ์ด ๋ช ์ธ๋ก ์ด์ด์ง ์ด๊ธฐ ๋ ผ์์ ์ฐธ์ฌํ์ต๋๋ค:
์ด๋ฉ์ผ: malhotrasahib@gmail.com
์ด HTTP ๋ฉ์๋์ ๊ดํ ๋ ผ์๋ Asbjรธrn Ulsberg๊ฐ HTTP ์ํฌ์์์ ๋ค์ ์์ํ์ต๋๋ค. 2019๋ ์ ์ผ์ ๋๋ค:
์ด๋ฉ์ผ: asbjorn@ulsberg.no
URI: https://asbjor.nu/