1. HTTP ์ ๋ฆฌ
๐ ์ฃผ์ ์ํ ์ฝ๋ ์์ฝ ์ ๋ฆฌํ
์ํ ์ฝ๋ | ์๋ฏธ | ์ฌ์ฉ์์ |
200 OK | ์ฑ๊ณต | ์ผ๋ฐ์ ์ธ ์์ฒญ ์ฑ๊ณต |
201 Created | ๋ฆฌ์์ค ์์ฑ๋จ | POST๋ก ์๋ก์ด ๋ฆฌ์์ค ์์ฑ |
204 No Content | ์ฑ๊ณตํ์ง๋ง ์๋ต ๋ณธ๋ฌธ ์์ | DELETE, PATCH ๋ฑ ํ์ ๋ณธ๋ฌธ ๋ถํ์ํ ๋ |
400 Bad Request | ํด๋ผ์ด์ธํธ ์์ฒญ ์ค๋ฅ | ์๋ชป๋ ํ๋ผ๋ฏธํฐ, JSON ํ์ฑ ์คํจ |
401 Unauthorized | ์ธ์ฆ ์คํจ | ๋ก๊ทธ์ธ/ํ ํฐ ์์, ๋ง๋ฃ |
403 Forbidden | ๊ถํ ์์ | ๋ก๊ทธ์ธ์ ๋์ง๋ง ๊ถํ ์์ |
404 Not Found | ๋ฆฌ์์ค ์์ | ๊ฒฝ๋ก ๋๋ ๋ฆฌ์์ค ์กด์ฌํ์ง ์์ |
405 Method Not Allowed | ๋ฉ์๋ ํ์ฉ ์๋จ | GET๋ง ์ง์ํ๋ API์ POST ์์ฒญ ๋ฑ |
409 Conflict | ๋ฆฌ์์ค ์ถฉ๋ | ์ค๋ณต ์์ฒญ, ๋ฒ์ ์ถฉ๋ ๋ฑ |
429 Too Many Requests | ๋๋ฌด ๋ง์ ์์ฒญ | Rate limit ์ด๊ณผ |
500 Internal Server Error | ์๋ฒ ๋ด๋ถ ์ค๋ฅ | ์์ธ ๋ฐ์, ๋ก์ง ์๋ฌ ๋ฑ |
502 Bad Gateway | ๊ฒ์ดํธ์จ์ด ์ค๋ฅ | ํ๋ก์/๋ก๋๋ฐธ๋ฐ์๊ฐ ๋ค ์๋ฒ์์ ์๋ชป๋ ์๋ต ๋ฐ์ |
503 Service Unavailable | ์๋ฒ ๊ณผ๋ถํ or ์ ๊ฒ ์ค | ์ผ์์ ์๋น์ค ๋ถ๊ฐ |
504 Gateway Timeout | ๋ค์ชฝ ์๋ฒ ์๋ต ์ง์ฐ | ํ๋ก์๊ฐ ๋ฐฑ์๋๋ก๋ถํฐ ์๋ต ๋ชป ๋ฐ์ |
๐ ์์ฃผ ๋น๊ต๋๋ ์ํ ์ฝ๋ ์ฐจ์ด
ํญ๋ชฉ | ์๋ฏธ / ์ฉ๋ |
401 vs 403 | 401: ์ธ์ฆ์ด ์์ ์ ๋จ (ex. ํ ํฐ ์์) 403: ์ธ์ฆ์ ๋์ง๋ง ๊ถํ ์์ |
200 vs 204 | 200: ์๋ต ๋ณธ๋ฌธ ์์ 204: ์๋ต ๋ณธ๋ฌธ ์์ |
404 vs 405 | 404: URL ์์ฒด ์์ 405: URL์ ์์ง๋ง HTTP ๋ฉ์๋๊ฐ ์๋ชป๋จ |
301 vs 302 | 301: ์๊ตฌ ์ด๋ (๋ธ๋ผ์ฐ์ ์บ์) 302: ์์ ์ด๋ |
304 vs 200 | 304: ์บ์๋ ์๋ต ์ฌ์ฌ์ฉ (๋ณธ๋ฌธ ์์) 200: ๋ฆฌ์์ค ์ ์ก |
๐ HTTP ๋ฉ์๋ ์์ฝ ์ ๋ฆฌ
๋ฉ์๋ | ์ค๋ช | ๋ฉฑ๋ฑ์ฑ | ์บ์ฑ |
GET | ๋ฐ์ดํฐ ์กฐํ | โ ์์ | โ ๊ฐ๋ฅ |
POST | ๋ฐ์ดํฐ ์์ฑ | โ ์์ | โ ์์ |
PUT | ๋ฆฌ์์ค ์ ์ฒด ์์ | โ ์์ | โ ์์ |
PATCH | ๋ฆฌ์์ค ๋ถ๋ถ ์์ | โ ์์ | โ ์์ |
DELETE | ๋ฆฌ์์ค ์ญ์ | โ ์์ | โ ์์ |
HEAD | GET๊ณผ ๋์ผ, ์๋ต ๋ณธ๋ฌธ ์์ | โ ์์ | โ ๊ฐ๋ฅ |
OPTIONS | ์ง์ํ๋ ๋ฉ์๋ ํ์ธ (CORS ๋ฑ) | โ ์์ | โ ์์ |
๋ฉฑ๋ฑ์ฑ: ๊ฐ์ ์์ฒญ์ ์ฌ๋ฌ ๋ฒ ๋ณด๋ด๋ ๊ฒฐ๊ณผ๊ฐ ๊ฐ์ → ์์ ์ฑ, ์ฌ์๋ ์ ๋ต์ ์ค์
์บ์ฑ: ๋ธ๋ผ์ฐ์ /์๋ฒ/ํ๋ก์ ๋ฑ์์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ
๐ RESTful API
ํญ๋ชฉ | ์ข์ ์ค๊ณ | ๋์ ์ค๊ณ (RESTful ํ์ง ์์) |
URL ์ค๊ณ | ๋ฆฌ์์ค ์ค์ฌ (/users, /posts/1) | ๋์ฌ ์ค์ฌ (/getUser, /doLogin) |
๋ฉ์๋ ์ฌ์ฉ | CRUD์ ๋ง๊ฒ ์ฌ์ฉ (GET, POST, PUT, DELETE) | ๋ชจ๋ ๊ธฐ๋ฅ์ POST ํ๋๋ก ์ฒ๋ฆฌ |
์ํ ์ฝ๋ | ์ํฉ์ ๋ง๋ HTTP ์ํ ์ฝ๋ ๋ช ํํ ์ฌ์ฉ | ๋ฌด์กฐ๊ฑด 200๋ง ๋ฐํ, ์ค๋ฅ๋ OK ์ฒ๋ฆฌ |
Stateless | ์๋ฒ๊ฐ ์ํ ์ ์ฅํ์ง ์์ (ํ ํฐ ๊ธฐ๋ฐ ๋ฑ) | ์๋ฒ๊ฐ ์ธ์ ์ ์ํ ์ ์ฅ |
๋ฒ์ ๊ด๋ฆฌ | /v1/users, ํค๋ ๊ธฐ๋ฐ ๋ฑ ๋ช ์์ ๋ฒ์ ๊ด๋ฆฌ | ๋ฒ์ ๊ตฌ๋ถ ์์ |
๐ ์กฐ๊ฑด๋ถ ์์ฒญ & ์บ์ฑ ๊ด๋ จ ํค๋
ํค๋ | ์ค๋ช |
ETag | ๋ฆฌ์์ค์ ๊ณ ์ ๋ฒ์ ์๋ณ์ |
If-None-Match | ํด๋ผ์ด์ธํธ๊ฐ ๊ฐ์ง ETag๊ณผ ๋น๊ตํด์ ๊ฐ์ผ๋ฉด 304 |
Last-Modified | ๋ฆฌ์์ค ๋ง์ง๋ง ์์ ์๊ฐ |
If-Modified-Since | ํด๋ผ์ด์ธํธ๊ฐ ๊ฐ์ง ๋ง์ง๋ง ์์ ์๊ฐ๊ณผ ๋น๊ต |
Cache-Control | ์บ์ ํ์ฉ ์ฌ๋ถ, ๊ธฐ๊ฐ ๋ฑ ์ค์ |
Expires | ์บ์ ๋ง๋ฃ ์๊ฐ ๋ช ์ |
2. HTTP ๊ด๋ จ ์ง๋ฌธ
Q1. 401 Unauthorized์ 403 Forbidden์ ์ฐจ์ด๋?
- 401: ์ธ์ฆ ์คํจ → ๋ก๊ทธ์ธ or ํ ํฐ ํ์
(ex. ํ ํฐ์ด ์๊ฑฐ๋ ๋ง๋ฃ๋จ) - 403: ์ธ์ฆ์ ๋์์ง๋ง ๊ถํ ์์
(ex. ์ผ๋ฐ ์ ์ ๊ฐ ๊ด๋ฆฌ์ API ์ ๊ทผ ์)
Q2. 200 OK์ 204 No Content์ ์ฐจ์ด๋?
- 200 OK: ์์ฒญ ์ฑ๊ณต + ์๋ต ๋ณธ๋ฌธ ์์
- 204 No Content: ์์ฒญ ์ฑ๊ณต + ์๋ต ๋ณธ๋ฌธ ์์
(ex. DELETE ์ฑ๊ณต ํ ๋ด์ฉ ๋ฐํ ํ์ ์์ ๋)
Q3. RESTfulํ์ง ์์ API ์ค๊ณ์ ์์๋?
- ๋ชจ๋ ๊ธฐ๋ฅ์ POST /doSomething ์์ผ๋ก ์ค๊ณ
- URL์ด ๋์ฌ ์์ฃผ (/createUser, /getData)
- ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ๊ธฐ์ตํ๋ ๊ตฌ์กฐ (REST๋ Stateless๊ฐ ์์น)
Q4. ์บ์์ 304 Not Modified๋ ์ด๋ค ์ํฉ์์ ์ฐ์ด๋์?
- ์บ์ฑ์ ์๋ฒ ๋ถํ ๊ฐ์, ์๋ ํฅ์ ๋ชฉ์
- ํด๋ผ์ด์ธํธ๊ฐ If-Modified-Since ๋๋ If-None-Match ํค๋ ํฌํจ ์์ฒญ ์,
- ์๋ฒ ๋ฆฌ์์ค๊ฐ ๋ณ๊ฒฝ๋์ง ์์๋ค๋ฉด 304 ์๋ต → ํด๋ผ์ด์ธํธ๋ ๊ธฐ์กด ์บ์ ์ฌ์ฉ
Q5. PUT๊ณผ PATCH์ ์ฐจ์ด๋?
- PUT: ๋ฆฌ์์ค ์ ์ฒด๋ฅผ ์์ (๋์ฒด)
- PATCH: ๋ฆฌ์์ค์ ์ผ๋ถ๋ถ๋ง ์์
→ ๋ ๋ค ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง์ง๋ง ์๋ฏธ๋ ๋ค๋ฆ
Q6. 405 Method Not Allowed๋ ์ธ์ ๋ฐ์ํ๋์?
- ํด๋ผ์ด์ธํธ๊ฐ ์กด์ฌํ๋ URL์ ๋ํด ํ์ฉ๋์ง ์์ HTTP ๋ฉ์๋๋ก ์์ฒญํ ๋ ๋ฐ์
(ex. GET /users/1๋ง ํ์ฉ์ธ๋ฐ POST๋ก ์์ฒญํจ)
Q7. ๋ฉฑ๋ฑ์ฑ(Idempotent)๊ณผ ๊ด๋ จ๋ HTTP ๋ฉ์๋๋?
- ๋ฉฑ๋ฑ์ฑ ์์: GET, PUT, DELETE, HEAD, OPTIONS
- ๋ฉฑ๋ฑ์ฑ ์์: POST
→ ๊ฐ์ ์์ฒญ์ ์ฌ๋ฌ ๋ฒ ๋ณด๋ด๋ ๊ฒฐ๊ณผ๊ฐ ๊ฐ์์ผ ๋ฉฑ๋ฑ
Q8. 429 Too Many Requests๋ ์ธ์ ๋ฐ์ํ๋์?
- ์ฌ์ฉ์๊ฐ ๋๋ฌด ๋ง์ ์์ฒญ์ ์งง์ ์๊ฐ์ ๋ณด๋์ ๋
- ์ฃผ๋ก Rate Limit ์ ์ฉ ์ ๋ฐ์
- Retry-After ํค๋๋ฅผ ํตํด ์ฌ์๋ ์์ ๋ช ์ ๊ฐ๋ฅ
Q9. 502 Bad Gateway vs 504 Gateway Timeout ์ฐจ์ด?
- 502: ํ๋ก์ ์๋ฒ๊ฐ ๋ค์ชฝ ์๋ฒ๋ก๋ถํฐ ์๋ชป๋ ์๋ต์ ๋ฐ์
- 504: ํ๋ก์ ์๋ฒ๊ฐ ๋ค์ชฝ ์๋ฒ๋ก๋ถํฐ ์๋ต์ ๋ชป ๋ฐ๊ณ ํ์์์
Q10. OPTIONS ๋ฉ์๋๋ ์ธ์ ์ฌ์ฉํ๋์?
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ ๊ฐ๋ฅ ๋ฉ์๋์ CORS ๊ด๋ จ ์ ๋ณด๋ฅผ ๋ฏธ๋ฆฌ ์์ฒญํ ๋ ์ฌ์ฉ
- ์ฃผ๋ก ๋ธ๋ผ์ฐ์ ๊ฐ Preflight Request๋ก ์๋ ๋ณด๋
- ์๋ต์ Access-Control-Allow-* ํค๋ ํฌํจ
'๐ป CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 21279๋ฒ ๊ด๋ถ ํธ์ - Python (0) | 2025.03.29 |
---|---|
๋ก๋ ๋ฐธ๋ฐ์ (Load Balancer) (0) | 2025.03.10 |
200๋ ๊ฐ ํ๊ด์๋ จํ๋๋ PS ์ต๊ฐ์๊ฐ ๋ ๊ฑด์ ๋ํ์ฌ (0) | 2025.02.18 |
[SQL] ์๋์ฐจ ๋์ฌ ๊ธฐ๋ก์์ ๋์ฌ์ค / ๋์ฌ ๊ฐ๋ฅ ์ฌ๋ถ ๊ตฌ๋ถํ๊ธฐ (ํ๋ก๊ทธ๋๋จธ์ค/Level 3) (5) | 2025.02.11 |
0-1 Knapsack Problem ์ต์ ํ (DP ๋ฉ๋ชจ๋ฆฌ) (0) | 2025.01.04 |