Model, View, Controller의 약자이다.
애플리케이션을 개발할 때 구성요소를 3가지의 역할로 구분한 것을 말한다.
Model은 기능을 수행하는 서비스이자 비즈니스 로직이다.
View는 사용자에게 보여지는 화면이자 UI(사용자 인터페이스)를 의미한다.
Controller는 모델과 뷰의 중간 다리 역할을 하는 영역이다.
사용자의 요구사항을 처리해줄 서비스의 메서드(비즈니스 로직)를 호출하고, 그에 대한 실행 결과를 다시 화면으로 전달해주는 역할을 한다.
Dispatcher Servelet
스프링 MVC의 프론트 컨트롤러이다.
가장 앞단에서 클라이언트의 요청을 처리하는 컨트롤러로 전반적인 처리과정을 관리한다.
DispacherServlet 도 부모 클래스에서 HttpServlet을 상속받아서 사용하고, 서블릿으로 동작한다.
Handler
Handler는 스프링 MVC에서 웹 요청을 처리하는 객체를 의미한다.
컨트롤러를 일종의 핸들러라 부를 수 있다.
핸들러는 DispatcherServlet가 전달해준 HTTP 요청을 처리하고 결과를 Model에 저장한다.
ModelAndView
컨트롤러 처리 결과 후 반환된 Model과 View가 담긴 객체이다.
viewResolver
ModelAndView를 처리하여 View를 반환한다.Model에 있는 데이터를 이용하여 View에 데이터 정보를 넘긴다.
클라이언트 서버의 비동기 통신
@GetMapping("/check-username")
public boolean checkUsername(@RequestParam String loginId) {
return service.checkLoginIdDuplicate(loginId);
}
@GetMapping("/check-username")
public boolean checkUsername(@RequestParam(required = true) String username,
@RequestParam(required = false) Integer idx) {
return service.checkLoginIdDuplicate(username, idx);
}
@GetMapping("/check-username")
public boolean checkUsername(@RequestParam(required = true, defaultValue = "test") String username,
@RequestParam(required = false, defaultValue = "1") Integer idx) {
return service.checkLoginIdDuplicate(username, idx);
}
@GetMapping("/check-username")
public boolean UserMap(@RequestParam Map<String, Object> paramMap) {
return service.checkLoginIdDuplicate(paramMap);
}
@PostMapping("/users")
public void createUser(@RequestBody UserVO userVO) {
log.info(userVO.getUserId() + "/" + userVO.getUserNm()); // 출력 결과 : test123 / 개발새발
}
@GetMapping("/user/info/{userId}")
public String userInfo(@PathVariable String userId, Model model) {
log.info("Fetching user info for userId: {}", userId);
User user = service.getLoginUser(userId);
if (user == null) {
log.warn("User not found for userId: {}", userId);
return "redirect:/login";
}
log.info("User found: {}", user);
model.addAttribute("user", user);
return "user/info";
}
@GetMapping("/user/info/{userId}/id/{idx}")
public String userInfo(@PathVariable String userId, @PathVariable int idx) {
log.info("Fetching user info for userId: {}, idx:{}", userId, idx);
return "user/info";
}
@GetMapping("/user/info/{userId}")
public String userInfo(@ModelAttribute User user) {
log.info("Fetching user info for userId: {}, username={}", user.getUserId(), user.getUsername());
return "user/info";
}
@GetMapping("/data")
public @ResponseBody List<String> getData() {
List<String> list = new ArrayList<>();
list.add("도레미");
list.add("파솔라");
list.add("시도");
return list;
}
@GetMapping("/users/{id}")
@ResponseStatus(HttpStatus.NOT_FOUND)
public void getUserById(@PathVariable String id) {
}
@GetMapping("/")
public ResponseEntity<User> getUser() {
User user = userService.getUser();
return ResponseEntity.ok(user);
}
@GetMapping("/")
public ResponseEntity<User> getUser() {
User user = userService.getUser();
//생성자 패턴
return new ResponseEntity(body, headers, HttpStatus.valueOf(200));
}
@GetMapping("/")
public ResponseEntity<User> getUser() {
User user = userService.getUser();
//빌더 패턴
return ResponseEntity.ok()
.headers(headers)
.body(body);
}
참고자료
https://www.inflearn.com/course/스프링-mvc-1#curriculum
https://dangdangee.tistory.com/entry/Spring-PathVariable-사용법
https://congsong.tistory.com/16
https://devpad.tistory.com/105