๋„คํŠธ์›Œํฌ๐ŸŒŽ

HTTP์˜ GET๊ณผ POST, ์ฐจ์ด๋Š”?

Jeein0313 2023. 6. 30. 20:58

GET๊ณผ POST ๋ชจ๋‘ ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•ด์„œ ์„œ๋ฒ„์— ๋ฌด์—‡์ธ๊ฐ€๋ฅผ ์š”์ฒญํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. 

 

๊ทธ๋ ‡๋‹ค๋ฉด GET๊ณผ POST ๊ฐ๊ฐ์€ ์–ด๋–ค ์ƒํ™ฉ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ• ๊นŒ?

 

๐Ÿ‘‰ GET ๋ฐฉ์‹

GET ๋ฉ”์„œ๋“œ๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ์ •๋ณด๋ฅผ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์„œ๋“œ๋กœ, ์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฑฐ๋‚˜(Read) ๊ฒ€์ƒ‰(Retrieve)ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

GET์€ ์š”์ฒญ์„ ์ „์†กํ•  ๋•Œ URL ์ฃผ์†Œ ๋์— ๋ฐ์ดํ„ฐ๊ฐ€ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ํฌํ•จ๋˜์–ด ์ „์†ก๋˜๋ฉฐ, ์ด ๋ถ€๋ถ„์„ QueryString์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

localhost:8080/members?page=1&size=10

 

์œ„ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด ํŒŒ๋ผ๋ฏธํ„ฐ์ธ page๊ณผ size๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ์ „๋‹ฌ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. (๋งŒ์•ฝ, ์š”์ฒญ ํŒŒ๋ผํ‚คํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๊ฒฝ์šฐ &๋กœ ์—ฐ๊ฒฐ)

์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ๋ฐ์ดํ„ฐ๊ฐ€ url์— ๋‹ด๊ฒจ๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ œํ•œ์ ์ด๋‹ค.

๋˜ ๋ณด์•ˆ์ด ํ•„์š”ํ•œ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ๊ฐ€ url์— ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์— GET ๋ฐฉ์‹์€ ์ ์ ˆํ•˜์ง€ ์•Š๋‹ค.

๋˜, GET ์š”์ฒญ์€ ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ก์— ๋‚จ์œผ๋ฉฐ, indempotentํ•˜๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.

 

 

๐Ÿ‘‰ POST ๋ฐฉ์‹

POST ๋ฉ”์„œ๋“œ๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑ/์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์„œ๋“œ๋กœ, GET๊ณผ ๋‹ฌ๋ฆฌ ์ „์†กํ•  ๋ฐ์ดํ„ฐ๋ฅผ HTTP ๋ฉ”์„œ๋“œ์˜ Body์— ๋‹ด์•„์„œ ์ „์†กํ•œ๋‹ค. (Body์˜ ํƒ€์ž…์€ ์š”์ฒญ ํ—ค๋”์˜ Content-Type์— ์š”์ฒญ ๋ฐ์ดํ„ฐ ํƒ€์ž… ํ‘œ์‹œ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋œ๋‹ค.)

 

Content-Type : application/json

Content-Type : application/javascript

Content-Type : application/xml

Content-Type : text/html

Content-Type : text/plain

 

HTTP ๋ฉ”์‹œ์ง€์˜ Body์—๋Š” ๊ธธ์ด ์ œํ•œ ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋”ฐ๋ผ์„œ POST ์š”์ฒญ์€ GET๊ณผ ๋‹ฌ๋ฆฌ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.

 

GET๋ณด๋‹ค POST ์š”์ฒญ์ด ๋ณด์•ˆ์ ์œผ๋กœ ์•ˆ์ „ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, POST ์š”์ฒญ๋„ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ, Fiddler์™€ ๊ฐ™์€ ํˆด๋กœ ์š”์ฒญ ๋‚ด์šฉ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ, ๋ฐ˜๋“œ์‹œ ์•”ํ˜ธํ™”ํ•ด ์ „์†กํ•ด์•ผ ํ•œ๋‹ค.

 

POST ์š”์ฒญ์€ ์บ์‹œ๋˜์ง€ ์•Š์œผ๋ฉฐ, ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ก์— ๋‚จ์•„ ์žˆ์ง€ ์•Š๋Š”๋‹ค. POST ์š”์ฒญ ์ค‘ ์ž์› ์ƒ์„ฑ์€ 201 (Created) HTTP ์‘๋‹ต ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. idempotentํ•˜์ง€ ์•Š๋‹ค.

 

 

โœ… GET vs POST

  GET POST
์–ธ์ œ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ๊ฐ€? ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ (์ฝ๊ธฐ, ๊ฒ€์ƒ‰) ๋ฐ์ดํ„ฐ ์ƒ์„ฑ, ๋ณ€๊ฒฝํ•  ๋•Œ
๋ธŒ๋ผ์šฐ์ €์— ์บ์‹œ ์—ฌ๋ถ€ ์บ์‹ฑ ๊ฐ€๋Šฅ ์บ์‹ฑ ๋ถˆ๊ฐ€
๋ถ๋งˆํฌ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ ๋ถˆ๊ฐ€๋Šฅ
๋ฐ์ดํ„ฐ ๊ธธ์ด ์ œํ•œ ์žˆ์Œ ์—†์Œ
HTTP ์‘๋‹ต ์ฝ”๋“œ 200(OK) 201(Created)
๋ฆฌ์†Œ์Šค ์ „๋‹ฌ ๋ฐฉ์‹ ์ฟผ๋ฆฌ์ŠคํŠธ๋ง HTTP Body
idempotent YES NO

 

 

๐Ÿ–๏ธ idempotent๋ž€? 

๋ฉฑ๋“ฑ์„ฑ์ด๋ผ๋Š” ๋œป์œผ๋กœ ์—ฐ์‚ฐ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ ์šฉํ•˜๋”๋ผ๋„ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€์ง€ ์•Š๋Š” ์„ฑ์งˆ์„ ์˜๋ฏธํ•œ๋‹ค.

 

์ฆ‰, GET์ด idempotentํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์€ GET์œผ๋กœ ์„œ๋ฒ„์—์„œ ๋™์ผํ•œ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ „์†กํ•ด๋„ ๋™์ผํ•œ ์‘๋‹ต์ด ๋Œ์•„์™€์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

๋”ฐ๋ผ์„œ GET์€ ์„ค๊ณ„ ์›์น™์— ๋”ฐ๋ผ ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๋‚˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ค์ง€ ์•Š์•„์•ผ idempotentํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ๋กœ ์กฐํšŒ๋ฅผ ํ•  ๋•Œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

๋ฐ˜๋Œ€๋กœ, POST๋Š” Non-idempotentํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์—๊ฒŒ ๋™์ผํ•œ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ „์†กํ•ด๋„ ์‘๋‹ต์€ ํ•ญ์ƒ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.

 

์ด์— ๋”ฐ๋ผ POST๋Š” ์„œ๋ฒ„์˜ ์ƒํƒœ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ฌ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

 

 

 

 

์ฐธ๊ณ )

https://whales.tistory.com/120

https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Network