스프링 mvc란 무엇인가?

메이도·2023년 4월 11일

mvc란?

model view controller의 약자이다.
model: 비즈니스 로직을 처리하고 데이터를 관리하는 부분으로 데이터베이스에 입력하거나 출력된 데이터를 다루는 역할
view: model에서 처리한 비즈니스 로직의 결과를 화면으로 나타낸다.(Dao/Service)
controller: model과 view를 연결해주는 중간부분.
스프링 mvc에서는 controller에서 로직을 수행하고, 수행한 결과를 model에 넣어 view에 반영해 클라이언트에게 뷰를 보여주는 것.
https://emongfactory.tistory.com/121
https://velog.io/@shi9476/%EC%8B%A4%EB%AC%B4%EC%97%90%EC%84%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-Spring-MVC-%EA%B5%AC%EC%A1%B0-%EC%88%9C%EC%84%9C-%EC%82%AC%EC%9A%A9-%EC%99%84%EB%B2%BD-%EC%A0%95%EB%A6%AC

스프링에서의 mvc 동작 흐름

  • DispatcherServlet이 클라이언트로부터 요청을 받는다.
  • HandlerMapping으로 요청받은 url과 매칭하는 controller가 있는지 확인해 DispatcherServlet에게 알려준다.
  • ControllerAdapter가 요청에 맞는 controller에게 클라이언트의 요청을 전달한다.
  • controller->service로 이동해 service에서 비즈니스 로직 수행 후 service->controller
  • service 수행 결과를 controller에서 ModelMap에 담아 view name과 맵으로 묶어 ModelAndView 객체를 반환한다. 이 객체는 다시 ControllerAdpater을 통해 DispatcherServlet으로 전달된다.
  • DispatcherServlet에서 ViewResolver로 객체를 전달한다. ViewResolver에서는 view name에 해당하는 페이지를 찾아 model의 데이터와 함께 화면을 만들어 DispatcherServlet에게 전달해준다.
  • DispatcherServlet에서 클라이언트로 뷰를 전달한다.

참조: https://velog.io/@solchan/Spring-Spring-MVC란-무엇인가

스프링 mvc는 주로 jsp와 같은 서버 사이드 렌더링에서 많이 사용되는 패턴이다.
@RestController 어노테이션을 사용해 컨트롤러를 생성하고 json 객체를 반환하는 스프링부트의 형식은 스프링 mvc가 아니라 스프링을 rest api를 만드는데만 사용했다고 할 수 있다.
지금까지 스프링부트로 프로젝트를 하며 mvc 패턴을 사용중이라 생각했는데 이번 기회를 통해 mvc 패턴이 뭔지 정확하게 알게 된 것 같다.

또한 우리가 스프링으로 rest api를 만들 때 보통 controller와 service를 1대 1의 관계로 만들어 controller에서 사용자 요청을 받아 service에서 비지니스 로직을 수행 후 다시 controller에서 응답을 보내는 방식으로 진행하는데,
프로젝트를 클래스 구조로 만들게 되면 인터페이스(a,b)를 다중상속 받은 클래스(C, D, E) 여러 개의 객체를 갖고 클래스(C, D, E)를 사용하는 용도의 추상클래스(F)를 controller가 다시 상속받아 controller 안에서는 추상 클래스 F의 추상 함수를 강제로 구현하거나, 오버라이딩 혹은 추상 클래스 F를 확장할 수 있는 신기한 방법도 있다는 것을 알게 됐다.
다만 이 방법은 비슷한 기능의 service와 controller를 여러 개 만들어 코드의 복잡도가 높아지는 것을 막게 강제로 컨벤션(제약)을 주는 방법으로 일반적으로 사용하는 방법은 아닌 듯 하다.
이 방식에 대해 더 잘 알게 된다면 언젠가 다시 정리할 기회가 생기면 좋겠다.

0개의 댓글