[Concept] Spring MVC

Van·2023년 5월 30일
0

Spring MVC

Goal

  • MVC1, MVC2에 대해 간략하 알아보자
  • Spring MVC에 대해 간략히 알아보자

Introduction

Spring MVC는 기존의 MVC 패턴의 여러 차례 변형하고 Spring 프레임워크가 가지고 있는 여러 기능을 결합하여 웹 애플리케이션 개발을 위한 모듈로 제공되고 있다.


MVC1


MVC1은 MVC 패턴의 초기 버전을 의미합니다.

1. 모델(model)

  • 데이터와 비즈니스 로직을 담당합니다
  • 데이터베이스와 상호 작용, 데이터의 유효성 검사, 데이터 조작 등을 처리합니다
  • 모델은 주로 데이터를 저장하고 관리하며, 애플리케이셔션의 핵심 로직을 구현합니다

2. 뷰(view)

  • 사용자에게 정보를 표시하는 부분을 담당합니다
  • UI(사용자 인터페이스)를 구성합니다
  • MVC1에서는 JSP, HTML 템플릿을 사용합니다

3. 컨트롤러(controller)

  • 사용자의 입력을 처리하고, 모델과 뷰 간의 상호작용을 조정합니다.
  • 사용자의 요청을 수신하고, 해당 요청에 대한 적절한 모델의 처리를 호출하며, 처리 결과를 적절한 뷰로 전달합니다.

MVC1은 주로 JSP(Java Server Pages)를 사용하여 뷰와 컨트롤러를 구현합니다. JSP는 사용자의 요청을 처리하는 컨트롤러로 동작하고, 처리 결과를 다시 JSP를 통해 뷰로 전달합니다. 이로써 JSP는 컨트롤러와 뷰의 역할을 모두 수행합니다.

장점

장점으로는 단순한 구조로 이해하기 쉽고 JSP를 사용하여 뷰와 컨트롤러를 함께 작성하여 UI와 비즈니스 로직을 한번에 처리하기 때문에 빠르게 개발할 수 있습니다.
작은 규모의 프로젝트나 단순한 웹 애플리케이션에 적합한 구조입니다.

단점

단점으로는 앞서 언급한 뷰와 컨트롤러가 강하게 결합되어 JSP에서 직접 처리되므로 코드이 유지보수가 어렵고 변경 사항이 전체 애플리케이션에 영향을 주어, 코드의 가독성과 재사용성이 저하되고 비즈니스 로직이 JSP에 포함되어 테스트 하기 어렵습니다. 또한 앞서 언급한대로 강하게 결합되어 있어 확장에도 어려움이 있습니다.

이러한 단점들을 극복하고자 MVC2와 같은 발전된 버전의 MVC패턴이 등장하였습니다.


MVC2

MVC2는 MVC1의 단점을 보완하여 등장하였습니다.

1. 모델(model)

  • 데이터와 비즈니스 로직을 담당합니다.
  • 데이터베이스와의 상호 작용, 데이터의 유효성 검사, 데이터 조작등을 처리합니다.
  • MVC2에서는 일반적으로 데이터베이스와의 연동을 위해 DAO(Data Access Object)패턴을 사용합니다.

2. 뷰(view)

  • 사용자에게 정보를 표시하는 부분으로, 주로 UI(사용자 인터페이스)를 구성합니다.
  • MVC2에서는 JSP, HTML, 클라이언트 측 JavaScript 등을 사용하여 뷰를 구현할수 있습니다.

3. 컨트롤러(controller)

  • 사용자의 입력을 처리하고, 모델과 뷰 사이의 상호작용을 조정합니다.
  • 사용자의 요청을 수신하고, 해당 요청에 대한 적절한 모델의 처리를 호출하며, 처리 결과를 적절한 뷰로 전달합니다.
  • MVC2에서는 일반적으로 서블릿이나 프레임워크의 컨트롤러 역할을 담당합니다.

MVC2의 주요한 차별점은 컨트롤러의 역할이 확장되었다는 점입니다. 요청을 하나의 컨트롤러(Servlet)가 먼저 받습니다. MVC1과는 다르게 JSP와 같은 뷰가 일부 컨트롤러 역할을 담당했지만, MVC2에서는 별도의 컨트롤러가 요청을 처리하고 모델과 뷰를 조정합니다. 이를 통해 컴포넌트 간의 역할 분리와 유연성이 증가하여 개발자가 애플리케이션을 보다 쉽게 유지하고 확장할 수 있습니다. 그러므로 개발자는 Model, View, Controller 중에서 수정해야 할 부분이 있다면, 그것만 꺼내어 수정하면 됩니다.

MVC2는 MVC1보다 구조가 복잡해질 수 있지만, 개발자가 이러한 세부적인 구성까지 신경쓰지 않을 수 있도록 각종 프레임워크들이 지금까지 잘 발전되어 왔습니다. 그 중에서 대표적인 것이 바로 스프링 프레임워크입니다.


Spring MVC

주요 구성 사항

Model

데이터와 비즈니스 로직을 담당합니다. Spring MVC에서는 Java 객체로 표현되며, 주로 POJO(Plain Old Java Object)로 구현됩니다. 데이터베이스나 외부 서비스와 상호작용을 담당하는 DAO(Data Access Object)클래스와 함께 사용됩니다.

View

사용자 인터페이스를 표시합니다. Spring MVC에서는 주로 JSP(Java Server Page)나 Thymleaf와 같은 템플릿 엔진을 사용하여 뷰를 구현합니다. 뷰는 사용자에게 결과를 표시하고, 모델에서 제공하는 데이터를 사용하여 동적으로 콘텐츠를 생성합니다. Spring MVC에서는 뷰 리졸버(View Resolver)를 사용하여 컨트롤러가 반환한 뷰의 이름을 실제 뷰로 변환합니다.

Contoller

사용자의 요청을 처리하고, 비즈니스 로직을 호출하며, 모델과 뷰를 조정합니다. 주로 클래스로 구현되며, @Controller 어노테이션을 사용하여 표시됩니다. 컨트롤러는 사용자의 요청을 수신하고, 해당 요청에 대한 알맞은 비즈니스 로직을 호출한 후 결과를 적절한 뷰로 전달합니다.

DispatcherServlet

Spring MVC의 핵심 컴포넌트로서, Front Controller(프론트 컨트롤러)패턴으로 Spring에서는 디스패처 서블릿으로 모든 클라이언트 요청을 받아들이고 적절한 핸들러로 요청을 전달합니다. DispatcherServlet은 설정 파일에 등록되며, 요청의 라우팅, 컨트롤러의 선택, 뷰의 렌더링 등으 관리합니다.

HanlderMapping

요청을 처리할 적절한 컨트롤러를 선택하기 위한 매핑 역할을 수행합니다. 요청 URL 패턴과 컨트롤러를 매핑시키는 역할을 합니다.

ViewResolver

요청 결과로 보여줄 뷰를 결정하는 역할을 수행합니다. 뷰 리졸버는 뷰 이름을 기반으로 실제 뷰 객체를 찾아 반환합니다.

profile
그럭저럭 어렵지 않게 Smile!

0개의 댓글