[πŸ‘¨πŸ»β€πŸ”¬CS μŠ€ν„°λ”” 2μ£Όμ°¨] - λ„€νŠΈμ›Œν¬ HTTP ν”„λ‘œν† μ½œ, GET,POST

κΉ€μœ€μ€€Β·2023λ…„ 12μ›” 12일

CS μŠ€ν„°λ””

λͺ©λ‘ 보기
7/13

HTTP ν”„λ‘œν† μ½œ

"HyperText Trasfer Protocol"
μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ κ°„μ˜ ν†΅μ‹ μ—μ„œ μžμ›μ„ κ³΅μœ ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” ν”„λ‘œν† μ½œ.

λΉ„μ—°κ²°μ„±κ³Ό λ¬΄μƒνƒœμ˜ νŠΉμ„±μ„ κ°€μ§„λ‹€.

μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ„ λ°›κ³  응닡 μ‹œ ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ λ°”λ‘œ λŠλŠ”λ‹€. λ˜ν•œ ν΄λΌμ΄μ–ΈνŠΈμ˜ μ—°κ²° μƒνƒœλ₯Ό κΈ°μ–΅ν•˜μ§€ μ•ŠλŠ”λ‹€.

κΈ°μ‘΄μ—λŠ” HTML λ¬Έμ„œλ₯Ό κ΅ν™˜ν–ˆμ§€λ§Œ, μ΄μ œλŠ” λ‹€μ–‘ν•œ λ―Έλ””μ–΄ λ¦¬μ†ŒμŠ€λ₯Ό μ£Όκ³ λ°›λŠ” ν˜•νƒœλ‘œ λ°œμ „

πŸ™‹HTTP ν”„λ‘œν† μ½œμ΄ λΉ„μ—°κ²°μ„±κ³Ό λ¬΄μƒνƒœμΈ μ΄μœ λŠ”?


HTTP λ©”μ„œλ“œ μ’…λ₯˜μ™€ μ—­ν• 

HTTP λ©”μ„œλ“œ : ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­κ³Ό λͺ©μ μ„ μ•Œλ¦¬λŠ” κ·œκ²©ν™”λœ μ½”λ“œ

GET

GET 방식은 μš”μ²­ν•˜λŠ” 데이터가 HTTP Request Message의 Header 뢀뢄에 URL이 λ‹΄κ²¨μ„œ μ „μ†‘λœλ‹€.

localhost:8080/login?id=dbswns1101 => ? 뒀에 데이터가 λΆ™μ–΄ request λœλ‹€.

μœ„μ™€ 같은 μš”μ²­ ν˜•μ‹μ„ μΏΌλ“œμŠ€νŠΈλ§ ν˜•νƒœλΌκ³  ν•œλ‹€.
μΏΌλ“œμŠ€νŠΈλ§μ€ μ „μ†‘ν•˜κ³ μž ν•˜λŠ” 데이터가 URL의 ? λ‹€μŒμ— 였며 νŒŒλΌλ―Έν„°μ™€ 이름 값이 =둜 μ—°κ²°λ˜κ³ , 각 νŒŒλΌλ―Έν„°λŠ” &둜 κ΅¬λΆ„λœλ‹€.

이 방식은 λ³΄λ‚΄λŠ” 데이터가 url 곡간 ν•œμ •μ΄λΌ 데이터 크기가 μ œν•œμ .
λ˜ν•œ λ³΄μ•ˆμ΄ ν•„μš”ν•œ λ°μ΄ν„°λŠ” 데이터가 κ·ΈλŒ€λ‘œ URL에 λ…ΈμΆœλ˜λ―€λ‘œ GET 방식이 μ μ ˆν•˜μ§€ μ•Šλ‹€.

POST

POST 방식은 μš”μ²­ν•˜λŠ” 데이터가 HTTP Request Message의 Body 뢀뢄에 데이터가 λ‹΄κ²¨μ„œ μ „μ†‘λœλ‹€.

ν…μŠ€νŠΈ ν˜•νƒœμ˜ 데이터 -> application/json νƒ€μž…
λ°”μ΄λ„ˆλ¦¬ 데이터 -> mertipart/form-data νƒ€μž… //주둜 파일 μ—…λ‘œλ“œμ— μ‚¬μš©λ¨

데이터 크기가 GET 방식보닀 크고 λ³΄μ•ˆλ©΄μ—μ„œ λ‚«λ‹€. (ν•˜μ§€λ§Œ μ•”ν˜Έν™” ν•˜μ§€ μ•ŠλŠ” 이상 κ³ λ§Œκ³ λ§Œν•˜λ‹€)

이제 GET κ³Ό POSTκ°€ 어디에 μ μš©λ˜λŠ”μ§€ μ•Œμ•„λ΄μ•Ό κ·Έ 차이λ₯Ό κ·Ήλͺ…ν•˜κ²Œ 이해할 수 μžˆλ‹€.

GET과 POST의 차이점.

  • GET은 데이터λ₯Ό μ‘°νšŒν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” λ°©μ‹μœΌλ‘œ 데이터λ₯Ό 헀더 뢀뢄에 URL이 λ‹΄κ²¨μ„œ μ „μ†‘λœλ‹€
    URL에 데이터가 λ…ΈμΆœλ˜λ―€λ‘œ λ³΄μ•ˆμ μΈ μ€‘μš”ν•œ 데이터λ₯Ό ν¬ν•¨ν•΄μ„œλŠ” μ•ˆλœλ‹€.
  • GET은 κ°€μ Έμ˜€λŠ” 것. μ„œλ²„μ—μ„œ μ–΄λ–€ 데이터λ₯Ό 가져와 λ³΄μ—¬μ£Όκ±°λ‚˜ ν•˜λŠ” μš©λ„μ§€ μ„œλ²„μ˜ κ°’μ΄λ‚˜ μƒνƒœ 등을 λ³€κ²½ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • POSTλŠ” 데이터λ₯Ό μΆ”κ°€, μˆ˜μ •ν•˜κΈ° μœ„ν•΄ 데이터가 body 뢀뢄에 μΆ”κ°€λ˜μ–΄ μ „μ†‘λœλ‹€.
  • POSTλŠ” μ„œλ²„μ˜ μƒνƒœλ‚˜ 값을 λ³€κ²½ λ˜λŠ” μΆ”κ°€ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€.

λΆ€μˆ˜μ μΈ 차이

GET λ°©μ‹μ˜ μš”μ²­μ€ λΈŒλΌμš°μ €μ— μ˜ν•΄ 캐싱될 수 μžˆλ‹€.

예λ₯Όλ“€λ©΄ localhost:8080/posts-all
둜 전체 κ²Œμ‹œκΈ€μ„ μ‘°νšŒν•˜λŠ” μš”μ²­μ„ ν•˜λ©΄ ν•΄λ‹Ή 응닡은 λΈŒλΌμš°μ €μ— μ˜ν•΄ μΊμ‹±λœλ‹€.
λ”°λΌμ„œ λ‹€μ‹œ μ„œλ²„μ— μš”μ²­ μ‹œ μ„œλ²„μ— μž¬μš”μ²­ ν•˜μ§€μ•Šκ³  μΊμ‹œλœ 데이터λ₯Ό μ‘°νšŒν•  수 μžˆλ‹€.
λ”°λΌμ„œ 데이터 크기가 μž‘κ³  λ³΄μ•ˆ λ¬Έμ œκ°€ μ—†λ‹€λŠ” 이유둜 POST λ°©μ‹μœΌλ‘œ μš”μ²­ν•  것을 GET λ°©μ‹μœΌλ‘œ μš”μ²­ν•˜λ©΄ 기쑴에 μΊμ‹±λœ 데이터가 응닡될 κ°€λŠ₯성이 μžˆλ‹€.

λ”°λΌμ„œ λͺ©μ μ— λ§žλŠ” κΈ°μˆ μ„ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” 것이닀.

좔가적인 HTTP μš”μ²­ λ©”μ†Œλ“œ μ’…λ₯˜

  • PUT: 데이터 λ³€κ²½(ν•΄λ‹Ή 데이터가 μ—†μœΌλ©΄ 생성)
  • PATCH : 일뢀 λ°μ΄ν„°λ§Œ λ³€κ²½
  • DELETE : 데이터 μ‚­μ œ

λ©±λ“±μ„±(Idempotence)μ΄λž€?

λ©±λ“±μ„±μ΄λž€ μ—¬λŸ¬λ²ˆ μˆ˜ν–‰ν•΄λ„ κ²°κ³Όκ°€ κ°™μŒμ„ μ˜λ―Έν•œλ‹€.
HTTP λ©”μ†Œλ“œμ—μ„œ GET PUT DELETEλŠ” 같은 경둜둜 μ—¬λŸ¬ 번 ν˜ΈμΆœν•΄λ„ κ²°κ³Όκ°€ κ°™λ‹€.

POSTλŠ” λ§€ ν˜ΈμΆœλ§ˆλ‹€ μƒˆλ‘œμš΄ λ¦¬μ†ŒμŠ€λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ¨.
같은 POST μš”μ²­μ„ μ—¬λŸ¬ 번 보내면, μ„œλ²„λŠ” 각각 μš”μ²­μ— λŒ€μ‘ν•˜λŠ” μƒˆλ‘œμš΄ λ¦¬μ†ŒμŠ€κ°€ μ—¬λŸ¬ 개 μƒμ„±λœλ‹€. λ”°λΌμ„œ POSTλŠ” λΉ„λ©±λ“±ν•œ νŠΉμ„±μ„ 가짐.

ex) κ²Œμ‹œλ¬Ό μƒμ„±ν•˜λŠ” POST μ—¬λŸ¬ 번 보내면, λ™μΌν•œ λ‚΄μš©μ˜ κ²Œμ‹œλ¬Όμ΄ μ—¬λŸ¬ 개 생성될 수 μžˆλ‹€

반면, PUT은 νŠΉμ • μ‚¬μš©μžμ˜ 정보λ₯Ό μ—…λ°μ΄νŠΈ ν•œλ‹€λ©΄. ν•΄λ‹Ή μ‚¬μš©μžμ˜ 데이터λ₯Ό μƒˆλ‘œμš΄ λ°μ΄ν„°λ‘œ λŒ€μ²΄ν•œλ‹€.
같은 λ°μ΄ν„°λ‘œ PUT μš”μ²­μ„ μ—¬λŸ¬ 번 ν•˜λ”λΌλ„, μ‚¬μš©μžμ˜ μ •λ³΄λŠ” 첫 번째 μš”μ²­ 이후 λ³€ν•˜μ§€ μ•ŠλŠ”λ‹€.

πŸ’‘PUT vs PATCH

PATCH, PUT λ‘˜λ‹€ 데이터 μˆ˜μ •μ„ μœ„ν•œ method이닀.

두가지 차이점은

예λ₯Ό λ“€μ–΄, PUT μš”μ²­ μ‹œ μš”μ²­ μΌλΆ€λΆ„λ§Œ 보낸 경우 λ‚˜λ¨Έμ§€λŠ” defaultκ°’μœΌλ‘œ μˆ˜μ •λ˜λŠ”κ²Œ 원칙이닀. λ”°λΌμ„œ λ°”λ€Œμ§€ μ•ŠλŠ” 속성도 λͺ¨λ‘ 보내야함.

κ·ΈλŸ¬λ‚˜ PATCHλ₯Ό μ΄μš©ν•˜μ—¬ μΌλΆ€λΆ„λ§Œ 보낸 경우.
μƒˆλ‘­κ²Œ 바뀐 λΆ€λΆ„λ§Œ 반영되며 λ‚˜λ¨Έμ§€λŠ” 기쑴의 데이터가 μœ μ§€λœλ‹€.

λ”°λΌμ„œ, μžμ›μ˜ 일뢀λ₯Ό μˆ˜μ •ν• λ•ŒλŠ” PATCHλ₯Ό 전체적인 μˆ˜μ •μ΄ ν•„μš”ν•  λ•ŒλŠ” PUT을 μ΄μš©ν•˜λŠ” 것이 μ μ ˆν•˜λ‹€.

0개의 λŒ“κΈ€