Web (back-end)/Spring

Spring @RequestParam vs @PathVariable ์• ๋…ธํ…Œ์ด์…˜ ๋น„๊ต

9taetae9 2025. 2. 24. 13:47
728x90

@PathVariable

  • ๋ชฉ์ : URI ๊ฒฝ๋กœ์˜ ๋ณ€์ˆ˜ ๊ฐ’์„ ์ถ”์ถœํ•  ๋•Œ ์‚ฌ์šฉ
  • ์˜ˆ์‹œ: /users/{userId} → userId ํŒŒ๋ผ๋ฏธํ„ฐ ์ถ”์ถœ
  • ํŠน์ง•:
    • URL์˜ ๊ฒฝ๋กœ ์ผ๋ถ€๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ ํ•„์ˆ˜๊ฐ’์œผ๋กœ ์ฒ˜๋ฆฌ๋จ
    • RESTful ๋ฆฌ์†Œ์Šค ์‹๋ณ„์— ์ ํ•ฉ (์˜ˆ: ํŠน์ • ์‚ฌ์šฉ์ž ์กฐํšŒ)
@GetMapping("/users/{userId}")
public User getUser(@PathVariable String userId) {
    //
}

 

 

@RequestParam

  • ๋ชฉ์ : ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง(?key=value)์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์ถ”์ถœ
  • ์˜ˆ์‹œ: /users?role=admin → role ๊ฐ’ ์ถ”์ถœ
  • ํŠน์ง•:
    • ์„ ํƒ์  ํŒŒ๋ผ๋ฏธํ„ฐ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ (required=false)
    • ํ•„ํ„ฐ๋ง, ์ •๋ ฌ, ํŽ˜์ด์ง• ๋“ฑ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์— ์ ํ•ฉ
@GetMapping("/users")
public List<User> getUsers(@RequestParam(required = false) String role) {
    //
}

 

์š”์ฒญ ๊ฐ’์„ ์ฒ˜๋ฆฌ ์‹œ ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹ ์ฐจ์ด

@PathVariable
URL ๊ฒฝ๋กœ์—์„œ ๊ฐ’์„ ์ถ”์ถœํ•  ๋•Œ ์ธ์ฝ”๋”ฉ๋˜์ง€ ์•Š์€ ์›๋ณธ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์˜จ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, URL์— ab+c๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด ๊ทธ๋Œ€๋กœ ab+c๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • http://localhost:8080/spring-mvc-basics/foos/ab+c
  • ๊ฒฐ๊ณผ: ID: ab+c

@RequestParam:
์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์˜ ๊ฒฝ์šฐ, URL ๋””์ฝ”๋”ฉ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ธฐ ๋•Œ๋ฌธ์— ab+c๊ฐ€ ab c๋กœ ๋ณ€ํ™˜๋˜์–ด ๋ฐ˜ํ™˜๋œ๋‹ค.

  • http://localhost:8080/spring-mvc-basics/foos?id=ab+c
  • ๊ฒฐ๊ณผ: ID: ab c

๋”ฐ๋ผ์„œ, ์ธ์ฝ”๋”ฉ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์—์„œ๋Š” ์–ด๋–ค ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ• ์ง€ ์‹ ์ค‘ํžˆ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค.

 

์„ ํƒ์  ๊ฐ’ ์ฒ˜๋ฆฌ

๋‘ ์• ๋…ธํ…Œ์ด์…˜ ๋ชจ๋‘ ์„ ํƒ์ (optional) ๊ฐ’ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

  • @PathVariable์˜ ์„ ํƒ์  ์‚ฌ์šฉ
    Spring 4.3.3๋ถ€ํ„ฐ๋Š” required ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ ํƒ์  ๊ฒฝ๋กœ ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
@GetMapping({"/myfoos/optional", "/myfoos/optional/{id}"})
@ResponseBody
public String getFooByOptionalId(@PathVariable(required = false) String id){
    return "ID: " + id;
}
  • ํ˜ธ์ถœ ์˜ˆ์‹œ
    • URL: http://localhost:8080/spring-mvc-basics/myfoos/optional/abc → ๊ฒฐ๊ณผ: ID: abc
    • URL: http://localhost:8080/spring-mvc-basics/myfoos/optional → ๊ฒฐ๊ณผ: ID: null
  • @RequestParam์˜ ์„ ํƒ์  ์‚ฌ์šฉ
    @RequestParam ๋˜ํ•œ required ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์ˆ˜ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.๋‹จ, ๊ฒฝ๋กœ์—์„œ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ์ถฉ๋Œ์ด๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง ์ƒ์˜ ๊ณ ๋ ค์‚ฌํ•ญ์— ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.

์„ ํƒ์  ๊ฐ’ ์ฒ˜๋ฆฌ๋Š” ์œ ์—ฐํ•œ API ์„ค๊ณ„์— ๋„์›€์„ ์ฃผ์ง€๋งŒ, ๊ฒฝ๋กœ ์ถฉ๋Œ์ด๋‚˜ ๋ฐ์ดํ„ฐ ๋ˆ„๋ฝ ์‹œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ถฉ๋ถ„ํ•œ ๊ฒ€์ฆ์ด ํ•„์š”ํ•˜๋‹ค.

์ฃผ์š” ์ฐจ์ด์  ๋น„๊ต

ํŠน์„ฑ @PathVariable @RequestParam
์œ„์น˜ URI ๊ฒฝ๋กœ ๋‚ด (/{value}) ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง (?key=value)
ํ•„์ˆ˜ ์—ฌ๋ถ€ ๊ธฐ๋ณธ๊ฐ’ required=true required=false๋กœ ์„ ํƒ์  ์„ค์ • ๊ฐ€๋Šฅ
์‚ฌ์šฉ ์‚ฌ๋ก€ ๋ฆฌ์†Œ์Šค ์‹๋ณ„ (์˜ˆ: ID ๊ธฐ๋ฐ˜ ์กฐํšŒ) ํ•„ํ„ฐ๋ง, ์ •๋ ฌ, ๊ฒ€์ƒ‰ ์กฐ๊ฑด
URL ๊ตฌ์กฐ RESTful ๊ณ„์ธต ๊ตฌ์กฐ ๋ฐ˜์˜ ๊ธฐ๋Šฅ์  ํŒŒ๋ผ๋ฏธํ„ฐ ์ „๋‹ฌ
์ธ์ฝ”๋”ฉ ๊ฐ’์ด ๋””์ฝ”๋”ฉ๋˜์ง€ ์•Š์Œ(์˜ˆ:ab+c→ab+c) ๊ฐ’์ด ์ž๋™ ๋””์ฝ”๋”ฉ ๋จ(์˜ˆ:ab+c→ab c)

 

 

์ •๋ฆฌ 

@PathVariable๊ณผ @RequestParam์€ ๊ฐ๊ฐ์˜ ํŠน์ง•์— ๋งž์ถฐ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๋Š” ๋„๊ตฌ์ด๋‹ค.

  • @PathVariable์€ URI ๊ฒฝ๋กœ ์ž์ฒด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์–ด RESTful API ์„ค๊ณ„ ์‹œ ์ž์—ฐ์Šค๋Ÿฌ์šด URL ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • @RequestParam์€ ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ๋ฐ›์„ ๋•Œ ์œ ์šฉํ•˜๋ฉฐ, URL ๋””์ฝ”๋”ฉ ์ฒ˜๋ฆฌ๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.
  • ์ธ์ฝ”๋”ฉ ์ด์Šˆ๊ฐ€ ์šฐ๋ ค๋˜๋Š” ๊ฒฝ์šฐ(์˜ˆ: ๊ฐ’์— +๋‚˜ ๊ณต๋ฐฑ ๋“ฑ์˜ ํŠน์ˆ˜๋ฌธ์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์›๋ณธ ๊ทธ๋Œ€๋กœ์˜ ๊ฐ’์ด ํ•„์š”ํ•  ๋•Œ)๋Š” @PathVariable์„ ์‚ฌ์šฉํ•˜๊ณ , ์ผ๋ฐ˜์ ์ธ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฒฝ์šฐ์—๋Š” @RequestParam์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•˜๋‹ค.

 

์ฐธ๊ณ  ์ž๋ฃŒ : 

https://www.baeldung.com/spring-requestparam-vs-pathvariable

728x90