๐Ÿ“Œ ์Šคํ”„๋ง MVC ํŒŒ๋ผ๋ฏธํ„ฐ ์ฒ˜๋ฆฌ ์™„์ „ ์ •๋ณต | 1ํŽธ: @RequestParam, @RequestBody ์™„๋ฒฝ ์ดํ•ดํ•˜๊ธฐ

My Pale Blue Dotยท2025๋…„ 4์›” 23์ผ
0

SPRING

๋ชฉ๋ก ๋ณด๊ธฐ
2/36
post-thumbnail

๐Ÿ“… 2025-04-23

๐Ÿ“ ํ•™์Šต ๋‚ด์šฉ

1๏ธโƒฃ ์Šคํ”„๋ง ํŒŒ๋ผ๋ฏธํ„ฐ ์ฒ˜๋ฆฌ ๊ฐœ์š”

์Šคํ”„๋ง MVC์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์š”์ฒญ ๋ฐฉ์‹(GET/POST)๊ณผ ๋ฐ์ดํ„ฐ ํ˜•ํƒœ(Form, JSON ๋“ฑ)์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๋ฐฉ์‹์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ค๋ช…์ฃผ์š” ์–ด๋…ธํ…Œ์ด์…˜
์ฟผ๋ฆฌ์ŠคํŠธ๋ง / ํผ ๋ฐ์ดํ„ฐ๋™๊ธฐ ๋ฐฉ์‹, URL ๋˜๋Š” form ๊ธฐ๋ฐ˜ ์ „๋‹ฌ@RequestParam
JSON, ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ๋น„๋™๊ธฐ ์š”์ฒญ ์‹œ ์‚ฌ์šฉ (Ajax ๋“ฑ)@RequestBody
๊ฐ์ฒด ๋ฐ”์ธ๋”ฉDTO๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ ์ž๋™ ๋งคํ•‘@ModelAttribute
URL ๊ฒฝ๋กœ ๋ณ€์ˆ˜RESTful URL์—์„œ ๊ฐ’ ์ถ”์ถœ@PathVariable

2๏ธโƒฃ ์ฃผ์š” ์–ด๋…ธํ…Œ์ด์…˜ ์„ค๋ช…

โœ… @RequestParam

  • ์šฉ๋„: ์ฟผ๋ฆฌ์ŠคํŠธ๋ง ๋˜๋Š” ํผ ๋ฐ์ดํ„ฐ(key=value)๋ฅผ ๋ณ€์ˆ˜๋กœ ๋งคํ•‘.
  • ์˜ˆ์‹œ:
@GetMapping("/p02")
public void p02(@RequestParam(value = "name", required = true) String name) {
    log.info("GET/param/p02..." + name);
}

โœ… @RequestBody

  • ์šฉ๋„: ์š”์ฒญ ๋ณธ๋ฌธ(Body)์˜ JSON ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌ.
  • ์˜ˆ์‹œ:
@PostMapping("/p04")
public void p04(@RequestBody String name) {
    log.info("POST/param/p04..." + name);
}

๐Ÿ”น @RequestParam vs @RequestBody ๋น„๊ต

๊ตฌ๋ถ„@RequestParam@RequestBody
๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ฐฉ์‹์ฟผ๋ฆฌ์ŠคํŠธ๋ง, ํผ ๋ฐ์ดํ„ฐ(Form)์š”์ฒญ ๋ณธ๋ฌธ(Body)
์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹GET, POSTPOST, PUT, PATCH
๋ฐ์ดํ„ฐ ํ˜•ํƒœkey=valueJSON, XML, Text
์˜ˆ์‹œ?name=Tom{ "name": "Tom" }

โœ… @ModelAttribute & @PathVariable

  • ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ DTO๋กœ ๋งคํ•‘ํ•˜๊ฑฐ๋‚˜, URL ๊ฒฝ๋กœ ๋ณ€์ˆ˜๋ฅผ ์ถ”์ถœํ•  ๋•Œ ์‚ฌ์šฉ.
  • ์˜ˆ์‹œ๋Š” ์ƒ๋žตํ•˜๊ณ  ๋‹ค์Œ ํŽธ์—์„œ ์‹ฌํ™” ์„ค๋ช… ์˜ˆ์ •.

3๏ธโƒฃ ๊ธฐ๋ณธ ์˜ˆ์ œ ์ฝ”๋“œ (์ฃผ์„ ํฌํ•จ)

@GetMapping("/example")
public String example(
    @RequestParam String name,      // ์ฟผ๋ฆฌ์ŠคํŠธ๋ง ๋˜๋Š” ํผ ๋ฐ์ดํ„ฐ์—์„œ 'name' ์ถ”์ถœ
    @RequestBody(required = false) String jsonData,  // ์š”์ฒญ ๋ณธ๋ฌธ(JSON ๋“ฑ) ๋ฐ์ดํ„ฐ ์ˆ˜์‹ 
    @ModelAttribute PersonDto dto,  // ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ DTO๋กœ ์ž๋™ ๋งคํ•‘
    @PathVariable(required = false) Long id          // URL ๊ฒฝ๋กœ ๋ณ€์ˆ˜ ์ถ”์ถœ
) {
    return "resultPage";  // ๋ทฐ ์ด๋ฆ„ ๋ฐ˜ํ™˜
}

๐Ÿ’ก TIP

  • @RequestParam์€ GET/POST ํผ ์ฒ˜๋ฆฌ์— ์ตœ์ ํ™”
  • @RequestBody๋Š” JSON ๊ธฐ๋ฐ˜ API ์„ค๊ณ„ ์‹œ ํ•„์ˆ˜
  • DTO ๋ฐ”์ธ๋”ฉ ์‹œ @ModelAttribute๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๊น”๋”ํ•œ ์ฝ”๋“œ ์ž‘์„ฑ ๊ฐ€๋Šฅ

๐Ÿ”ฅ ์š”์•ฝ

์š”์ฒญ ๋ฐฉ์‹๊ณผ ๋ฐ์ดํ„ฐ ํ˜•ํƒœ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ์–ด๋…ธํ…Œ์ด์…˜์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด

์Šคํ”„๋ง ํŒŒ๋ผ๋ฏธํ„ฐ ์ฒ˜๋ฆฌ์˜ ํ•ต์‹ฌ์ด๋‹ค!

  • ๋™๊ธฐ ์š”์ฒญ(Form, ์ฟผ๋ฆฌ์ŠคํŠธ๋ง) โžก๏ธ @RequestParam
  • ๋น„๋™๊ธฐ ์š”์ฒญ(JSON) โžก๏ธ @RequestBody
  • ๊ฐ์ฒด ๋ฐ”์ธ๋”ฉ โžก๏ธ @ModelAttribute
  • RESTful ๊ฒฝ๋กœ โžก๏ธ @PathVariable

๐Ÿ”— ์ฐธ๊ณ  ์ž๋ฃŒ


๋А๋‚€ ์ 

๋‹จ์ˆœํ•œ ์‚ฌ์šฉ๋ฒ• ์•”๊ธฐ๋ณด๋‹ค, ์–ธ์ œ ์–ด๋–ค ์–ด๋…ธํ…Œ์ด์…˜์„ ์„ ํƒํ•ด์•ผ ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ–ˆ๋‹ค.

์š”์ฒญ ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ์™€ ๋ชฉ์ ์„ ๊ณ ๋ คํ•ด ๊ฐ€์žฅ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์‹ค๋ฌด์—์„œ์˜ ํ•ต์‹ฌ ์Šคํ‚ฌ!


profile
Here, My Pale Blue.๐ŸŒ

0๊ฐœ์˜ ๋Œ“๊ธ€