Programing_Java

๐Ÿ” [Spring MVC ๋กœ๊ทธ์ธ ํ๋ฆ„] DispatcherServlet, Controller, Service, DAO๊นŒ์ง€์˜ ์˜์กด๊ด€๊ณ„ ์ดํ•ดํ•˜๊ธฐ ๋ณธ๋ฌธ

์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

๐Ÿ” [Spring MVC ๋กœ๊ทธ์ธ ํ๋ฆ„] DispatcherServlet, Controller, Service, DAO๊นŒ์ง€์˜ ์˜์กด๊ด€๊ณ„ ์ดํ•ดํ•˜๊ธฐ

Joyfullyever 2025. 4. 21. 18:05

๐Ÿšช 1. ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์€ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•˜๋Š”์ง€?

๊ธฐ๋ณธ ๊ตฌ์„ฑ :

LoginController → LoginService → LoginDAO

 

• Controller๋Š” ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ๋ฐ›์•„ ์ฒ˜๋ฆฌ

 ํ•ต์‹ฌ ๋กœ์ง์€ Service๊ฐ€ ๋‹ด๋‹น

 DB ์ฒ˜๋ฆฌ๋Š” DAO๊ฐ€ ๋‹ด๋‹น

 

 

โœ… ์ฃผ์˜: Controller๊ฐ€ DAO๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” ๊ฑด ์ง€์–‘ → Service๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘ ํ˜ธ์ถœํ•˜์—ฌ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ๊ตฌ์กฐ๋กœ ์„ค๊ณ„

 

 

๐Ÿ—๏ธ 2. ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… (DI) ๋ฐฉ์‹

 new๋กœ ์ง์ ‘ ์ƒ์„ฑ ์•ˆํ•จ

 Spring์ด ๋Œ€์‹  ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋„ฃ์–ด์คŒ = ์˜์กด์„ฑ ์ฃผ์ž…

 @Autowired ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•ด ์ž๋™ ์ฃผ์ž…

@Service
public class LoginServiceImpl implements LoginService {
    @Autowired
    private LoginDAO loginDAO;
}

 

๐Ÿงญ 3. DispatcherServlet์˜ ์—ญํ• 

 ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ๋งŒ๋“  DS๋Š” ์‚ฌ์šฉ ์•ˆ ํ•จ

 Spring์ด ์ œ๊ณตํ•˜๋Š” DispatcherServlet์„ web.xml์—์„œ ๋“ฑ๋ก

<servlet>
  <servlet-name>spring</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>

 

ํ•„์š”ํ•œ ์„ค์ •ํŒŒ์ผ ์œ„์น˜๋Š” ๋ฐ˜๋“œ์‹œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด

/WEB-INF/spring-servlet.xml

 ์ด ์„ค์ •ํŒŒ์ผ์ด applicationContext.xml์˜ ์—ญํ• ์„ ๋Œ€์‹ ํ•จ

 

๐Ÿ’ก 4. Controller ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉ ์ด์œ 

@Controller
public class LoginController {
    // ๋กœ๊ทธ์ธ ๊ด€๋ จ ๋ฉ”์„œ๋“œ ์ž‘์„ฑ
}

 

 ์Šคํ”„๋ง์ด ์ด ํด๋ž˜์Šค๋ฅผ Controller ์—ญํ• ๋กœ ์ธ์ง€

 ๊ฐ€๋…์„ฑ ์ข‹์Œ, ๊ฐœ๋ฐœ์ž ํ˜‘์—… ํšจ์œจ ํ–ฅ์ƒ

 ํƒ€์ž… ์ œ๊ณต ๊ฐœ๋… → DispatcherServlet์ด ์ž๋™ ์ธ์‹ ๊ฐ€๋Šฅ

 

โœ… ์ฃผ์˜: ์ž์œ ๋„๊ฐ€ ์˜ฌ๋ผ๊ฐ → ์‹ ์ค‘ํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•จ

 

 

๐Ÿ” 5. ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜์˜ ์ž์œ ๋„

 ์š”์†Œ์„ค๋ช…

์ธ์ž HttpServletRequest ๊ฐ€๋Šฅ
๋ฉ”์„œ๋“œ๋ช… ๋งˆ์Œ๋Œ€๋กœ ๊ฐ€๋Šฅ → ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ํ•œ ํด๋ž˜์Šค ์•ˆ์— ๊ตฌ์„ฑ
๋ฆฌํ„ดํƒ€์ž… String์œผ๋กœ ๋ทฐ ์ด๋ฆ„ ์ง€์ • ๊ฐ€๋Šฅ (MAV ์•ˆ ์จ๋„ ๋จ)

 

๐ŸŒ 6. ๊ฐ™์€ URL, ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ ๊ตฌ๋ถ„ํ•˜๊ธฐ (REST ์Šคํƒ€์ผ)

@RequestMapping(value="/login.do", method=RequestMethod.GET)
public String goLoginPage() {...}

@RequestMapping(value="/login.do", method=RequestMethod.POST)
public String login(LoginVO vo) {...}

 

 ๊ฐ™์€ URL์ด๋ผ๋„ ๋ฉ”์„œ๋“œ(GET, POST)์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ

 RESTful ์Šคํƒ€์ผ ๊ธฐ๋ฐ˜์˜ ์„ค๊ณ„ ๊ฐ€๋Šฅ

 

๐Ÿ“ฆ 7. Command ๊ฐ์ฒด๋ž€

 

POST ์š”์ฒญ ์‹œ, ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์•ผ ํ•จ


๊ธฐ์กด ๋ฐฉ์‹ :

String id = request.getParameter("id");

 

Spring์—์„œ๋Š”?

public String login(LoginVO vo) { ... }

 

 LoginVO๋ฅผ ์ธ์ž๋กœ ๋ฐ›๊ธฐ๋งŒ ํ•˜๋ฉด,

 ์Šคํ”„๋ง์ด ์ž๋™์œผ๋กœ request์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด new LoginVO()ํ•˜๊ณ 

 setter๋กœ ๊ฐ’์„ ๋‹ค ๋„ฃ์–ด์คŒ

 

 

โœ… ๋‹จ! name ์†์„ฑ๊ณผ VO์˜ ํ•„๋“œ๋ช…์ด ๊ฐ™์•„์•ผ ํ•จ

 

<input type="text" name="id" />
<input type="password" name="pw" />

public class LoginVO {
    private String id;
    private String pw;
    // getter, setter
}

 

โœ… ์ •๋ฆฌ

 

 ๊ตฌ์„ฑ์š”์†Œ, ์—ญํ• , ์Šคํ”„๋ง ์ฒ˜๋ฆฌ ๋ฐฉ์‹

DispatcherServlet ์š”์ฒญ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ web.xml์— ๋“ฑ๋ก
Controller ์š”์ฒญ ์ฒ˜๋ฆฌ @Controller, ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜ ์ž์œ ๋„
Service ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง @Service, @Autowired๋กœ DAO ์ฃผ์ž…
DAO DB ์ฒ˜๋ฆฌ @Repository, DB์™€ ์ง์ ‘ ์—ฐ๊ฒฐ
Command ๊ฐ์ฒด ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์ฒ˜๋ฆฌ VO ๊ฐ์ฒด ์ž๋™ ์ƒ์„ฑ ๋ฐ ์ฃผ์ž