HTTP λ©μλ
- HTTP νλ‘ν μ½μμ μ¬μ©λλ μμ² λ©μλλ‘, μμμ λν΄ μλ²κ° μνν λμμ μ§μ ν©λλ€.
- μ΄ 9κ°μ§κ° μμΌλ©° REST APIλ₯Ό μ€κ³ν λ μ£Όλ‘ μ¬μ©λλ λ©μλλ 5κ°μ§μ λλ€.
μ£Όμ λ©μλ 5κ°μ§
- GET : μλ²λ‘λΆν° μμμ μμ²νλ λμ
- POST : μλ²λ‘ λ°μ΄ν°λ₯Ό μ μ‘νμ¬ μμμ μμ±νκ±°λ μ λ°μ΄νΈ νλ λμ
- PUT : μλ²μ μμμ μμ±νκ±°λ κΈ°μ‘΄ μμμ λ체νλ λμ
- PATCH : μλ² μμμ μΌλΆλ§ μμ νλ λμ
- DELETE : μλ²μμ μμμ μμ νλ λμ
GET vs POST
1. GET
- λͺ©μ
- μλ²λ‘λΆν° μμμ μμ²νλ λμ
- λ°μ΄ν° μ μ‘ λ°©μ
- μμ² λ³Έλ¬Έμ μ¬μ©νμ§ μκ³ , μμ² URIμ Path Variable μ΄λ Query String μ μ¬μ©ν κ²μ κΆμ₯ν©λλ€.
- 보μ
- λ°μ΄ν°κ° URLμ ν¬ν¨λλ―λ‘ URLμ΄ μλ² μΈ‘ μ μ λ‘κ·Έλ λΈλΌμ°μ νμ€ν 리μ μ μ₯λ μ μμ΅λλ€. μ΄λ‘ μΈν΄ λ―Όκ° λ°μ΄ν°κ° λ ΈμΆλ κ°λ₯μ±μ΄ μμ΅λλ€.
- ν΄κ²° λ°©λ²
- POST μμ² λ³Έλ¬Έμ λ°μ΄ν° λ΄κΈ°
- HTTPSλ‘ μμ²νμ¬ μ μ‘ κ΅¬κ° μνΈννκΈ°(BUT λ‘κ·Έλ λΈλΌμ°μ νμ€ν 리μ λ¨λ λ¬Έμ λ ν΄κ²°λμ§ μμ!)
- μ μ΄μ λ―Όκ°ν μ 보(μ¬μ©μ μΈμ¦ ν ν°, κ°μΈ μ 보, λΉλ°λ²νΈ λ±)κ° URL Query Stringμ λ€μ΄κ°μ§ μλλ‘ μ€κ³νκΈ°
- ν΄λΌμ΄μΈνΈμμ Query String μνΈν ν GET μμ² -> μλ²μμ 볡νΈν ν λ°μ΄ν° μ²λ¦¬
- λ°μ΄ν° κΈΈμ΄ μ ν O
- μΉ λΈλΌμ°μ μ μλ²λ§λ€ λ€λ₯΄μ§λ§ URLμ κΈΈμ΄ μ νμ΄ μμ΅λλ€.
- μΊμ± O
- GET μμ²μ μλ΅μ μΊμ± κ°λ₯ν©λλ€.
- μΉ λΈλΌμ°μ κ° μλ²λ‘λΆν° λ°μ GET μμ²μ μλ΅μ λ‘컬 μΊμμ μ μ₯νκ³ , λμΌ μμ²μ΄ μμ λ μλ²μ λ€μ μμ²νμ§ μκ³ μΊμμ μ μ₯λ μλ΅μ μ¬μ©ν μ μμ΅λλ€.
- λ©±λ±μ± O
- λ©±λ±μ±μ΄ 보μ₯λ©λλ€. μ¦, λμΌ μμ²μ ν λ² λ³΄λ΄λ κ²κ³Ό μ¬λ¬ λ² μ°μ 보λ΄λ κ²μ΄ κ°μ ν¨κ³Όλ₯Ό μ§λλλ€.
2. POST
- λͺ©μ
- μλ²λ‘ λ°μ΄ν°λ₯Ό μ μ‘νμ¬ μμμ μμ±νκ±°λ μ λ°μ΄νΈ νλ λμ
- λ°μ΄ν° μ μ‘ λ°©μ
- μμ² λ³Έλ¬Έ(body)μ λ°μ΄ν°λ₯Ό ν¬ν¨ν©λλ€.
- 보μ
- λ°μ΄ν°κ° URLμ ν¬ν¨λμ§ μμΌλ―λ‘ GET μμ²μ λΉν΄ μλμ μΌλ‘ μμ ν©λλ€.
- κ·Έλλ λ°μ΄ν° μνΈν νλ €λ©΄ HTTPS λ₯Ό μ¨μΌ ν©λλ€. (e.g. Nginx client_max_body_size λ±)
- λ°μ΄ν° κΈΈμ΄ μ ν O
- POST μμ² λ³Έλ¬Έμ λ°μ΄ν° κΈΈμ΄ μ νμ GET 보λ€λ μλμ μΌλ‘ ν¬μ§λ§, μ λμ μΌλ‘ κΈΈμ΄ μ νμ΄ μλ κ²μ μλλλ€.
- μΉ μλ²λ μλ² μ ν리μΌμ΄μ μΈ‘μμ μμ² λ³Έλ¬Έ ν¬κΈ°μ λν μ€μ μ ν΄μ€ μ μμ΅λλ€.
- (μ°Έκ³ ) μλ²λ₯Ό λ»κ² νλ μμΈμ΄ λ μ μμΌλ―λ‘ λμ©λ λ°μ΄ν° μ²λ¦¬λ λ³λλ‘ λΆλ¦¬νλ κ² μ’λ€κ³ ν©λλ€. [μ°Έκ³ 1] [μ°Έκ³ 2]
- μΊμ± X
- POST μμ²μ μλ΅μ κΈ°λ³Έμ μΌλ‘ μΊμλμ§ μμ΅λλ€. [μ°Έκ³ - RFC 7231]
- λ©±λ±μ±μ΄ 보μ₯λμ§ μκΈ° λλ¬Έμ λλ€.
- POST μμ² λ³Έλ¬Έμλ λ―Όκ° λ°μ΄ν°κ° ν¬ν¨λ μ μμΌλ―λ‘ μΊμ±νλ©΄ 보μ μνμ΄ μμ΅λλ€.
- λμ©λ λ°μ΄ν°κ° μ μ‘λ μ μκΈ° λλ¬Έμ μΊμ±μ΄ λ©λͺ¨λ¦¬ μ±λ₯μ μ΄μ μ μ£Όμ§ μμ΅λλ€.
- POST μμ²μ μλ΅μ κΈ°λ³Έμ μΌλ‘ μΊμλμ§ μμ΅λλ€. [μ°Έκ³ - RFC 7231]
- λ©±λ±μ± X
- λ©±λ±μ±μ΄ 보μ₯λμ§ μμ΅λλ€. μ¦, λμΌ μμ²μ ν λ² λ³΄λ΄λ κ²κ³Ό μ¬λ¬ λ² μ°μ 보λ΄λ κ²μ΄ λ€λ₯Έ ν¨κ³Όλ₯Ό μ§λ μ μμ΅λλ€.
3. GET vs POST μ°¨μ΄μ μ 리
GET | POST | |
λͺ©μ | μμ μμ² | μμ μμ± / μ λ°μ΄νΈ |
λ°μ΄ν° μ μ‘ λ°©μ | URI Query String / Path Variable | μμ² λ³Έλ¬Έ |
보μ | URLμ λ―Όκ° λ°μ΄ν°κ° λλ¬λ μ μμ | URLμ λ―Όκ° λ°μ΄ν°κ° λλ¬λμ§ μμ GET 보λ€λ μλμ μΌλ‘ μμ ν¨ |
λ°μ΄ν° κΈΈμ΄ μ ν | β | β |
μΊμ± | β | β |
λ©±λ±μ± | β | β |
PUT vs PATCH vs DELETE
1. PUT
- λͺ©μ
- μλ²μ μμμ μμ±νκ±°λ κΈ°μ‘΄ μμμ λ체νλ λμ
- λ°μ΄ν° μ μ‘ λ°©μ
- μ§μ λ URIμ μμμ μμ ν©λλ€.(Path Variable)
- μμ² λ³Έλ¬Έμ μμμ μ 체 λ°μ΄ν°λ₯Ό ν¬ν¨νμ¬ μ μ‘ν©λλ€.
- 보μ
- μμ μ 체μ λν κΆν κ²μ¦μ΄ νμν©λλ€.
- μΊμ± X
- PUT μμ²μ μλ΅μ κΈ°λ³Έμ μΌλ‘ μΊμ±λμ§ μμ΅λλ€.
- λ©±λ±μ± O
- PUT μμ²μ λ©±λ±μ±μ 보μ₯ν©λλ€. λμΌν μμ²μ μ¬λ¬ λ² λ³΄λ΄λ κ²°κ³Όλ λμΌν©λλ€.
2. PATCH
- λͺ©μ
- μλ² μμμ μΌλΆλ§ μμ νλ λμ
- λ°μ΄ν° μ μ‘ λ°©μ
- μ§μ λ URIμ μμμ μμ ν©λλ€.(Path Variable)
- μμ² λ³Έλ¬Έμλ μμ ν λ°μ΄ν°μ μΌλΆλ§ ν¬ν¨ν©λλ€.
- 보μ
- μμ μ 체, μμ ν νλμ λν κΆν κ²μ¦μ΄ νμν©λλ€.
- μΊμ± X
- PATCH μμ²μ μλ΅μ κΈ°λ³Έμ μΌλ‘ μΊμ±λμ§ μμ΅λλ€.
- λ©±λ±μ± X
- PATCH μμ²μ λ©±λ±μ±μ 보μ₯νμ§ μμ΅λλ€.
- νμ§λ§ PUTκ³Ό κ°μ λ°©μμΌλ‘ μ¬μ©νλ€λ©΄(μμ μ 체 λ체) λ©±λ±μ±μ κ°μ§κ² ν μλ μμ΅λλ€.
3. DELETE
- λͺ©μ
- μλ²μμ μμμ μμ νλ λμ
- λ°μ΄ν° μ μ‘ λ°©μ
- μ§μ λ URIμ μμμ μμ ν©λλ€.(Path Variable)
- μμ² λ³Έλ¬Έμ νμνμ§ μμ΅λλ€.
- 보μ
- μμμ λν κΆν κ²μ¦μ΄ νμν©λλ€.
- μΊμ± X
- DELETE μμ²μ μλ΅μ κΈ°λ³Έμ μΌλ‘ μΊμ±λμ§ μμ΅λλ€.
- λ©±λ±μ± O
- DELETE μμ²μ λ©±λ±μ±μ 보μ₯ν©λλ€. μμμ΄ μμ λλ©΄ μ¬λ¬ λ² μμ²μ 보λ΄λ κ²°κ³Όλ κ°μ΅λλ€.
4. PUT vs PATCH vs DELETE μ°¨μ΄μ μ 리
PUT | PATCH | DELETE | |
λͺ©μ | μμ μμ± / μ 체 λ체 | μμ μΌλΆ μμ | μμ μμ |
λ°μ΄ν° μ μ‘ λ°©μ | URI Path Variable, μμ² λ³Έλ¬Έ | URI Path Variable, μμ² λ³Έλ¬Έ | URI Path Variable |
보μ | κΆν κ²μ¦ νμ | κΆν κ²μ¦ νμ | κΆν κ²μ¦ νμ |
μΊμ± | β | β | β |
λ©±λ±μ± | β | β | β |
5. POST vs PUT μ°¨μ΄μ μ 리
POST | PUT | |
λͺ©μ | μμ μμ± / μ λ°μ΄νΈ | μμ μμ± / μ 체 λ체 |
λ°μ΄ν° μ μ‘ λ°©μ | μμ² λ³Έλ¬Έ | URI Path Variable, μμ² λ³Έλ¬Έ |
λ©±λ±μ± | β | β |
- POSTκ³Ό PUT μμ² λ λ€ μμμ μμ±ν μλ, μ λ°μ΄νΈ ν μλ μμ΅λλ€.
- κ°μ₯ ν° μ°¨μ΄μ μ λ©±λ±μ± 보μ₯ μ¬λΆλΌκ³ λ³Ό μ μλλ°μ.
- POSTλ λ©±λ±μ±μ 보μ₯νμ§ μμ΅λλ€. μλ²κ° μμμ URIλ₯Ό κ²°μ νκΈ° λλ¬Έμ POSTλ μμμ μμ±ν λ μ¬μ©νλ κ² μ’κ³ , μμ μΌλΆ μ λ°μ΄νΈμλ μλ―Έμ PATCHκ° μ’ λ μ ν©ν μ μμ΅λλ€.
- PUTμ λ©±λ±μ±μ 보μ₯ν©λλ€. μμμ URIλ₯Ό ν¬ν¨ν΄μ μμ²μ λ³΄λΌ μ μκ³ , μμ μ 체 μ λ°μ΄νΈμ κ²½μ° PUTμ΄ λ μ ν©νλ€κ³ λ³Ό μ μκ² μ΅λλ€.
λλ¨Έμ§ λ©μλ 4κ°μ§
- HEAD
- GETκ³Ό λμΌνμ§λ§, μλ΅ λ³Έλ¬Έμ ν¬ν¨νμ§ μμ΅λλ€. μλ²λ μμ²λ μμμ ν€λλ§ λ°νν©λλ€.
- μμμ λ€μ΄λ‘λνμ§ μκ³ μμμ λ©νλ°μ΄ν°λ μ‘΄μ¬ μ¬λΆλ₯Ό μ κ²νλ λ° μ¬μ©ν μ μμ΅λλ€.
- λν ν΄λΌμ΄μΈνΈκ° μΊμ±μ μ¬μ©νλ κ²½μ° HEAD μμ²μ ν΅ν΄ μλ΅μ Last-Modified ν€λλ ETag ν€λλ₯Ό κ²μ¬ν΄ λ‘컬μ μΊμλ λ²μ μ΄ μ΅μ μΈμ§ νμΈν μ μμ΅λλ€. [μ°Έκ³ ]
- CONNECT
- ν΄λΌμ΄μΈνΈμ μλ² κ°μ ν°λ μ€μ λμ
- ν΄λΌμ΄μΈνΈκ° HTTPS μμ²μ νλ‘μ μλ²λ₯Ό ν΅ν΄ λͺ©μ μ§ μλ²λ‘ 보λ΄λ €ν λ CONNECT λ©μλλ₯Ό μ¬μ©νμ¬ νλ‘μ μλ²μ ν°λμ μ€μ ν©λλ€. νλ‘μ μλ²λ μ΄ μμ²μ λ°μμ λͺ©μ μ§ μλ²μμ TCP μ°κ²°μ μ€μ νκ³ , μ΄ μ°κ²°μ ν΄λΌμ΄μΈνΈμ νλ‘μ μλ² μ¬μ΄μ ν°λλ§ν©λλ€.
- OPTIONS
- μλ²μμ μ§μνλ λ©μλ μ΅μ μ μμ²νλ λμ
- μλ²κ° νΉμ μμμ λν΄ μ΄λ€ HTTP λ©μλλ₯Ό μ§μνλμ§ νμΈν μ μμ΅λλ€.
- λν, CORS(Cross-Origin Resource Sharing) μ μ± μ νμΈνλ λ°μλ μ¬μ©λ©λλ€. ν΄λΌμ΄μΈνΈ(= μΉ λΈλΌμ°μ )κ° λ€λ₯Έ λλ©μΈμ μμμ μ κ·Όνλ €κ³ ν λ, Preflight μμ²μΌλ‘ OPTIONS μμ²μ λ³΄λ΄ μλ²κ° νμ©νλ λ©μλμ ν€λλ₯Ό νμΈν©λλ€. [μ°Έκ³ ]
- TRACE
- μμ²μ λ°λΌ κ²½λ‘ μΆμ νμ¬ μ΅μ’ μΉ μλ²λ‘ κ°λ λ€νΈμν¬ κ²½λ‘λ₯Ό 체ν¬νλ λμ
- TRACE λ©μλλ₯Ό μ¬μ©ν΄ XST(Cross-Site Tracing) 곡격μ ν μ μμΌλ―λ‘, μλ²μμλ TRACE λ©μλλ₯Ό νμ©νμ§ μλλ‘ μ€μ ν©λλ€. [μ°Έκ³ ]
- λ°λΌμ μ£Όλ‘ λ€νΈμν¬ λ¬Έμ μ§λ¨μ μν΄ λλ²κΉ μ©λλ‘ μ¬μ©λ©λλ€.
μ°Έκ³
- https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-HTTP-%EB%A9%94%EC%84%9C%EB%93%9C-%EC%A2%85%EB%A5%98-%ED%86%B5%EC%8B%A0-%EA%B3%BC%EC%A0%95-%F0%9F%92%AF-%EC%B4%9D%EC%A0%95%EB%A6%AC
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
- https://okky.kr/questions/437467
- https://2jinishappy.tistory.com/314
- https://okky.kr/questions/307144
- https://medium.com/@shiny.shubham/caching-post-requests-a8401c1e2e41
- https://www.inflearn.com/community/questions/1182007/patch%EC%99%80-put%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90