Spring MVC Pattern

Polla·2023년 5월 31일
0

개인정리

목록 보기
4/4
post-thumbnail

SOPT 하면서 궁금했던 MVC 패턴 찾아보기 근데 공식문서를 곁들인 ,,,



SOPT를 시작하면서 정말 빠르게 많은 것을 배우게 되었다.
정리를 하지 않으면 체화하기 어려울 것 같아서 이참에 정리해보는 MVC 패턴...



MVC란?


기본적으로 디자인 패턴에서 비롯된 것으로 객체를,

  • 사용자의 요청을 받아 데이터를 Model에게 의뢰 후, View에 반영하여 사용자에게 알리는 Controller

  • Data 같은 내부 비즈니스를 처리하는 Model

  • 사용자에게 화면을 보여주는 View

3가지로 분리하는 개발 방법론을 의미합니다.


MVC 패턴 규칙


사실, 솝커톤 하기 전까지는 MVC 패턴에 대해서
큰 구조적이면 면을 찾아보느라 몰랐는데 리드 분을 통해 규칙의 존재에 대해서
들을 수 있었다.
땡쓰 Sopt...

  • Model
1. Model은 Controller와 View 에 의존하지 말아야 한다.
2. 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다.
3. 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야만 한다.
  • Controller
1. Model이나 View에 대해서 알고 있어야 합니다.
2. Model이나 View의 변경을 모니터링 해야 합니다.
  • View
1. Model이 가지고 있는 정보를 따로 저장해서는 안된다.
2. Model이나 Controller 에 의존하거나 알고 있으면 안된다.
3. 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야만 한다.

Spring MVC 란?


사실 MVCSpring MVC가 같다고 생각했었다.
그렇지만 찾아보니 MVC 자체도 구조에 따라 이름이 나뉘고, Spring MVC는 이중에도
MVC2Spring Framework를 합친 구조라는걸 알 수 있었다.
틀리면 꼭 말씀 해주세요..

Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, "Spring Web MVC," comes from the name of its source module (spring-webmvc), but it is more commonly known as "Spring MVC".

https://docs.spring.io/spring-framework/reference/web/webmvc.html

위와 같은 구조로,
기존에 모든것을 혼자 처리하던 JSP를 두는 MVC1과 다르게
Front Controller 즉, 공통적인 요청을 하나의 Servlet이 받아
알맞은 Controller로 전송하는 구조
인 것 같았다.

이를 위해
해당 작업에 맞는 Controller를 찾는 Handler Mapping이 존재하고
비즈니스 로직을 Service를 통해 완료한 Controller가 결과를 Servlet에게 다시 리턴
하고 ModelView Resolver을 통해 찾은View객체 를 지나
Dispatcher Servlet에 보내는 로직이라는 판단이 들었다.

맞을까요...? 틀리면 꼭 말해주세요


나는 이때 궁금증이 하나 더 들었다.

그러면 Handler Mapping은 해당 작업에 맞는 Controller를 어떻게 찾을까?

이를 docs.spring.io 에서는

Spring 2.5 introduced an annotation-based programming model for MVC controllers that uses annotations such as @RequestMapping, @RequestParam, @ModelAttribute
https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/mvc.html

라고 소개하고 있다.
내가 지금까지 사용했던 @RequestMapping이 나는 내가 사용할 URL임을 알리는 어노테이션인줄 알았지만 이는 사실 Controller와 매핑해주는 복잡한 작업을 해주는 것이었던 것.

그러면 또 생각이 든다... 내부를 뜯어보자!

@RequestMapping


우선 @RequestMapping을 타고 들어가보면

Both Spring MVC and Spring WebFlux support this annotation through a
RequestMappingHandlerMapping and RequestMappingHandlerAdapter in their respective modules and package structure.

이라고 설명되어 있었다.

즉 이 어노테이션은 RequestMappingHandlerMapping을 통해 역할을 수행한다는 것인데 이것이 무엇일까?

위에서 Dispatcher Servlet을 설명했을 때,
이는 MVC1과 다르게 정보를 가지고 있다가 요청이 왔을때 어느 Controller가 처리할지 식별한다고 했었다.

그렇다면 요청된 매핑 정보를 관리하고, 요청이 왔을 때 이를 처리하는 대상을 찾는 것을 RequestMappingHandlerMapping 이라고 볼 수 있지 않을까?
실제로 공식 문서의 Special bean types in the WebApplicationContext
에서 Handler Mapping을 찾을 수 있었다.




마치며..


물론 아직 많이 부족하기도 하고 언젠가 다시 이 글을 보면 잘못된 점들이 있을수도 있을 
것이라는 생각이 있다. 그래도 SOPT를 들어오고 처음으로 자바를 하고 처음으로 Spring을
하면서 이해하기 어렵고 궁금했던 부분들이 조금은 해소된 것 같다...
이걸 기반으로 의미있는 코드를 작성해야지...!
profile
트러블 슈팅 Blog => https://polla.palms.blog/home

0개의 댓글