[Spring] MVC 패턴

2025. 4. 7. 09:31·Spring

✅ MVC 패턴이란?

  • 하나의 Servlet이나 JSP로 처리하던 것들을 Model, View, Controller 영역 으로 나눈것이다.

 

✅ MVC 패턴이 나온 이유

  • Servlet이나 JSP만으로 비지니스 로직과 View Rendering 까지 모두 처리 하면 너무 많은 역할을 하게 되고 유지보수가 굉장히 어려워져서 고안된 패턴이다.
  • Web Application은 일반적으로 MVC(Model View Controller) 패턴을 사용한다.

 

♐ 방법 1. Servlet 예시

  • 예를 들어, Servlet 에 모든 코드를 넣게 되면 아래의 코드와 같이 가독성과 재사용성이 굉장히 떨어지게 된다.
더보기
@WebServlet("/hello-world")
public class HelloWorldServlet extends HttpServlet {
// User 저장소
 private UserRepository repository = new UserReposito

 public HelloWorldServlet() {
 super();
 }
 protected void doGet(HttpServletRequest request, Htt
 throws ServletException, IOException {

Spring 입문 - 3주차 4
 response.setContentType("text/html;charset=utf-8
 PrintWriter out = response.getWriter();

 try {
 // 비지니스 로직을 처리하는 코드
 // 파라미터 조회
 String userIdParam = request.getParameter("u
 Long userId = null;
 if (userIdParam != null) {
 userId = Long.parseLong(userIdParam);
 }

 // 회원 조회
 String userInfo = repository.findById(userId

 // 화면을 그리는 코드 START
 out.println("<h1>Hello World!</h1>");
 out.println("<div>조회한 회원의 정보: " + userI
 // 화면을 그리는 코드 END


 } catch (NumberFormatException e) {
 // parsing 에러가 발생한 경우
 out.println("<div>Invalid user ID format</di
 } finally {
 out.close();
 }
 }
 protected void doPost(HttpServletRequest request, Ht
 throws ServletException, IOException {
 doGet(request, response);
 }
}

 

♐ 방법 2. JSP 로 VIEW 를 분리

  • JSP 로 View 부분만 분리하였지만 로직을 처리하는 코드가 아래와 같이 JSP 에 남아있다.
더보기
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
		<!-- HTML 코드... -->
		<!-- <%...%> 영역에는 Java 코드를 사용할 수 있다. -->
    <%
		    // 게시글 저장소 싱글톤으로 인스턴스 생성
		    BoardRepository boardRepository = BoardRepository.getInstance();
		    
		    // 게시글 제목, 내용 
        String title = request.getParameter("title");
        String content = request.getParameter("content");
        
        // 게시글 객체 생성
        Board board = new Baord(title, content);
        
        // 게시글 객체 저장
        repository.save(board);
        
    %>
    <div>
        ID : <input type ="text" name = "id" value="<%=id %>">
    </div>
		<!-- JSP 코드... -->
		<!-- HTML 코드... -->
    <jsp:forward page="<%=url %>" />
</body>
</html>

 

♐ Servlet 과 JSP 의 문제점

  1. Servlet 만 사용하면  View , 비즈니스 로직 모두 한곳에 존재하여 유지보수에 어려움이 생긴다.
  2. JSP에 View 책임을 분리 햇지만 JSP 안에 여전히 비즈니스 로직이 존재하여 이 또한 유지보수가 어렵다.

 

✅ MVC 패턴의 구조

 

 

♐ Controller 의 역할

  • HTTP Request를 전달받아 피라미터를 검증한다.
  • Service Layer로 비즈니스 로직을 전달한다.
  • DataBase와 상호작용하는 Repository Layer 를 추가한다.
  • View 에 전달할 결과를 조회하여  Model 객채에 임시로 저장한다.

 

♐ Model

  • View 에 출력할 Data를 저장하는 객체이다.
  • Database 와 접근을 제한하여 View Rending 에만 집중하면 된다. -> 책임 분리

 

♐ View

  • Model 객체에 담겨져 있는 Data를 사용하여 화면을 보여준다.

 

 

✅ MVC 패턴의 문제점

  • MVC 패턴을 적용 후 View의 역할은 필요한 데이터를 Model 에서 참조하여 화면을 그리는 역할만 수행하면 된다.     하지만 Controller에 해당하는 부분은 여전히 문제를 가지고 있다.
  • 프로젝트의 규모가 커지면 공통 기능이 추가될수록 Controller 에서 처리해야하는 부분이 많아진다.

 

✅ Spring MVC 란?

  • MVC 의 단점을 보완하여 프론트 컨트롤러 패턴, 어댑터 패턴이 적용된 구조를 가지고 있다.

 

✅ Spring MVC 의 구조

 

DispatcherServlet

1. 클라이언트 HTTP Request를 알맞게 파싱하고 클라이언트에게 알맞은 응 답을 반환

2. 핸들러 목록 정보를 알고있다.

3. 핸들러 어댑터 목록 정보를 알고있다. Spring 입문 - 3주차 33

 

HandlerAdapter

1. 자신이 처리할 수 있는 Handler인지 확인할 수 있는 기능(Method)이 필 요하다.

2. 프론트 컨트롤러에서 요청을 위임받았을 때 핸들러에게 요청을 지시하는 기 능이 필요하다.

3. return 시 Handler로부터 전달받은 결과를 알맞은 응답으로 변환한다.

 

Handler

1. 요청에 대한 로직을 수행하는 기능이 필요하다.

 

♐ 실행 순서

  1. Client로 부터 HTTP 요청(Request)을 받는다.
  2. Handler 조회
    • Handler Mapping을 통해 요청 URL에 Mapping된 Handler(Controller)를 조회
  3. Handler를 처리할 Adapter 조회
    • Handler를 처리할 수 있는 Handler Adapter를 조회
  4. Handler Adapter 실행(handle)
    • 알맞은 ****어댑터가 존재한다면 ****Handler Adapter에게 요청을 위임한다.
  5. Handler 실행(호출)
    • Handler Adapter가 실제 Handler(Controller)를 호출하여 실행 및 결과 반환
  6. Model And View 반환(return)
    • Handler Adapter는 Handler가 반환 하는 정보를 ModelAndView 객체로 변환하여 반환
  7. viewResolver 호출(알맞은 View 요청)
    • View Resolver를 찾고 실행
  8. View 반환
    • View Resolver는 View의 논리 이름을 물리 이름으로 전환하는 역할을 수행하고 Rendering 역할을 담당하는 View 객체를 반환
  9. View Rendering
    • View를 통해서 View를 Rendering

 

♐ Spring MVC 구조의 장점

  • Spring MVC는 HTTP Request를 처리하는 부분인 Controller, 데이터를 처리해 정제된 데이터를 넣는 Model, 정제된 데이터를 활용해 사용자에게 보여지는 View에 대한 역할 분리를 잘 해놓았다. 
  • Spring MVC를 사용하면 Model, View, Controller 모두를 인터페이스를 사용해 규격화해놓아 유연하고 확장성 있게 웹 어플리케이션을 설계할 수 있다.

 

Spring MVC는 웹 어플리케이션을 유연하고 확장 가능하게 만들어준다.

 

'Spring' 카테고리의 다른 글

[Spring] Annotation  (2) 2025.04.10
[Spring] Controller 와 RestContoller 의 차이  (0) 2025.04.10
[Spring]HTTP 란? (2)  (0) 2025.03.31
[Spring]HTTP 란? (1)  (0) 2025.03.20
[Spring]DNS,URI,URL이란?  (0) 2025.03.19
'Spring' 카테고리의 다른 글
  • [Spring] Annotation
  • [Spring] Controller 와 RestContoller 의 차이
  • [Spring]HTTP 란? (2)
  • [Spring]HTTP 란? (1)
코딩로봇
코딩로봇
금융 IT 개발자
  • 코딩로봇
    쟈니의 일지
    코딩로봇
  • 전체
    오늘
    어제
    • 분류 전체보기 (144) N
      • JavaScript (8)
      • SQL (11) N
      • 코딩테스트 (30)
        • Java (15)
        • SQL (13)
      • Java (10)
      • 프로젝트 (25)
        • 트러블슈팅 (9)
        • 프로젝트 회고 (14)
      • git,Github (2)
      • TIL (38)
      • Spring (18)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    스파르타 코딩 #부트캠프 #첫ot
    java #arraylist #list #배열
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩로봇
[Spring] MVC 패턴
상단으로

티스토리툴바