마이의 개발 블로그

[Spring] 스프링 MVC(Spring MVC) 본문

개발지식/Spring

[Spring] 스프링 MVC(Spring MVC)

개발자마이 2023. 9. 15. 00:41
반응형

MVC 패턴과 스프링 MVC

MVC 패턴은 소프트웨어 디자인 패턴 중 하나로 개념적으로 모델(model), 뷰(view), 컨트롤러(controller)의 세 가지 요소로 소프트웨어를 구성하는 방식을 말합니다. 개념적이라고 표현한 이유는 실제 프로젝트로 들어가게 되면 이 세가지의 요소 이외에도 중간 중간 연관된 요소들이 다양한 형태로 존재하여 구조를 한눈에 파악하기가 어렵고 눈에 보이지 않는 곳에서 동작하는 코드가 많기 때문입니다. 스프링 MVC는 스프링 프레임워크에서 MVC패턴 또는 REST API 패턴의 웹 개발을 단순하게 하기 위해 고안된 모듈입니다.

스프링 MVC(Spring MVC)의 구조와 흐름

스프링 MVC패턴의 아키텍쳐는 시간이 지남에 따라 모델1 -> 모델2 -> 모델2 + 프론트 콘트롤러 방식으로 발전해왔습니다. 스프링 MVC에는 모델2 + 프론트 콘트롤러(이하 모델2)가 구현되어있으며 이 방식의 기본적인 흐름은 들어오는 모든 요청을 프론트 콘트롤러에서 처리한다는 것입니다. 스프링을 공부하며 수강했던 Udemy 강의에 마침 적절한 MVC 구조도가 있어 가져와봤습니다.

 

스프링 MVC 구조도(출처: Udemy 스프링부트 강의)

 

스프링 MVC에서 프론트 컨트롤러(연두색 네모) 역할은 디스패처 서블렛(Dispatcher Servlet)이 담당합니다. 클라이언트로부터 요청이 들어오면 요청은 다음과 같은 순서로 처리됩니다.

 

1. 디스패처 서블렛은 들어온 요청을 식별하여 그에 맞는 컨트롤러 메서드(노란 동그라미)를 실행합니다

2. 컨트롤러 메서드에서는 비즈니스 로직 처리 후 모델과 뷰 이름을 디스패처 서블렛에게 반환합니다.

3. 디스패처 서블렛은 반환받은 뷰 이름과 모델을 뷰 리졸버(view resolver, 녹색 마름모)에게 전달합니다.

4. 뷰 리졸버는 뷰 이름으로 반환할 뷰 파일을 찾아 디스패처 서블렛에 전달합니다.

5. 디스패처 서블렛은 2번에서 반환받은 모델을 포함하여 뷰를 렌더링하고 응답을 전송합니다.

스프링 프레임워크, 스프링 MVC, 스프링 부트 비교

이 세 가지는 동등한 비교의 대상은 아니지만 개념을 명확하게 하기위해 각각 요약해보면 아래와 같이 정리할 수 있습니다:

 

- 스프링 프레임워크: 의존성 주입을 통해 개발자가 핵심 로직에만 집중할 수 있도록 도와주는 자바 기반 앱 개발 프레임워크

- 스프링 MVC: 웹앱, REST API 구성을 간편하게 만드는 스프링 모듈

- 스프링 부트: 내장된 여러 기능과 자동 설정을 통해 빠른 개발을 가능하게하는 스프링 프로젝트

 

프로젝트의 전체 구조는 스프링 프레임워크를 기반으로 만들어지지만, 용도와 상황에 따라 스프링 MVC와 스프링 부트를 사용하여 개발할지를 결정해야 합니다. 상황에 따라 스프링 프레임워크만으로도 개발이 가능한 경우도 있고, MVC패턴 또는 REST API 등의 웹개발이 필요한 경우 스프링 MVC를 이용합니다. 부가기능과 빠른 프로덕션이 필요한 경우 스프링 부트를 이용하는 것이 훨씬 효율적입니다.

 

간단히 말해 보통 웹 개발을 한다면 Spring MVC를 사용하게 되는데, 필요에 따라 스프링 부트를 사용할지를 결정하여 1) 처음부터 프로젝트를 스프링 부트로 생성할지, 2) Spring MVC 프로젝트를 생성할지를 결정하면 된다는 의미입니다. 참고로 스프링 부트의 spring-web 모듈이 스프링 MVC를 포함하기에 스프링 MVC모듈과 스프링 부트는 상호 배타적인 관계가 아닙니다.

반응형
Comments