๋ ์ง:2025-10-22


๋ชจ๋ ์์ฒญ์ ์ค์ ์ปจํธ๋กค๋ฌ๊ฐ ๋จผ์ ์ฒ๋ฆฌ
๊ณตํต ๋ก์ง์ ํ ๊ณณ์์ ๊ด๋ฆฌ
ํ์ํ ์ปจํธ๋กค๋ฌ๋ก ์์ ์ ์์(delegate)
๐ ์ฆ, โ๋ชจ๋ ์์ฒญ์ด ํ ๊ณณ์ ๊ฑฐ์น๋คโ๋ ๊ฐ๋ ์ ๋๋ค.
-- Spring์ ๋ค์ํ ํํ์ ์ปจํธ๋กค๋ฌ(@Controller, Controller ์ธํฐํ์ด์ค, HttpRequestHandler ๋ฑ)๋ฅผ ์ง์ํฉ๋๋ค.
// @Controller ์ด๋
ธํ
์ด์
๋ฐฉ์
@Controller
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "hello";
}
}
// Controller ์ธํฐํ์ด์ค ๋ฐฉ์
public class OldController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) {
return new ModelAndView("hello");
}
}
// HttpRequestHandler ๋ฐฉ์
public class SimpleController implements HttpRequestHandler {
@Override
public void handleRequest(HttpServletRequest request, HttpServletResponse response) {
// ์ฒ๋ฆฌ ๋ก์ง
}
}
// HandlerAdapter ์ธํฐํ์ด์ค
public interface HandlerAdapter {
boolean supports(Object handler);
ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;
}
// @Controller์ฉ ์ด๋ํฐ
public class RequestMappingHandlerAdapter implements HandlerAdapter {
@Override
public boolean supports(Object handler) {
return handler instanceof HandlerMethod;
}
@Override
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) {
return invokeHandlerMethod((HandlerMethod) handler, request, response);
}
}
// Controller ์ธํฐํ์ด์ค์ฉ ์ด๋ํฐ
public class SimpleControllerHandlerAdapter implements HandlerAdapter {
@Override
public boolean supports(Object handler) {
return handler instanceof Controller;
}
@Override
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) {
return ((Controller) handler).handleRequest(request, response);
}
}


1๏ธโฃ ํด๋ผ์ด์ธํธ ์์ฒญ โ DispatcherServlet ๋์ฐฉ
2๏ธโฃ HandlerMapping โ ์ด๋ค ์ปจํธ๋กค๋ฌ๊ฐ ์ฒ๋ฆฌํ ์ง ํ์
3๏ธโฃ HandlerAdapter โ ํด๋น ์ปจํธ๋กค๋ฌ๋ฅผ ์คํ
4๏ธโฃ ์ปจํธ๋กค๋ฌ ์คํ โ ModelAndView ๋ฐํ
5๏ธโฃ ViewResolver โ ๋ทฐ ์ด๋ฆ์ ์ค์ ๋ทฐ ๊ฐ์ฒด๋ก ๋ณํ
6๏ธโฃ ๋ทฐ ๋ ๋๋ง(View Rendering)
7๏ธโฃ ํด๋ผ์ด์ธํธ์๊ฒ ์ต์ข
์๋ต ๋ฐํ

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
@Controller
public class HelloController {
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("message", "Hello, Spring!");
return "hello"; // view ์ด๋ฆ
}
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Hello Page</title>
</head>
<body>
<h1 th:text="${message}">(๋ฉ์์ง๊ฐ ๋ณด์ฌ์ง๋ ๊ณณ)</h1>
</body>
</html>

| ํจํด | ์ญํ | ํต์ฌ ํฌ์ธํธ |
|---|---|---|
| ํ๋ก ํธ ์ปจํธ๋กค๋ฌ | ์์ฒญ์ ๋จ์ผ ์ง์ ์ | ๊ณตํต ๋ก์ง ์ค์ ๊ด๋ฆฌ |
| ์ด๋ํฐ ํจํด | ๋ค์ํ ์ปจํธ๋กค๋ฌ ์ง์ | ๋คํ์ฑ ๊ธฐ๋ฐ ํ์ฅ์ฑ |
| DispatcherServlet | Spring MVC์ ํต์ฌ ์ปจํธ๋กค | ์์ฒญโ์๋ต ์ ์ฒด ํ๋ฆ ๊ด๋ฆฌ |