โœ… Spring

โœจ Spring MVC์—์„œ์˜ ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ ํ๋ฆ„ : DispatcherServlet๋ถ€ํ„ฐ Command ๊ฐ์ฒด๊นŒ์ง€ ์ •๋ณต

Joyfullyever 2025. 4. 17. 17:05

๐Ÿงฉ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์‹œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ตฌ์กฐ๋Š”?

๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค๋‹ค ๋ณด๋ฉด, ์•„๋ž˜์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ด€์—ฌํ•˜๊ฒŒ๋จ

• 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