Spring Web MVC는 요청 → 컨트롤러 → 서비스/DAO → 모델 → 뷰 흐름을 표준화하고, DI 컨테이너가 레이어 간 의존을 관리해 유연한 웹 애플리케이션을 구성한다.
Controller: 요청 수신, 파라미터 가공, 서비스 호출, Model 구성 후 뷰로 전달
Service: 비즈니스 로직, 트랜잭션/Connection 라이프사이클 관리
DAO: DB CRUD, JDBC/ORM로 데이터 접근 전담
핵심 포인트
ResultSet 등 DB 의존 타입은 DAO 내부에서만 사용하고 DTO/VO로 전달
| 구성요소 | 역할 |
|---|---|
| DispatcherServlet | 요청 중앙집중 처리, 핸들러 위임 |
| HandlerMapping | 요청 ↔ 컨트롤러 매핑 결정 |
| HandlerAdapter | 컨트롤러 호출 방식 추상화 |
| Controller | 비즈니스 로직 트리거, 모델 생성 |
| Model | 뷰에 전달할 데이터 컨테이너 |
| ViewResolver | 뷰 탐색 및 선택 |
| View | 모델 기반 렌더링 |
@RequestMapping 핵심클래스/메서드 레벨에 선언하여 URL/HTTP 메서드/파라미터 조건을 매핑한다.
@Controller
public class MenuController {
@RequestMapping("/menu/regist")
public String registMenu(Model model) {
model.addAttribute("message", "신규 메뉴 등록용 핸들러 메소드 호출함...");
return "mappingResult"; // templates/mappingResult.html
}
}
@RequestMapping(value = "/menu/modify", method = RequestMethod.GET)
public String modifyMenu(Model model) {
model.addAttribute("message", "GET 방식의 메뉴 수정용 핸들러 메소드 호출함...");
return "mappingResult";
}
| HTTP | 어노테이션 |
|---|---|
| GET | @GetMapping |
| POST | @PostMapping |
| PUT | @PutMapping |
| DELETE | @DeleteMapping |
| PATCH | @PatchMapping |
@GetMapping("/menu/delete")
public String getDeleteMenu(Model model) { ... }
@PostMapping("/menu/delete")
public String postDeleteMenu(Model model) { ... }
@Controller
@RequestMapping("/order/*")
public class OrderController {
@GetMapping("/regist")
public String registOrder(Model model) {
model.addAttribute("message", "GET 주문 등록 핸들러 호출");
return "mappingResult";
}
}
@RequestMapping(value = {"modify", "delete"}, method = RequestMethod.POST)
public String modifyAndDelete(Model model) {
model.addAttribute("message", "POST 수정/삭제 공통 처리");
return "mappingResult";
}
@PathVariable 경로 변수@GetMapping("/order/detail/{orderNo}")
public String selectOrderDetail(Model model, @PathVariable int orderNo) {
model.addAttribute("message", orderNo + "번 주문 상세 조회");
return "mappingResult";
}
@RequestMapping
public String otherRequest(Model model) {
model.addAttribute("message", "order 요청이나 다른 기능은 준비되지 않음");
return "mappingResult";
}
<h3 th:text="${message}"></h3>
Model#addAttribute("message", ...) 로 전달한 값을 출력한다.
@RequestMapping, 세부는 메서드 레벨로 분리@GetMapping 등)