
์๋ธ๋ฆฟ(Servlet)์ ์๋ฐ์ ์น ๊ธฐ์ ์ค ํ๋๋ก, HTTP ์์ฒญ๊ณผ ์๋ต์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ธํฐํ์ด์ค์ ๋๋ค.
์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ํด๋ผ์ด์ธํธ(์: ๋ธ๋ผ์ฐ์ )๊ฐ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ฉด, ์๋ฒ๋ ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํ ์๋ธ๋ฆฟ์ ์ฐพ์ ์คํํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ต์ผ๋ก ๋ฐํํฉ๋๋ค.
ํต์ฌ ์ญํ :
์๋ธ๋ฆฟ์ ๊ธฐ๋ณธ์ ์ธ ์์ฒญ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ์ง์ ์ ์ผ๋ก HTTP ์์ฒญ์ ๋ฐ๊ณ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
์๋ธ๋ฆฟ์ ๊ธฐ๋ณธ์ ์ธ ํ๋ฆ:
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
response.getWriter().println("Hello, World!");
}
}
์ ์ฝ๋์ฒ๋ผ ์๋ธ๋ฆฟ์ ์์ฒญ์ ๋ฐ์์ ์๋ต์ ์ง์ ์์ฑํฉ๋๋ค.
์๋ธ๋ฆฟ์์๋ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ก์ง๊ณผ ๋ทฐ ์ฒ๋ฆฌ ๋ฑ์ ๊ฐ๋ฐ์๊ฐ ์๋์ผ๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
DispatcherServlet์ ์คํ๋ง ํ๋ ์์ํฌ์์ ์ ๊ณตํ๋ ์๋ธ๋ฆฟ ์ค ํ๋๋ก, ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ํจํด์ ๊ตฌํํ ์๋ธ๋ฆฟ์
๋๋ค.
์คํ๋ง MVC ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ชจ๋ HTTP ์์ฒญ์ ๋ฐ์์ ์ฒ๋ฆฌํ๊ณ , ์ด๋ฅผ ์ ์ ํ ์ปจํธ๋กค๋ฌ๋ก ์ ๋ฌํ ํ, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ตํ๋ ์ญํ ์ ํฉ๋๋ค.
ํต์ฌ ์ญํ :
DispatcherServlet์ ๋์ ํ๋ฆ:
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด DispatcherServlet์ด ์ด๋ฅผ ๋จผ์ ๋ฐ์ต๋๋ค.
์์ฒญ์ ๋ถ์ํ์ฌ, ์ ์ ํ ์ปจํธ๋กค๋ฌ(Handler)์ ์์ฒญ์ ์์ํฉ๋๋ค.
์ปจํธ๋กค๋ฌ๊ฐ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
DispatcherServlet์ ๋ฐํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก ์ ์ ํ ๋ทฐ(View)๋ฅผ ์ฐพ์ ์๋ต์ ์์ฑํฉ๋๋ค.
์ต์ข ์ ์ผ๋ก ํด๋ผ์ด์ธํธ์๊ฒ ์๋ต์ ๋ฐํํฉ๋๋ค.
@Controller
public class MyController {
@GetMapping("/hello")
public String handleRequest(Model model) {
model.addAttribute("message", "Hello, World!");
return "hello"; // hello.jsp or hello.html๋ก ๋ฐํ
}
}
DispatcherServlet์ ์คํ๋ง์ ๋ค์ํ ๊ตฌ์ฑ ์์์ ์ฐ๋ํ์ฌ ์์ฒญ ์ฒ๋ฆฌ ๊ณผ์ ์ ๊ฐ์ํํ๊ณ ์๋ํํฉ๋๋ค.| ํญ๋ชฉ | Servlet | DispatcherServlet |
|---|---|---|
| ์ญํ | HTTP ์์ฒญ์ ์ง์ ๋ฐ์์ ์ฒ๋ฆฌํ๊ณ ์๋ต ์์ฑ | ๋ชจ๋ ์์ฒญ์ ๋ฐ์์ ๋ถ์ํ๊ณ , ์ ์ ํ ์ปจํธ๋กค๋ฌ์ ์ ๋ฌํ๋ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ |
| ๊ธฐ๋ฅ | ๊ธฐ๋ณธ์ ์ธ ์์ฒญ ์ฒ๋ฆฌ์ ์๋ต ์์ฑ | ์คํ๋ง์ ๋ค์ํ ๊ธฐ๋ฅ(์ปจํธ๋กค๋ฌ ๋งคํ, ๋ทฐ ๋ฆฌ์กธ๋ฒ, ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ, ์์ธ ์ฒ๋ฆฌ ๋ฑ)์ ์ฒ๋ฆฌ |
| MVC ์ญํ | ์๋์ผ๋ก MVC ํจํด ๊ตฌํ ํ์ | MVC ํจํด์ ์๋์ผ๋ก ์ง์ (์ปจํธ๋กค๋ฌ, ๋ทฐ, ๋ชจ๋ธ ์ฒ๋ฆฌ) |
| ๊ตฌ์ฑ | ๊ฐ๋ฐ์๊ฐ ๋ชจ๋ ๋ก์ง์ ์ง์ ๊ตฌํํด์ผ ํจ | ์คํ๋ง์ ๋ค์ํ ๊ตฌ์ฑ ์์์ ์๋ ์ฐ๋, ์ค์ ์ต์ํ |
| ํธ๋ค๋ฌ ๋งคํ | ์๋์ผ๋ก URL ๋งคํ ๊ตฌํ | ์คํ๋ง์์ ์ ๊ณตํ๋ ๋ค์ํ ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ ๋งคํ ์ง์ (์: @GetMapping) |
| ์ฌ์ฉ ์ฌ๋ก | ๋จ์ํ๊ณ ๊ธฐ๋ณธ์ ์ธ ์์ฒญ ์ฒ๋ฆฌ์ ์ฌ์ฉ | ์คํ๋ง MVC ๊ธฐ๋ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ ์์ฒญ ์ฒ๋ฆฌ์ ์ฌ์ฉ |
DispatcherServlet์ ์คํ๋ง MVC์์ ์ ๊ณตํ๋ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ์๋ธ๋ฆฟ์ผ๋ก, ๋ชจ๋ ์น ์์ฒญ์ ์ค์์์ ์ฒ๋ฆฌํ๊ณ ์ด๋ฅผ ์ ์ ํ ์ปจํธ๋กค๋ฌ์ ์์ํ์ฌ ์คํ๋ง์ ์ฌ๋ฌ ๊ธฐ๋ฅ๊ณผ ์ฐ๋๋๋ ๊ตฌ์กฐ์
๋๋ค. ์คํ๋ง์ MVC ํจํด์ ๊ตฌํํ๋ ํต์ฌ ์๋ธ๋ฆฟ์
๋๋ค.๋ฐ๋ผ์, DispatcherServlet์ Servlet์ ์ผ์ข
์ด์ง๋ง, ์คํ๋ง ํ๋ ์์ํฌ์ ๋ค์ํ ๊ธฐ๋ฅ์ ์ฐ๋ํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋ ์ฝ๊ฒ ๊ด๋ฆฌํ๊ณ ๊ฐ๋ฐํ ์ ์๋๋ก ๋์์ฃผ๋ ๊ณ ๊ธ ์๋ธ๋ฆฟ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.