โจ Spring MVC์์์ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ ํ๋ฆ : DispatcherServlet๋ถํฐ Command ๊ฐ์ฒด๊น์ง ์ ๋ณต
๐งฉ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํ ์ ๊ฐ์ฅ ์ค์ํ ๊ตฌ์กฐ๋?
๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๋ง๋ค๋ค ๋ณด๋ฉด, ์๋์ฒ๋ผ ์ฌ๋ฌ ์ปดํฌ๋ํธ๊ฐ ๊ด์ฌํ๊ฒ๋จ
• LoginController
• LoginService
• LoginDAO
• LoginVO (Command ๊ฐ์ฒด)
์ด๋ ๊ฐ์ฅ ์ค์ํ ๊ฑด ์ญํ ์ ๋ถ๋ฆฌ, ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๋ ์ค๊ณ
์๋ฅผ ๋ค์ด, Controller์์ DAO๋ฅผ ์ง์ new ํ์ง ์๋๋ค. ๋์ Service๋ฅผ ํตํด ๊ฐ์ ํธ์ถํ๊ณ , Service๋ DAO์ ์์กด ๊ด๊ณ๋ฅผ ๋งบ์
@Controller
public class LoginController {
@Autowired
private LoginService loginService;
@PostMapping("/login")
public String login(LoginVO vo, HttpSession session) {
boolean result = loginService.loginCheck(vo);
if(result) {
session.setAttribute("user", vo);
return "redirect:/main";
}
return "redirect:/login?error";
}
}
๐ ๊ฐ์ฒด ์์ฑ์ ๋๊ฐ? ์คํ๋ง ์ปจํ ์ด๋๊ฐ ํจ
์ ํต ๋ฐฉ์์์๋ DispatcherServlet์ ์ง์ ๋ง๋ค์์ง๋ง, Spring์์๋ ์คํ๋ง์ด ์ ๊ณตํ๋ DispatcherServlet์ web.xml์ ๋ฑ๋ก
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
์ค์ํ ํฌ์ธํธ :
• ์คํ๋ง ์ปจํ ์ด๋๊ฐ new ํ๋ ์ ์ผํ ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ DispatcherServlet
• DispatcherServlet์ **/WEB-INF/dispatcherServlet-servlet.xml**์ ๋ก๋ฉ
• ์ด xml์ด applicationContext ์ญํ ์ ๋์ ์ํํ๋ฉฐ, ๋๋จธ์ง @Component ๊ฐ์ฒด๋ค์ ๊ด๋ฆฌ
๐ฆ @Component ๊ณ์ด ์ด๋ ธํ ์ด์ ์ ํ์ฉํ ์๋ ๋ฑ๋ก
@Controller // ์ปจํธ๋กค๋ฌ ์ญํ
@Service // ๋น์ฆ๋์ค ๋ก์ง ๊ณ์ธต
@Repository // DAO ๊ณ์ธต
@Component // ๊ธฐํ ์ผ๋ฐ ๋น
์ด ์ด๋
ธํ
์ด์
์ ์ฐ๋ฉด ์คํ๋ง์ด ์์์ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ์ปจํ
์ด๋์ ๋ฑ๋ก
ํนํ @Controller๋ Spring MVC ๊ตฌ์กฐ์์ ์ปจํธ๋กค๋ฌ์์ ๋ช
ํํ ํ๋ฉฐ, ๊ฐ๋
์ฑ๊ณผ ๊ด๋ฆฌ ํจ์จ์ฑ์ด ๋์์ง
๐ก ์์ ๋์ ์์ง๋, ๊ทธ๋ฆฌ๊ณ ๋ฉ์๋ ์๊ทธ๋์ฒ
@Controller ์ฌ์ฉ ์ ์ฅ์ ์ ๋ง์ง๋ง, ์์ ๋๊ฐ ๋์์ง์๋ก ๊ฐ๋ฐ์์ ์ฑ ์๋ ์ปค์ง
• ๋ฉ์๋ ์ธ์: HttpServletRequest, HttpSession, Model, Command ๊ฐ์ฒด ๋ฑ ์์ ๋กญ๊ฒ ์ ์ธ ๊ฐ๋ฅ
• ๋ฉ์๋๋ช : ์ํ๋ ์ด๋ฆ์ผ๋ก ์ค์ ๊ฐ๋ฅ → ๊ด๋ จ ๊ธฐ๋ฅ๋ผ๋ฆฌ ๋ฌถ์ด ๋์ ์์ง๋
• ๋ฐํํ: ModelAndView, String, ResponseEntity ๋ฑ์ผ๋ก ๋ค์ํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ
๐งโ๏ธ Command ๊ฐ์ฒด๋?
POST /login.do ์์ฒญ ์ฒ๋ฆฌ ์, ์ฌ์ฉ์ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก VO์ ๋ฐ์ธ๋ฉํด์ฃผ๋ ๊ฐ์ฒด๋ฅผ Command ๊ฐ์ฒด๋ผ๊ณ ๋ถ๋ฆ
public class LoginVO {
private String id;
private String password;
// getter/setter
}
@PostMapping("/login")
public String login(LoginVO vo) {
// id, password ๊ฐ์ด ์๋์ผ๋ก ๋ค์ด์ด
}
โ๏ธ ์กฐ๊ฑด : ์ ๋ ฅ ํผ์ name ์์ฑ๊ณผ VO์ ํ๋๋ช ์ด ์ผ์นํด์ผ ํจ
์คํ๋ง์ด ์๋์ผ๋ก :
1. new LoginVO()
2. request.getParameter("id") ๊ฐ์ setId()์ ๋ฃ์ด์ค
3. ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ๋ฉ์๋ ์ธ์๋ก ์ ๋ฌ
๐ ์์ฝ ์ ๋ฆฌ
์์์ค๋ช
DispatcherServlet | ์ ์ผํ๊ฒ new ๋๋ ์๋ธ๋ฆฟ (Spring์ด ์ ๊ณต) |
DispatcherServlet-servlet.xml | ํด๋น ์๋ธ๋ฆฟ์ด ์ฐธ์กฐํ๋ ์ค์ ํ์ผ (์ปจํ ์ด๋ ์ญํ ) |
@Controller, @Service, @Repository | ๊ฐ์ฒด๋ฅผ ์๋ ์์ฑํ์ฌ ์คํ๋ง ์ปจํ ์ด๋์ ๋ฑ๋ก |
Command ๊ฐ์ฒด | ์ฌ์ฉ์ ์ ๋ ฅ ๊ฐ์ ์๋์ผ๋ก ๋ฐ์ธ๋ฉํ์ฌ ์ ๋ฌ๋ฐ๋ VO |