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

์Šคํ”„๋ง Spring/๐Ÿงถ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ Spring

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ - Model ๊ฐ์ฒด

by Meteora_ 2021. 4. 19.
728x90

Spring Model ๊ฐ์ฒด

Controller์˜ ๋ฉ”์„œ๋“œ๋Š” Model์ด๋ผ๋Š” ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
์ˆœ์ˆ˜ํ•˜๊ฒŒ JSP Servlet์œผ๋กœ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ๋•Œ ๋ณดํ†ต request๋‚˜ session ๋‚ด์žฅ๊ฐ์ฒด์— ์ •๋ณด๋ฅผ ๋‹ด์•„ jsp์— ๋„˜๊ฒจ์ฃผ๊ณค ํ–ˆ๋Š”๋ฐ Spring์—์„œ๋Š” Model์ด๋ผ๋Š” ๋…€์„์„ ์“ด๋‹ค.
์ฆ‰ request.setAttribute() ์™€ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ.

 

request.setAttribute("time", new java.util.Date()); RequestDispatcher dispatcher = request.getRequestDispatcher("url"); dispatcher.forward(request, response);

์œ„ ์ฝ”๋“œ๋Š” jsp๋กœ ๊ฒŒ์‹œํŒ์„ ๋งŒ๋“ค๋•Œ ๋งŽ์ด ์‚ฌ์šฉํ–ˆ๋˜ ํ˜•ํƒœ์˜ ์ฝ”๋“œ์ด๋‹ค.
์Šคํ”„๋ง์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฒ˜๋ฆฌํ•œ๋‹ค.

public String home(Model model) { model.addAttribute("time", new java.util.Date()); return "home"; }

ํŽธ๋ฆฌํ•œ ์ ์€ ๊ฐœ๋ฐœ์ž๋Š” ์ง์ ‘ model์„ ์ƒ์„ฑํ•  ํ•„์š”๋Š” ์—†๋‹ค. ๋‹ค๋งŒ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์„ ์–ธ๋งŒ ํ•ด์ฃผ๋ฉด ์Šคํ”„๋ง์ด ์•Œ์•„์„œ ๋งŒ๋“ค์–ด์ค€๋‹ค.

์Šคํ”„๋ง MVC์˜ Controller๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Java Beans ๊ทœ์น™์— ๋งž๋Š” ๊ฐ์ฒด๋Š” ์ž๋™์œผ๋กœ ํ™”๋ฉด์— ์ „๋‹ฌํ•ด์ค€๋‹ค.
Java Beans์˜ ๊ทœ์น™์— ๋งž๋Š”๋‹ค๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํžˆ ์ƒ์„ฑ์ž๊ฐ€ ์—†๊ฑฐ๋‚˜ ๋นˆ ์ƒ์„ฑ์ž๋ฅผ ๊ฐ€์ง€๋ฉฐ, getter/setter๋ฅผ ๊ฐ€์ง„ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋“ค์„ ์˜๋ฏธํ•œ๋‹ค.
์ „๋‹ฌ๋  ๋•Œ๋Š” ํด๋ž˜์Šค๋ช…์˜ ์•ž๊ธ€์ž๋ฅผ ์†Œ๋ฌธ์ž๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ „๋‹ฌํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ธฐ๋ณธ์ž๋ฃŒํ˜•(int, double๋“ฑ๋“ฑ)์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์„ ์–ธ๋˜์—ˆ๋”๋ผ๋„ ํ™”๋ฉด์— ์ž๋™์œผ๋กœ ์ „๋‹ฌ๋˜์ง€ ์•Š๋Š”๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Controller์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค.
SampleDTO๋Š” String name, int age๋ฅผ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋กœ ๊ฐ€์ง„๋‹ค.

@GetMapping("/ex04") public String ex04(SampleDTO dto, int page) { return "ex04" }

ex04.jsp์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ „๋‹ฌ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณธ๋‹ค.

<h2>Sample DTO : ${sampleDTO}</h2> <h2>page : ${page}</h2>

๋ธŒ๋ผ์šฐ์ €์˜ ์ฃผ์†Œ์ฐฝ์„ ํ†ตํ•ด ์ฟผ๋ฆฌ์ŠคํŠธ๋ง์„ name=aaa&age=11&page=99 ์™€ ๊ฐ™์ด ์ „๋‹ฌํ•ด๋ณด๋ฉด ์ถœ๋ ฅ๋˜๋Š” ๊ฒฐ๊ณผํ™”๋ฉด์—” page๋Š” ๋œจ์งˆ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธ.

๊ทธ๋Ÿผ ๊ธฐ๋ณธ์ž๋ฃŒํ˜•์€ ์–ด๋–ป๊ฒŒ view์— ์ „๋‹ฌ์„ ํ•ด์ค„๊นŒ?

1) ํŒŒ๋ผ๋ฏธํ„ฐ์— Modelํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ์„ ์–ธ. ์ดํ›„ addAttribute()๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ
2) @ModelAttribute ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉ

1๋ฒˆ์€ ๊ตณ์ด ์„ค๋ช…ํ•˜์ง€ ์•Š์Œ
2๋ฒˆ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค.

@GetMapping("/ex04") public String ex04(SampleDTO dto, @ModelAttribute("mypage") int page) { return "ex04" }

๊ธฐ๋ณธ์ž๋ฃŒํ˜•์ธ ํŒŒ๋ผ๋ฏธํ„ฐ ์•ž์— ๋ถ™์—ฌ์ฃผ๋ฉด ๋œ๋‹ค. ์†์„ฑ๊ฐ’์œผ๋กœ๋Š” ํ™”๋ฉด์—์„œ ์ถœ๋ ฅํ• ๋•Œ ์‚ฌ์šฉํ•  ์ด๋ฆ„์„ ์ง€์ •ํ•ด์ค€๋‹ค.

<h2>page : ${mypage}</h2>

RedirectAttributes

RedirectAttributes ํƒ€์ž…์˜ ๊ฐ์ฒด๋Š” ์ผํšŒ์„ฑ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ ํ•  ์ˆ˜ ์žˆ๋‹ค.
response.sendRedirect()์™€ ๋™์ผํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด์ด๋‹ค.

addFlashAttribute() ๋ฉ”์„œ๋“œ๋Š” (์ด๋ฆ„, ๊ฐ’)์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ด์šฉํ•˜์—ฌ ํ™”๋ฉด์— ๋”ฑ ํ•œ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์ฆ๋ฐœ(?)ํ•ด๋ฒ„๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•˜๋ฉด ๋‚ ๋ผ๊ฐ
addAttribute() ๋ฆฌ๋‹ค์ด๋ ‰ํŠธํ•  ์ฃผ์†Œ ๋’ค์— ์ฟผ๋ฆฌ์ŠคํŠธ๋ง์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด์ค€๋‹ค.

Controller ๋ฉ”์„œ๋“œ์˜ ๋ฆฌํ„ดํƒ€์ž…

  • String : jsp๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒฝ์šฐ jspํŒŒ์ผ์˜ ์ด๋ฆ„์„ ๋‚˜ํƒ€๋ƒ„
  • void : ํ˜ธ์ถœํ•˜๋Š” URL๊ณผ ๋™์ผํ•œ ์ด๋ฆ„์˜ jsp๋ฅผ ๋‚˜ํƒ€๋ƒ„
  • VO, DTOํƒ€์ž… : ์ฃผ๋กœ jsonํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” ์šฉ๋„
  • ResponseEntity : reponseํ• ๋•Œ HTTPํ—ค๋” ์ •๋ณด์™€ ๋‚ด์šฉ์„ ๊ฐ€๊ณต
  • Model, ModelAndView : Model๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ํ™”๋ฉด๊นŒ์ง€ ์ง€์ •
  • HttpHeaders : ์‘๋‹ต์— ๋‚ด์šฉ์—†์ด HTTPํ—ค๋” ๋ฉ”์„ธ์ง€๋งŒ ์ „๋‹ฌํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ

์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” void, String์€ servlet-context.xml์˜ ViewResolver ์„ค์ •๊ณผ ๋งž๋ฌผ๋ ค ์ž‘๋™ํ•˜๊ฒŒ ๋œ๋‹ค.

<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory --> <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <beans:property name="prefix" value="/WEB-INF/views/" /> <beans:property name="suffix" value=".jsp" /> </beans:bean>

String์€ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํ™”๋ฉด์„ ๋ณด์—ฌ์ค„ ํ•„์š”๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์œ ์šฉํ•˜๋‹ค. (if~else์ฒ˜๋ฆฌ)
String ๋ฆฌํ„ดํƒ€์ž…์—์„œ return๋ฌธ์—” ํŠน๋ณ„ํ•œ ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค.

  • redirect: ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
  • forward: ํฌ์›Œ๋”ฉ(์ƒ๋žต์‹œ ์–˜๊ฐ€ ๊ธฐ๋ณธ)

๋Œ“๊ธ€