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 ๊ฐ์ฒด ์๋ ์์ฑ ๋ฐ ์ฃผ์ |