[ 2022.11.06 TIL-Spring MVC ]

Coosla·2022년 11월 6일
0

TIL

목록 보기
11/29
post-thumbnail

MVC 패턴과 Spring MVC

✏️ MVC 패턴이란?

  • 소프르웨어 공학에서 사용되는 다저안 패턴 중 하나
  • 사용자 인터페이스와 비즈니스 로직을 분리하여 각각의 로직을 독립적으로 운용하여 유지보수를 용이하게 만들 수 있는 디자인 패턴

✏️ MVC 구성 요소

  • Model
    • 내부 비즈니스 로직에 해당
  • View
    • 사용자 인터페이스
    • 요청에 대한 처리 결과를 View를 통해 클라이언트에게 화면을 통해 보여줌
  • Controller
    • 클라이언트의 요청을 처리하고 흐름 제어를 담당

✏️ MVC 모델 1 이해

  • view와 Controller를 JSP에서 모두 구현하는 구조
  • 장점
    • 빠르고 쉽게 개발 가능
  • 단점
    • Controller와 VIew가 혼재하여 유지보수가 어려움

✏️ MVC 모델 2 이해

  • MVC모델 1에서 혼재되어있던 Controller와 View를 분리
  • 사용자 요청을 Controller에서 받고 Controller는 해당 요청에 대해 판단하여 View로 보낼것인지 Model로 보낼 것인지 판단하여 전송
  • Model에서 비즈니스 로직 실행
  • Model에서 처리한 데이터를 Controller를 통해 View로 전달
  • Model에서 처리한 데이터와 View를 사용자에게 응답
  • 장점
    • 디자이너와 개발자의 분업이 가능
    • 유지보수 및 확장이 쉬움
  • 단점
    • 설계가 어려우며 개발 난이도가 높음

✏️ MVC 패턴의 장점

  • 기능별로 코드를 분리하여 하나의 파일에 코드가 모이는 것을 방지하여 가독성과 코드 재사용을 증가
  • 구성요소들을 독립시켜 협업을 할 때 맡은 부분의 개발에만 집중할 수 있어 개발의 효율성을 높임
  • 개발 후에도 유지보수성과 확장성이 보장

✏️ MVC 패턴의 한계

  • 페이지가 늘어날수록 컨트롤러 내 중복 코드가 지속적으로 발생
    • View로 이동하는 Forword 코드 중복
    • ViewPath 설정 코드 중복
  • 응답을 보낼 필요가 없는 경우 서블릿 내 response 코드가 사용되지 않음
  • Model과 View 사이에 Controller를 통해 소통이 이루어져서 의존성이 완전히 분리될 수 없음
  • 프로그램이 커질 수록 컨트롤러가 불필요하게 많아지는 현상 발생(Massive-View-Controller현상)
  • 공통 처리가 어려움

✏️ Front Controller 패턴 이해

  • Front Controller 패턴이란?

    • 모든 리소스 요청을 처리해주는 하나의 컨트롤러를 두는 패턴
  • Front Controller 특징

    • 프론트 컨트롤러를 통해 사용자의 요청을 받음
    • 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 해당 컨트롤러 호출
    • 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도됨
    • 공통 코드를 처리, 요청에 맞는 컨트롤러를 매핑(MVC 패턴의 한계를 해결)
  • Front Controller 동작과정

    1. 사용자의 요청을 프론트 컨트롤러가 받음
    2. 프론트 컨트롤러가 URL 매핑 정보(HandlerMapping)에서 컨트롤러가 있는지 체크
    3. 있으면 해당 컨트롤러를 호출하여 비즈니스 로직 처리
    4. 비즈니스 로직 반환 값으로 ModelView를 이용해 ViewResolver에서 View를 프론트 컨트롤러로 반환
    5. 프론트 컨트롤러가 View를 랜더하여 사용자에게 응답
  • Adepter 패턴을 같이 사용하면 프레임워크를 유연하고 확장성있게 설계할수 있음

✏️ Spring MVC 이해

  • Spring MVC 특징
    • 서블릿 기반의 웹 개발을 위한 MVC 프레임워크 제공
    • MVC 모델 2 아키텍처와 Front Controller 패턴을 프레임워크 차원에서 제공
    • Spring을 기반으로 하고 있어 Spring이 제공하는 트랜잭션 터리나 DI 및 AOP등을 손쉽게 사용가능
  • Spring MVC의 주요 구성 요소
    • DispatcherServlet
      • 클라리언트의 요청을 받아서 Controller에게 클라이언트의 요청을 전달, 리턴한 결과값을 View에게 전달하여 알맞은 응답을 생성
    • HandlerMapping
      • URL과 요청 정보를 기준으로 어떤 핸들러 객체를 사용할지 결정하는 객체
    • Controller
      • 클라이언트 요청을 처리한 뒤, Model을 호출하고 그 결과를 DispatcherServlet에게 알려줌
    • ModelAndView
      • Controller가 처리한 데이터 및 화면에 대한 정보를 보유한 객체
    • View
      • Controller의 처리 결과 화면에 대한 정보를 보유한 객체
    • ViewResolver
      • Controller가 리턴한 뷰 이름을 기반으로 Controller 처리 결과를 생성할 뷰를 결정
  • Spring MVC 동작 과정

참고

MVC 패턴

profile
프로그래밍 언어 공부 정리

0개의 댓글