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>
- 사용자가 /hello.jsp에 접근.
- hello.jsp에서 데이터베이스 연결, 데이터 처리, 화면 렌더링 모두 처리.
2. JSP Model2
특징
Model2는 MVC 패턴(Model-View-Controller)을 도입하여 JSP의 단점을 보완한 구조입니다.
- 구조:
- Servlet (Controller): 클라이언트의 요청을 받아 비즈니스 로직을 호출하고 결과를 JSP로 전달.
- Service, DAO, Beans (Model): 데이터 처리 및 비즈니스 로직 수행.
- JSP (View): 데이터를 화면에 출력.
- 장점:
- 역할 분리를 통해 유지보수 용이.
- 협업에 유리(백엔드와 프론트엔드 작업 분리).
- 단점:
- 복잡한 설정과 코드가 필요.
예제 흐름
- 사용자가 /hello 요청.
- HelloServlet이 요청을 처리하고 비즈니스 로직 호출.
- 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 흐름 예제
- 사용자가 /hello 요청.
- HelloController가 요청을 받아 helloService 호출.
- 서비스 계층에서 처리된 데이터를 hello.jsp에 전달.
- 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 |