URI ๋? ๐
1. URI ์ ์
URI (Uniform Resource Identifier, ํตํฉ ์์ ์๋ณ์)๋ ์น์์ ํน์ ๋ฆฌ์์ค(์์)๋ฅผ ์๋ณํ๋ ๊ณ ์ ํ ์ฃผ์์ด๋ค.
โ ์ฝ๊ฒ ๋งํ๋ฉด:
๐ ์ธํฐ๋ท์์ ๋ฆฌ์์ค๋ฅผ ์ฐพ๊ณ ์ ๊ทผํ๊ธฐ ์ํ ์ฃผ์ ์ฒด๊ณ
๐ URI์ ๋ ๊ฐ์ง ์ฃผ์ ์ ํ
URL (Uniform Resource Locator, ํตํฉ ์์ ์์น์)
- ํน์ ๋ฆฌ์์ค์ ์์น๋ฅผ ๋ช ํํ๊ฒ ์๋ ค์ฃผ๋ ์๋ณ์
- ์: `https://www.example.com/index.html`
URN (Uniform Resource Name, ํตํฉ ์์ ์ด๋ฆ)
- ๋ฆฌ์์ค๋ฅผ ๊ณ ์ ํ๊ฒ ์๋ณํ์ง๋ง, ์์น ์ ๋ณด๋ ํฌํจํ์ง ์์
- ์: `urn:isbn:0451450523` (ํน์ ์ฑ ์ ISBN)
2. URI์ ๊ธฐ๋ณธ ๊ตฌ์กฐ
URI๋ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์ฑ ์์๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
scheme://userinfo@host:port/path?query#fragment
โ URI ๊ตฌ์ฑ ์์ ์์ธ ์ค๋ช
๊ตฌ์ฑ์์ ์ค๋ช ์์:
scheme | ํ๋กํ ์ฝ (http, https, ftp ๋ฑ) | `https://` |
userinfo | (์ ํ์ ) ์ฌ์ฉ์ ์ ๋ณด (ID, PW) | `user:pass@` |
host | ๋๋ฉ์ธ ์ด๋ฆ ๋๋ IP ์ฃผ์ | `www.example.com` |
port | (์ ํ์ ) ํฌํธ ๋ฒํธ (๊ธฐ๋ณธ: 80, 443) | `:8080` |
path | ์์์ ๊ฒฝ๋ก | `/products/item123` |
query | (์ ํ์ ) ์ถ๊ฐ์ ์ธ ๋ฐ์ดํฐ | `?color=red&size=large` |
fragment | (์ ํ์ ) ๋ฌธ์ ๋ด ํน์ ์์น ์ง์ | `#section2` |
3. URI์ ์ค์ ์์ ๋ถ์
์์ URI:
https://user:password@www.example.com:8080/products/item123?color=red&size=large#reviews
๊ตฌ์ฑ์์๊ฐ ์ค๋ช :
scheme | `https` | HTTP ๋ณด์ ํ๋กํ ์ฝ |
userinfo | `user:password@` | ๋ก๊ทธ์ธ ์ ๋ณด (์๋ต ๊ฐ๋ฅ) |
host | `www.example.com` | ์น์ฌ์ดํธ ๋๋ฉ์ธ |
port | `:8080` | ํฌํธ ๋ฒํธ (80์ด ๊ธฐ๋ณธ) |
path | `/products/item123` | ํน์ ์ํ ํ์ด์ง ๊ฒฝ๋ก |
query | `?color=red&size=large` | ์ํ ์์๊ณผ ์ฌ์ด์ฆ ์ ํ |
fragment | `#reviews` | ๋ฆฌ๋ทฐ ์น์ ์ผ๋ก ์ด๋ |
4. URL๊ณผ URI์ ์ฐจ์ด
โ URI๋ URL์ ํฌํจํ๋ ๋ ๋์ ๊ฐ๋ ์ด๋ค.
๊ตฌ๋ถ ์ค๋ช ์์:
URI | ๋ฆฌ์์ค๋ฅผ ๊ณ ์ ํ๊ฒ ์๋ณ | `https://example.com/index.html` (URL) / `urn:isbn:0451450523` (URN) |
URL | ๋ฆฌ์์ค์ ์์น๋ฅผ ์ง์ ํ๋ URI | `https://example.com/index.html` |
์ฆ, ๋ชจ๋ URL์ URI์ด์ง๋ง, ๋ชจ๋ URI๊ฐ URL์ ์๋๋ค.
5. URI ๊ด๋ จ ์ฃผ์ ๊ฐ๋
(1) ์ ๋ URI vs ์๋ URI
์ ํ ์ค๋ช ์์:
์ ๋ URI | ์ ์ฒด ์ฃผ์ ํฌํจ | `https://example.com/page` |
์๋ URI | ๊ธฐ์ค์ด ๋๋ URI์ ๋ฐ๋ผ ๋ฌ๋ผ์ง | `/page` (ํ์ฌ ๋๋ฉ์ธ ๊ธฐ์ค) |
(2) URL Encoding (ํผ์ผํธ ์ธ์ฝ๋ฉ)
- ์น์์ ํน์ ๋ฌธ์(๊ณต๋ฐฑ, ํ๊ธ, &, ? ๋ฑ)๋ฅผ ์ธ์ฝ๋ฉํ๋ ๋ฐฉ์
- ๊ณต๋ฐฑ( ) → `%20`
- `ํ๊ธ` → `%ED%95%9C%EA%B8%80`
- `https://example.com/search?q=์๋
`
→ `https://example.com/search?q=%EC%95%88%EB%85%95`
๐ ์ด์ :
- URL์ ์ฌ์ฉํ ์ ์๋ ๋ฌธ์๋ฅผ ์์ ํ ํ์์ผ๋ก ๋ณํ
- ์๋ฒ๊ฐ ์ ์์ ์ผ๋ก ํด์ํ ์ ์๋๋ก ํ๊ธฐ ์ํจ
(3) Query String๊ณผ Path Parameter
โ Query String (`?key=value` ํ์)
- `?` ๋ค์ `key=value` ์์ผ๋ก ๋ฐ์ดํฐ ์ ๋ฌ
- ์ฌ๋ฌ ๊ฐ์ผ ๊ฒฝ์ฐ `&`๋ก ์ฐ๊ฒฐ
- ์:
# arduino
https://example.com/products?category=shoes&size=42
- `category=shoes`, `size=42` ๊ฐ์ด ์๋ฒ๋ก ์ ๋ฌ๋จ
โ Path Parameter (`/key/value` ํ์)
- ๊ฒฝ๋ก ์์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ์ฌ ์ ๋ฌ
- RESTful API์์ ์์ฃผ ์ฌ์ฉ
- ์:
# arduino
https://example.com/products/123
- `123`์ด ์ํ ID๋ฅผ ๋ํ๋
6. RESTful API์์ URI ์ค๊ณ ์์น
๐ ์ข์ URI ์ค๊ณ ๊ฐ์ด๋๋ผ์ธ
๋ช ํํ๊ณ ์ผ๊ด๋ ๋ฆฌ์์ค ์ด๋ฆ ์ฌ์ฉ
- ์ข์: `/users/123`
- ๋์จ: `/getUser?id=123`
์๋ฌธ์ ์ฌ์ฉ & ํ์ดํ(-) ์ฌ์ฉ
- ์ข์: `/blog-posts`
- ๋์จ: `/BlogPosts`
HTTP ๋ฉ์๋(GET, POST, PUT, DELETE ๋ฑ)์ ํจ๊ป ์ฌ์ฉ
- `GET /users/` → ์ฌ์ฉ์ ๋ชฉ๋ก ์กฐํ
- `POST /users/` → ์ ์ฌ์ฉ์ ์ถ๊ฐ
- `GET /users/123` → ํน์ ์ฌ์ฉ์ ์กฐํ
- `PUT /users/123` → ์ฌ์ฉ์ ์ ๋ณด ์์
- `DELETE /users/123` → ์ฌ์ฉ์ ์ญ์
์ฟผ๋ฆฌ์คํธ๋ง์ ๊ฒ์/ํํฐ๋ง์๋ง ์ฌ์ฉ
- ์ข์: `/products?category=shoes&color=red`
- ๋์จ: `/getProductsByCategoryAndColor?cat=shoes&clr=red`
โ URI ์์ฝ ์ ๋ฆฌ
๊ฐ๋ ์ค๋ช :
URI | ์น ์์์ ๊ณ ์ ํ ์๋ณ์ |
URL | ์์์ ์์น๋ฅผ ํฌํจํ URI |
URN | ์์์ ์์น ์์ด ๊ณ ์ ํ ์ด๋ฆ๋ง ํฌํจ |
์ ๋ URI | ์ ์ฒด ์ฃผ์๋ฅผ ํฌํจ |
์๋ URI | ํ์ฌ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ์ง์ |
ํผ์ผํธ ์ธ์ฝ๋ฉ | ํน์ ๋ฌธ์ ๋ณํ (์: `๊ณต๋ฐฑ → %20`) |
Query String | `?key=value` ํ์์ ๋ฐ์ดํฐ ์ ๋ฌ ๋ฐฉ์ |
Path Parameter | RESTful API์์ ์์ ์๋ณ์ ์ฌ์ฉ |
๐ฏ ๊ฒฐ๋ก
โ
URI๋ ์น์์ ํน์ ๋ฆฌ์์ค๋ฅผ ์๋ณํ๋ ์ค์ํ ๊ฐ๋
์ด๋ค~
โ
URL์ URI์ ํ ์ข
๋ฅ์ด๋ฉฐ, ์์์ ์์น๋ฅผ ํฌํจํ๋ค~
โ
RESTful API ์ค๊ณ ์ ๋ช
ํํ๊ณ ์ผ๊ด๋ URI ์ฌ์ฉ์ด ์ค์ํ๋ค~
'AI ๐ค > Django โ๏ธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[250203] Serializer ์ ๋ฆฌ~ (0) | 2025.02.03 |
---|---|
[250131] django DRF(Django Rest Framework)๋~ (0) | 2025.01.31 |
[250122] DateTimeField() ๊ฐ๋ ์ ๋ฆฌ~ (0) | 2025.01.22 |
[250121] ์ฟผ๋ฆฌ์ (QuerySet)์ด๋? (0) | 2025.01.21 |
[250120] HttpResponse์ render์ ์ฐจ์ด์ (1) | 2025.01.20 |