๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

@PathVariable, @RequestParam

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2024. 2. 18.

@PathVariable, @RequestParam์˜ ์‚ฌ์šฉ

 

์ด ๋ฒˆ ์ฃผ์— ๋ฐฑ์•ค๋“œ ์‹œํ—˜์—์„œ ๋”ฑ ํ•˜๋‚˜ ๋ชป ํ‘ผ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋”ฐ. ๋ฐ”๋กœ @PathVairable, @RequestParam์˜ ์‚ฌ์šฉ์ด์—ˆ๋‹ค.

 

 

REST API ์—์„œ URI ๊ทœ์น™์ด ์žˆ๋Š”๋ฐ, ํŠน์ • id๋กœ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด์„œ๋Š” @PathVariable๋ฅผ ์ด์šฉํ•ด์„œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค.

 

ํ•˜์ง€๋งŒ,  ์•„์ด๋”” ๋ง๊ณ  ํŠน์ • ์ด๋ฆ„ ๋“ฑ์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฟผ๋ฆฌ๋ฌธ ์ž‘์„ฑ์„ ํ•ด์„œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์•ผํ•˜๋Š”๋ฐ

์ด ๋•Œ @RequestParam์„ ์ด์šฉํ•˜๋ฉฐ, ์ฝ”๋“œ๋ฅผ 

 

  

์ด๋ ‡๊ฒŒ ์ž‘์„ฑ์„ ํ•œ ๋’ค, ์ฟผ๋ฆฌ๋ฌธ์„ ํ†ตํ•ด 

 

?firstNAme=??&lastNAme=?? ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜์—ฌ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ถˆ๋Ÿฌ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

 

๊ทธ๋Ÿฌ๋ฉด ์˜๋ฌธ์ด ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์™œ? id๊ฐ™์€ ๊ฒฝ์šฐ๋Š” @PathVariable๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, @RequestParam๊ณผ ๊ตฌ๋ณ„์ง€์€ ์ด์œ ๊ฐ€ ๋ญ”๊ฐ€??

 

๊ทธ๋ž˜์„œ chat GPT๋ฅผ ์ฐธ๊ณ  ํ•ด ๋ณด์•˜๋‹ค.

 

<<CHAT GPT>>

1.

 ์ผ๋ฐ˜์ ์œผ๋กœ REST API๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ๋ฆฌ์†Œ์Šค์˜ ๊ณ ์œ  ์‹๋ณ„์ž(ID) ๊ฐ™์€ ํ•ต์‹ฌ ์ •๋ณด๋Š” ๊ฒฝ๋กœ ๋ณ€์ˆ˜(Path Variable)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„ํ•˜๊ณ , ์„ ํƒ์ ์ธ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ(์˜ˆ: ๊ฒ€์ƒ‰, ํ•„ํ„ฐ, ์ •๋ ฌ ๋“ฑ)๋Š” ์š”์ฒญ ๋งค๊ฐœ๋ณ€์ˆ˜(RequestParam)๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฐฉ์‹์€ API์˜ ๊ฐ€๋…์„ฑ๊ณผ ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๋ฉฐ, ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

Path Variable (๊ฒฝ๋กœ ๋ณ€์ˆ˜)

  • ์ •์˜: URL์˜ ์ผ๋ถ€๋กœ ์ž์›์„ ์ง์ ‘ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฒฝ๋กœ ๋ณ€์ˆ˜๋Š” ์ฃผ๋กœ ๋ฆฌ์†Œ์Šค์˜ ๊ณ ์œ  ์‹๋ณ„์ž(ID)๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ ์˜ˆ: /users/{userId} ์—ฌ๊ธฐ์„œ {userId}๋Š” ํŠน์ • ์‚ฌ์šฉ์ž์˜ ๊ณ ์œ  ์‹๋ณ„์ž(ID)๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒฝ๋กœ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ๋ชฉ์ : ๋ฆฌ์†Œ์Šค์˜ ๊ตฌ์ฒด์ ์ธ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๊ฑฐ๋‚˜, ํŠน์ • ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Request Param (์š”์ฒญ ๋งค๊ฐœ๋ณ€์ˆ˜)

  • ์ •์˜: URL์˜ ๋์— ? ๋’ค์— ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ์ถ”๊ฐ€๋˜๋Š” ์„ ํƒ์ ์ธ ํŒŒ๋ผ๋ฏธํ„ฐ์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ ๊ฒ€์ƒ‰, ํ•„ํ„ฐ๋ง, ์ •๋ ฌ ๋“ฑ์˜ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ ์˜ˆ: /users?name=JohnDoe ์—ฌ๊ธฐ์„œ name=JohnDoe๋Š” ์š”์ฒญ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ name์ด JohnDoe์ธ ์‚ฌ์šฉ์ž๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
  • ๋ชฉ์ : ๋ฆฌ์†Œ์Šค์˜ ์ง‘ํ•ฉ์—์„œ ํŠน์ • ์กฐ๊ฑด์— ๋งž๋Š” ํ•ญ๋ชฉ์„ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ํ•„ํ„ฐ๋งํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์š”์•ฝ

  • Path Variable ์‚ฌ์šฉ ์‚ฌ๋ก€: ๋ฆฌ์†Œ์Šค์˜ ๊ณ ์œ  ์‹๋ณ„์ž์™€ ๊ฐ™์ด, API์˜ ๊ฒฝ๋กœ ๋ถ€๋ถ„์— ์ง์ ‘ ํฌํ•จ๋˜์–ด ๋ฆฌ์†Œ์Šค๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์‹๋ณ„ํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ์ด๋‚˜ ํŠน์ • ๋ฆฌ์†Œ์Šค์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์š”์ฒญํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  • Request Param ์‚ฌ์šฉ ์‚ฌ๋ก€: ์„ ํƒ์ ์ธ ์ฟผ๋ฆฌ, ํ•„ํ„ฐ, ํŽ˜์ด์ง€๋„ค์ด์…˜, ์ •๋ ฌ ์กฐ๊ฑด๊ณผ ๊ฐ™์ด, ๋ฆฌ์†Œ์Šค ์ง‘ํ•ฉ์—์„œ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ์กฐํšŒ ์กฐ๊ฑด์„ ์ œ๊ณตํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ตฌ๋ถ„์€ REST API๋ฅผ ๋”์šฑ ๋ช…ํ™•ํ•˜๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

 

2.

 ์š”์ฒญ ๋งค๊ฐœ๋ณ€์ˆ˜(Request Params)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API ์š”์ฒญ์„ ํ•  ๋•Œ, ์ฃผ์–ด์ง„ ์กฐ๊ฑด(์˜ˆ: ํ•„ํ„ฐ, ๊ฒ€์ƒ‰ ์กฐ๊ฑด)์— ๋งž๋Š” ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํŠนํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ ์œ ์šฉํ•˜๋ฉฐ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”๊ตฌํ•˜๋Š” ํŠน์ • ์กฐ๊ฑด์ด๋‚˜ ๋ฒ”์œ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ

์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” API๊ฐ€ ์žˆ๊ณ , ํŠน์ • ์‚ฌ์šฉ์ž ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ ์ž ํ•  ๋•Œ ์š”์ฒญ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ /users?name=John๊ณผ ๊ฐ™์€ ์š”์ฒญ์„ ํ•œ๋‹ค๋ฉด, ์ด๋ฆ„์ด 'John'์ธ ๋ชจ๋“  ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์š”์ฒญ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€

  • ํ•„ํ„ฐ๋ง: ํŠน์ • ๊ธฐ์ค€์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๋ฅผ ํ•„ํ„ฐ๋งํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: /products?category=books
  • ๊ฒ€์ƒ‰: ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฒ€์ƒ‰์–ด์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: /search?query=rest+api
  • ์ •๋ ฌ: ๊ฒฐ๊ณผ๋ฅผ ํŠน์ • ์ˆœ์„œ๋กœ ์ •๋ ฌํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: /items?sort=price_asc
  • ํŽ˜์ด์ง€๋„ค์ด์…˜: ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ ์ค‘ ์ผ๋ถ€๋ถ„๋งŒ์„ ์กฐํšŒํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: /posts?page=2&limit=10

๊ฒฐ๊ณผ์˜ ๋ฒ”์œ„

์š”์ฒญ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์š”์ฒญ์„ ํ•˜๋ฉด, ์„œ๋ฒ„๋Š” ํ•ด๋‹น ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์กฐํšŒํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ, ์„œ๋ฒ„ ์ธก์—์„œ ์„ค์ •ํ•œ ๊ธฐ๋ณธ๊ฐ’์ด๋‚˜ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ง€์ •ํ•œ ์กฐ๊ฑด(์˜ˆ: ํ•œ ํŽ˜์ด์ง€๋‹น ๊ฒฐ๊ณผ ์ˆ˜)์— ๋”ฐ๋ผ ๋ฐ˜ํ™˜๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

์š”์ฒญ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” API๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์กฐํšŒํ•˜๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ์ˆ˜๋‹จ์ž…๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ •์˜ํ•œ ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ•„ํ„ฐ๋ง, ๊ฒ€์ƒ‰, ์ •๋ ฌ, ๊ทธ๋ฆฌ๊ณ  ํŽ˜์ด์ง€๋„ค์ด์…˜ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ์œผ๋กœ์จ, ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‹ค ์ •ํ™•ํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ฆ‰, ์ •๋ฆฌํ•˜์ž๋ฉด @PathVariable์€ ํŠน์ • ๋ฆฌ์†Œ์Šค๋กœ ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๊ณ , @RequestParam์€ ๋ณด๋‹ค ์œ ์—ฐํ•˜๊ฒŒ ๋‚ด๊ฐ€ ์ฐพ๊ณ ์ž ํ•˜๋Š” ์ •๋ณด๋ฅผ ๋ชจ๋‘ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒํ•˜๋Š” ๋„“์€ ์˜๋ฏธ์ธ ์…ˆ์ด๋‹ค.

 

๋Œ“๊ธ€