본문 바로가기
스파르타 내일배움캠프/TIL(Today I learned)

25.04.03 TIL - MVC 패턴(1)

by pandastic 2025. 4. 3.
반응형

 

 

 

 

MVC 패턴

1. Template Engine

    - 동적인 웹 페이지를 생성하기 위해 사용되는 도구.

    - 템플릿을 기반으로 정적인 부분과 동적인 데이터를 결합하여 HTML, XML 등의 문서를 생성하는 역할 수행.

 

→ 흔히 말하는 UI(User Interface)를 만들며, SSR(Server Side Rendering)에 사용.

 

  • 템플릿 엔진이 나온 이유
    • 자바 코드로 HTML을 만들어 내는 것이 아닌 HTML 문서에 동적으로 변경해야 하는 부분만 자바 코드를 넣을 수 있다면 편리함.
  • 대표적인 템플릿 엔진
    1. Thymeleaf
      1. Spring과 통합이 잘 되어있음.
      2. 다양한 기능을 포함하고 있음.
    2. JSP(Java Server Pages)
      1. 예전엔 많이 사용했으나, 현재 안 쓰는 추세.
    3. FreeMarker
    4. Velocity
    5. Mustache

 

2. MVC 패턴 개요

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

 

1. Servlet

  • Servlet 문제점
    • 화면을 그리는 View 영역과 비즈니스 로직이 Servlet 하나에 모두 섞여있음.
    • 책임을 너무 많이 가지고 있음.
  • Servlet 동작 순서
    1. 사용자가 Client(브라우저)를 통해 서버에 HTTP Request 즉, API 요청 함.
    2. 요청을 받은 Servlet 컨테이너는 HttpServletRequest, HttpServletResponse객체를 생성.
    3. 설정된 정보(URL, HTTP Method)를 통해 어떠한 Servlet에 대한 요청인지 찾음.
    4. 해당 Servlet에서 service 메서드를 호출한 뒤 브라우저의 요청 Method에 따라 doGet() 혹은doPost() 등의 메서드를 호출.
    5. 서버에서 응답을 생성한 뒤 HttpServletResponse객체에 응답을 담아 Client(브라우저)에 반환.
    6. 응답이 완료되면 생성한 HttpServletRequest, HttpServletResponse객체를 소멸함.

 

2. JSP

  • Servlet 코드에서 HTML을 만드는 부분인 View가 분리.
  • Servlet, JSP 방식의 문제점
    1. Servlet만을 사용한 경우 View를 위한 코드와 비지니스 로직을 처리하는 코드가 Servlet에 모두 존재하여 유지보수가 어려워짐.
    2. JSP를 사용하여 View를 분리하였지만 비지니스 로직의 일부가 JSP 파일안에 존재함.
    3. 여전히 책임이 많아 유지보수가 어려움.

 

3. MVC 패턴

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

 

  • MVC 패턴 구조
    • Controller
      • 예시 코드에서 Servlet에 해당하는 영역이다.
        1. HTTP Request를 전달받아 파라미터를 검증한다.
        2. 비지니스 로직을 실행한다.
          • 비지니스 로직을 Controller에 포함하게되면 Controller가 너무 많은 역할을 담당하게 되어 일반적으로 Service Layer를 별도로 만들어서 처리.
          • Database와 상호작용 하는 Layer를 따로 구분하여 Repository Layer를 추가로 구성.
          • Controller도 비지니스 로직을 포함할 수 있지만 일반적으로 Service Layer를 호출하는 역할을 담당.
        3. View에 전달할 결과를 조회하여 Model 객체에 임시로 저장.
      • Model
        1. View에 출력할 Data를 저장하는 객체.
        2. View는 비지니스 로직이나 Data 접근을 몰라도 되고 View Rendering에만 집중.(책임 분리)
      •  View
        • 예시 코드에서 JSP에 해당하는 영역.
        • Model 객체에 담겨져 있는 Data를 사용하여 화면을 Rendering함.

 

반응형