SpringBoot

Model1 -> Model2 -> SpringMVC

데브킹덕 2024. 11. 22. 17:41

1. JSP Model1

특징

Model1은 초창기 JSP 기반 웹 애플리케이션에서 사용된 구조입니다.

  • 구조: JSP 파일 하나가 요청을 처리하고 결과를 렌더링합니다.
  • 처리 방식: 클라이언트의 요청을 JSP에서 직접 처리하며 비즈니스 로직과 화면 로직이 모두 JSP에 포함됩니다.
  • 장점:
    • 간단하고 빠르게 개발 가능
    • 작은 프로젝트에 적합
  • 단점:
    • 유지보수의 어려움: JSP에 모든 로직을 구현하기 때문에 코드가 길고 복잡해집니다.
    • 비효율적인 협업: 프론트엔드와 백엔드 로직이 섞여 있어 역할 분리가 어렵습니다.

ex)

<%@ page import="java.sql.*" %>
<html>
<head>
    <title>Hello</title>
</head>
<body>
    <h1>Hello, User!</h1>
    <%
        // 비즈니스 로직: 데이터베이스 연결
        String url = "jdbc:mysql://localhost:3306/testdb";
        String user = "root";
        String password = "password";

        try (Connection conn = DriverManager.getConnection(url, user, password);
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT name FROM users WHERE id = 1")) {

            if (rs.next()) {
                out.println("<p>Welcome, " + rs.getString("name") + "!</p>");
            }
        } catch (Exception e) {
            out.println("<p>Error: " + e.getMessage() + "</p>");
        }
    %>
</body>
</html>
  1. 사용자가 /hello.jsp에 접근.
  2. hello.jsp에서 데이터베이스 연결, 데이터 처리, 화면 렌더링 모두 처리.

2. JSP Model2

특징

Model2는 MVC 패턴(Model-View-Controller)을 도입하여 JSP의 단점을 보완한 구조입니다.

  • 구조:
    • Servlet (Controller): 클라이언트의 요청을 받아 비즈니스 로직을 호출하고 결과를 JSP로 전달.
    • Service, DAO, Beans (Model): 데이터 처리 및 비즈니스 로직 수행.
    • JSP (View): 데이터를 화면에 출력.
  • 장점:
    • 역할 분리를 통해 유지보수 용이.
    • 협업에 유리(백엔드와 프론트엔드 작업 분리).
  • 단점:
    • 복잡한 설정과 코드가 필요.

예제 흐름

  1. 사용자가 /hello 요청.
  2. HelloServlet이 요청을 처리하고 비즈니스 로직 호출.
  3. JSP로 데이터를 전달하고 화면을 렌더링.
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.IOException;

public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 비즈니스 로직 처리
        String name = "User"; // 실제로는 서비스 계층에서 데이터 가져옴
        request.setAttribute("name", name);

        // View로 이동
        RequestDispatcher dispatcher = request.getRequestDispatcher("/hello.jsp");
        dispatcher.forward(request, response);
    }
}
<html>
<head>
    <title>Hello</title>
</head>
<body>
    <h1>Hello, ${name}!</h1>
</body>
</html>

3. Spring MVC

Spring MVC는 Model2의 개념을 확장하고 강력한 기능을 추가한 프레임워크입니다.

특징

  • 구조:
    • Controller: @Controller와 같은 어노테이션으로 요청을 처리.
    • Service/Repository (Model): 비즈니스 로직과 데이터 처리 담당.
    • View: JSP, Thymeleaf와 같은 뷰 템플릿 엔진을 사용.
  • 장점:
    • 설정 파일을 줄이고 어노테이션 기반의 코딩 방식 제공.
    • Spring DI(의존성 주입)으로 객체 간 결합도 감소.
    • 강력한 유효성 검사, 국제화 지원, AOP 등을 쉽게 적용 가능.
    • 다양한 View 지원(JSP, Thymeleaf, JSON 등).
  • 단점:
    • 학습 곡선이 있음.
    • 초기 설정 복잡.

Spring MVC 흐름 예제

  1. 사용자가 /hello 요청.
  2. HelloController가 요청을 받아 helloService 호출.
  3. 서비스 계층에서 처리된 데이터를 hello.jsp에 전달.
  4. JSP가 데이터를 렌더링하여 사용자에게 응답
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {

    @GetMapping("/hello")
    public String sayHello(Model model) {
        // 비즈니스 로직 처리
        String name = "User"; // 실제로는 서비스 계층에서 처리
        model.addAttribute("name", name);

        // View 이름 반환
        return "hello";
    }
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Hello</title>
</head>
<body>
    <h1>Hello, <span th:text="${name}">User</span>!</h1>
</body>
</html>

비교

구분 Model1 Model2 Spring MVC
구조 JSP 하나에 모든 로직 포함 MVC 패턴 도입 MVC + 스프링 기능 확장
유지보수성 낮음 중간 높음
개발 속도 빠름 보통 초기에는 느리지만 이후 효율
적용 사례 소규모 프로젝트 중소규모 프로젝트 중대규모 프로젝트

 


참고 자료

 

'SpringBoot' 카테고리의 다른 글

WAS란?  (0) 2024.09.03
SQL Mapper - Mybatis  (4) 2024.09.02
[Spring Boot] JPA를 왜 써야할까??  (0) 2024.06.27
[SpringBoot] Gradle 이란? (Build Tool)  (0) 2024.06.26