개요
안녕하세요. J4J입니다.
이번 포스팅은 스프링을 이용한 MVC패턴 구현 중 첫 번째인 Spring MVC에 대해 적어보는 시간을 가져보려고 합니다.
MVC패턴이란?
소프트웨어 디자인 패턴 중 하나로 Model(모델), View(뷰), Controller(컨트롤러)와 같이 3가지의 구성요소로 나누어 비즈니스 처리 로직과 사용자 인터페이스를 구분하며 개발하기 위해 사용됩니다.
디자인 패턴 중 가장 처음으로 듣게 될 만큼 웹/앱 분야에서 널리 사용되는 패턴이며 스프링 또한 MVC패턴을 기반으로 만들어진 프레임워크이기도 합니다.
각각의 구성요소에 대해 알아보도록 하겠습니다.
모델(Model)
먼저 Model은 데이터를 관리하고 비즈니스 로직을 처리하는 구간입니다.
Model은 사용자의 요청이 들어오면 단순히 그에 맞는 로직 처리만 수행합니다.
다른 말로 표현하면 데이터가 어디에 사용되는지 또는 사용자들에게 어떻게 표현되는지에는 전혀 관심을 가지지 않습니다.
뷰(View)
View는 사용자 인터페이스가 표현되는 구간입니다.
모델로부터 전달받은 데이터를 사용자에게 보여주는 화면만을 의미하기 때문에 어떤 데이터가 넘어왔는지에는 관심을 가지지 않습니다.
그리고 View는 사용자에게 보여지는 화면을 구성하는 단위이기 때문에 MVC패턴에서는 다수의 View가 존재할 수 있습니다.
컨트롤러(Controller)
Controller는 Model과 View의 연결을 위한 구간입니다.
Model과 View는 서로 통신이 될 수 없기 때문에 Controller가 두 구간 사이를 연결해주는 역할을 수행합니다.
View를 통해 사용자의 요청이 들어오면 Controller에 알려주고, Controller는 해당 요청을 Model에 알려 비즈니스 로직이 처리되도록 하며, 결과적으로 사용자는 요청한 데이터로 구성된 화면을 제공받을 수 있는 것입니다.
MVC패턴 사용 이유 및 한계
MVC패턴을 사용하는 이유는 위에서 언급한바와 같이 비즈니스 처리 로직과 사용자 인터페이스를 위한 화면이 명확하게 구분되어 있기 때문입니다.
서로 분리되어 있기 때문에 각자 맡은 역할에만 집중하게 되어 유연성 증가, 쉬운 확장성, 유지보수 비용 절감 등의 이점들을 가져오게 됩니다.
하지만 시스템 규모가 커질수록 Model과 View의 의존 관계도 덩달아 높아지게 됩니다.
결과적으로 코드가 복잡해지고 크기가 비대해지기 때문에 점점 시스템 운영 및 관리가 힘들어지는 상황이 발생됩니다.
이런 MVC패턴의 한계점을 보완하기 위해 MVP, MVVM 등과 같은 다양한 디자인 패턴들이 생기게 되었습니다.
스프링 MVC
위에서 잠시 언급한바와 같이 스프링도 MVC패턴을 기반으로 만들어진 프레임워크이고 MVC패턴 동작을 위해 스프링에는 dispatcher servlet이라는 것이 존재합니다.
dispatcher servlet은 웹사이트의 모든 요청을 처리하는 프론트 컨트롤러(Front Controller)로 사용자의 모든 요청과 응답을 관리하는 역할을 수행합니다.
사용자의 요청이 들어오면 controller에 전달하고, 비즈니스 로직이 처리된 model을 view에 넘겨주며, 사용자에게 보여질 화면과 함께 응답을 해줌으로 스프링이 원활하게 동작될 수 있게 도와줍니다.
dispatcher servlet을 제외한 나머지 구성 요소들과 코드 구현을 위한 환경 설정들은 다음 포스팅에서 이어서 작성하도록 하겠습니다.
참조
정리
이상으로 스프링을 이용한 MVC패턴 구현 중 첫 번째인 Spring MVC에 대해 간단하게 알아보는 시간이었습니다.
읽어주셔서 감사합니다.
'Spring > Spring' 카테고리의 다른 글
[Spring] 스프링을 이용한 MVC패턴 구현(4) - @Service 구성 (0) | 2021.02.16 |
---|---|
[Spring] 스프링을 이용한 MVC패턴 구현(3) - MySQL, MyBatis, @Repository 구성 (0) | 2021.02.13 |
[Spring] 스프링을 이용한 MVC패턴 구현(2) - 프로젝트 초기 설정 방법 (0) | 2021.02.11 |
[Spring] 제어의 역전(IoC), 의존성 주입(DI) (4) | 2021.02.07 |
[Spring] 단위 테스트(JUnit Test) (0) | 2021.02.04 |
댓글