MVC란? Model-View-Controller 디자인 패턴
각각의 역할을 분리하여 설계, 구현, 협업에서 유리한 디자인 패턴 중 하나다.
Model
•
데이터와 비즈니스 로직을 담당
•
데이터베이스와 연동하여 데이터를 저장하고 불러오는 등의 작업을 수행
View
•
사용자 인터페이스를 담당
•
사용자가 보는 화면과 버튼, 폼 등을 디자인하고 구현
Controller
•
Model과 View 사이의 상호작용을 조정하고 제어합
•
사용자의 입력을 받아 Model에 전달하고, Model의 결과를 바탕으로 View를 업데이트
Web Servlet은 어땠을까?
이게 고작 1개의 기능인데, 다수의 요청 메소드는 위 구조와 유사한 것을 반복하여 개발해야 하는 불편함이 있다.
Web Servlet의 API 구성 모습이다.
@WebServlet(urlPatterns = "/user/logout")
public class UserLogoutServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
// ...
}
}
...
@WebServlet(urlPatterns = "/user/login")
public class UserLoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
// ...
}
}
...
@WebServlet(urlPatterns = "/user/signup")
public class UserSingUpServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
// ...
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
// ...
}
}
Java
복사
위 코드 처럼 Servlet 방식은 코드량이 너무 많다.
그럼 Spring MVC란? 어떻게 패턴을 적용한 것인가?
더 복잡해보인다. 하지만? 실제로 개발자는 빨간 박스인 Controller만 잘 구성하면 된다. 다른 일들은 Spring이 해준다. 그게 Framework의 장점이고 특징이다.
Spring Web MVC는 Servlet API를 기반으로 구축된 웹 프레임워크다.
Spring MVC는 중앙에 있는 DispatcherServlet이 요청을 처리하기 위한 공유 알고리즘을 제공하는 Front Controller 패턴을 중심으로 설계한다.
하지만, Spring MVC 이후로는 아래 코드처럼 간결하고 정리된 형태로 여러 요청 메소드를 구성 할 수 있게 되었다.
@Controller
@RequestMapping("/user")
public class UserController {
@GetMapping("/login")
public String login() {
// ...
}
@GetMapping("/logout")
public String logout() {
// ...
}
@GetMapping("/signup")
public String signup() {
// ...
}
@PostMapping("/signup")
public String registerUser(SignupRequestDto requestDto) {
// ...
}
}
Java
복사
Spring MVC는 효율적인 API 처리를 위해 Front Controller 패턴을 만듦
•
이제는 API 마다 파일을 만들 필요 없음(Servlet 방식은 API마다 하나씩 클래스 파일을 만들어야 함, 중복 코드가 너무 많음)
◦
보통 하나의 Contoller 에 관련된 API만 모음
◦
유사한 성격의 API 를 하나의 Controller 로 관리
간단히 Spring은 가운데 Servlet부분을 프레임워크로 제공하는 것이며,
나(개발자)는 Controller구성만, 프론트 개발자는 Client만 구성하면 된다.
Controller → DispathcerServlet → Client
그만큼 Spring MVC는 말 그대로 개발자는 소프트웨어의 핵심 설계인 M과 V와 C에 개발에 집중 할 수 있으며 Spring은 그 연결들을 어노테이션 및 각종 클래스, 메소드, 설정 파일 등으로 지원하는 느낌으로 생각하면 된다.