๐Ÿ“Œ ์Šคํ”„๋ง ํŒŒ๋ผ๋ฏธํ„ฐ ์‹ฌํ™” - 2ํŽธ: Model, Redirect, ๊ทธ๋ฆฌ๊ณ  Servlet ๋ฐฉ์‹๊นŒ์ง€ ์™„์ „ ์ •๋ณต

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

SPRING

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

๐Ÿ“… 2025-04-23

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

1๏ธโƒฃย Model vs ModelAndView

โœ…ย Model

  • ์—ญํ• : ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ทฐ(View)๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ.
  • ํŠน์ง•: key-value ํ˜•ํƒœ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ.
  • ์˜ˆ์‹œ:
@GetMapping("/page01")
public void page01(PersonDto dto, Model model) {
    model.addAttribute("dto", dto);
    model.addAttribute("test", "test1Value");
}

๐Ÿ’ก ์ฐธ๊ณ 
Model์€ DispatcherServlet์ด ๋ทฐ ์ด๋ฆ„์„ ์ž๋™์œผ๋กœ ์ถ”๋ก ํ•ฉ๋‹ˆ๋‹ค.
์ฃผ๋กœ ์ปจ๋ฒค์…˜ ๊ธฐ๋ฐ˜์˜ ๊ณ ์ •๋œ ๋ทฐ ์ฒ˜๋ฆฌ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.


โœ…ModelAndView

  • ์—ญํ• : ๋ฐ์ดํ„ฐ์™€ ๋ทฐ ์ด๋ฆ„์„ ํ•จ๊ป˜ ์„ค์ •.
  • ํŠน์ง•: ๋™์  ๋ทฐ ์ฒ˜๋ฆฌ์— ์œ ๋ฆฌ.
  • ์˜ˆ์‹œ:
@GetMapping("/page04/{username}/{age}/{addr}")
public ModelAndView page04(PersonDto dto) {
    ModelAndView mav = new ModelAndView();
    mav.addObject("dto", dto);
    mav.setViewName("param/page01");
    return mav;
}

๐Ÿ’ก ์ฐธ๊ณ 
ModelAndView๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ทฐ ์ด๋ฆ„์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์–ด,
์ƒํ™ฉ์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ๋ทฐ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”นย Model vs ModelAndView ๋น„๊ต

๊ตฌ๋ถ„ModelModelAndView
๋ฐ์ดํ„ฐ ์ „๋‹ฌOO
๋ทฐ ์ด๋ฆ„ ์„ค์ •์ž๋™ ์ถ”๋ก ๋ช…์‹œ์  ์„ค์ •
์‚ฌ์šฉ ์‚ฌ๋ก€์ผ๋ฐ˜์ ์ธ ๊ณ ์ • ๋ทฐ๋™์  ๋ทฐ ์ฒ˜๋ฆฌ

2๏ธโƒฃย Forward vs Redirect

๐Ÿ’กย ํ•ต์‹ฌ ์ฐจ์ด ์ •๋ฆฌ

  • Forward: ์„œ๋ฒ„ ๋‚ด๋ถ€ ์ด๋™ (URL ๋ณ€๊ฒฝ ์—†์Œ)
  • Redirect: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ƒˆ๋กœ์šด ์š”์ฒญ (URL ๋ณ€๊ฒฝ)
๊ตฌ๋ถ„ForwardRedirect
๋™์ž‘ ๋ฐฉ์‹์„œ๋ฒ„ ๋‚ด๋ถ€ ์š”์ฒญ ์ „๋‹ฌํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์žฌ์š”์ฒญ
URL ๋ณ€ํ™”๋ณ€ํ™” ์—†์ŒURL ๋ณ€๊ฒฝ
๋ฐ์ดํ„ฐ ์ „๋‹ฌModelRedirectAttributes
์‚ฌ์šฉ ๋ชฉ์ ํ๋ฆ„ ์œ ์ง€, ๋ฐ์ดํ„ฐ ์œ ์ง€์ƒˆ ์š”์ฒญ, ํŽ˜์ด์ง€ ์ด๋™

โšกย ์–ธ์ œ Forward๋ฅผ ์“ฐ๊ณ , ์–ธ์ œ Redirect๋ฅผ ์“ธ๊นŒ?

  • Forward: ๋‚ด๋ถ€ ๋กœ์ง ์ฒ˜๋ฆฌ๊ฐ€ ์ด์–ด์งˆ ๋•Œ (์˜ˆ: ํผ ์ œ์ถœ ํ›„ ๊ฒฐ๊ณผ ํŽ˜์ด์ง€).
  • Redirect: ์ƒˆ๋กœ๊ณ ์นจ ์‹œ ์ค‘๋ณต ์š”์ฒญ ๋ฐฉ์ง€, URL ๊ณต์œ ๊ฐ€ ํ•„์š”ํ•  ๋•Œ (์˜ˆ: ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ ํ›„ ๋ชฉ๋ก ํŽ˜์ด์ง€ ์ด๋™).

3๏ธโƒฃ Servlet ๋ฐฉ์‹ ํŒŒ๋ผ๋ฏธํ„ฐ ์ฒ˜๋ฆฌ

@GetMapping("/page05")
public String page05(HttpServletRequest req) {
    String name = req.getParameter("username");
    int age = Integer.parseInt(req.getParameter("age"));
    req.setAttribute("dto", new PersonDto(name, age, "Seoul"));
    return "param/page01";
}

๐Ÿšซย ์ฃผ์˜
Servlet ๋ฐฉ์‹์€ ์œ ์ง€๋ณด์ˆ˜์™€ ํ™•์žฅ์„ฑ์ด ๋–จ์–ด์ง€๋ฏ€๋กœ,
์Šคํ”„๋ง MVC์˜ ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.


๐Ÿ”ฅ ์š”์•ฝ

  • Model: ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ์ „์šฉ, ์ปจ๋ฒค์…˜ ๊ธฐ๋ฐ˜ ์ฒ˜๋ฆฌ.
  • ModelAndView: ๋ฐ์ดํ„ฐ + ๋™์  ๋ทฐ ์„ค์ •.
  • Forward: ์„œ๋ฒ„ ๋‚ด๋ถ€ ์š”์ฒญ ํ๋ฆ„ ์œ ์ง€.
  • Redirect: ํด๋ผ์ด์–ธํŠธ ์žฌ์š”์ฒญ, URL ๋ณ€๊ฒฝ ์‹œ ์‚ฌ์šฉ.
  • ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์‹œ RedirectAttributes ํ•„์ˆ˜!
  • Flash Attributes๋„ ํ™œ์šฉํ•ด ์„ธ์…˜ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๊ฐ€๋Šฅ.
  • Servlet ๋ฐฉ์‹์€ ์ตœ์†Œํ™”ํ•˜๊ณ  ์Šคํ”„๋ง ๋ฐฉ์‹ ๊ถŒ์žฅ.

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


๋А๋‚€ ์ 

์ฒ˜์Œ์—๋Š” ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ํ›„ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ๋ฌธ์ œ๋กœ ๋””๋ฒ„๊น…์— ๋งŽ์€ ์‹œ๊ฐ„์„ ์†Œ๋ชจํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ RedirectAttributes์™€ Flash Attributes๋ฅผ ๋ฐฐ์šฐ๊ณ  ๋‚˜์„œ,

๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์‹œ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ฐฉ์‹์„ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

์ด์ œ๋Š” ์ƒํ™ฉ์— ๋งž๊ฒŒ Forward์™€ Redirect๋ฅผ ๊ตฌ๋ถ„ํ•ด์„œ ํ™œ์šฉํ•  ์ž์‹ ์ด ์ƒ๊ฒผ๋‹ค.

profile
Here, My Pale Blue.๐ŸŒ

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