웹 개발/웹 개발 기초

MVC 개념 및 모델1 vs 모델2

Blue_bull 2025. 2. 7. 21:08

📌 초급 개발자를 위한 MVC 개념 및 모델1 vs 모델2 정리

MVC(Model-View-Controller)는 웹 애플리케이션에서 비즈니스 로직, UI, 데이터 처리를 분리하는 아키텍처 패턴입니다.
이 패턴을 사용하면 코드의 재사용성이 증가하고 유지보수가 쉬워집니다.
초창기 웹 개발에서는 모델1(Model1) 방식을 사용했지만, 이후 모델2(Model2) 방식으로 발전하였습니다.


✅ 1. MVC(Model-View-Controller)란?

MVC는 애플리케이션을 세 부분(Model, View, Controller)으로 나누어 설계하는 패턴입니다.
Model(모델) → 데이터 & 비즈니스 로직
View(뷰) → 사용자 인터페이스(UI)
Controller(컨트롤러) → 요청을 처리하고 Model과 View를 연결

🔹 MVC 구조 흐름

1️⃣ 클라이언트가 요청 (브라우저 → 서버)
2️⃣ 컨트롤러가 요청을 받고(Model을 호출하여 데이터를 처리)
3️⃣ 모델이 데이터를 가공하여 컨트롤러에게 반환
4️⃣ 컨트롤러가 뷰(View)에 데이터를 전달
5️⃣ 뷰(View)는 사용자가 볼 수 있도록 화면을 렌더링하여 응답

✅ 2. 모델1(Model1) 방식이란?

JSP 파일이 모든 역할(요청 처리, 데이터 처리, UI 표시)을 담당하는 방식
컨트롤러 없이 JSP 내부에서 Java 코드(<% %>)를 사용하여 데이터를 처리
소규모 프로젝트에서 빠르게 개발 가능하지만, 유지보수 어려움

🔹 모델1 방식 예제 (JSP가 모든 역할 수행)

<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ page import="java.sql.*" %>
<html>
<body>
    <%
        // 데이터베이스 연결
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password");
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT * FROM users");

        // HTML과 Java 코드가 뒤섞여 있음
        while (rs.next()) {
            out.println("<p>이름: " + rs.getString("name") + "</p>");
        }
    %>
</body>
</html>

📌 💡 모델1 방식의 특징
빠르게 개발 가능 (초기 설정이 쉬움)
비즈니스 로직과 UI가 혼합되어 유지보수가 어려움
코드 재사용성이 낮고, 확장성이 부족


✅ 3. 모델2(Model2) 방식이란? (MVC 패턴 기반)

JSP가 데이터를 직접 처리하지 않고, 컨트롤러(서블릿)에서 데이터를 처리한 후 JSP로 전달하는 방식
비즈니스 로직과 UI가 분리되어 유지보수가 용이함
대규모 프로젝트에서도 사용 가능

🔹 모델2 방식 예제 (JSP는 UI만 담당, 서블릿이 데이터 처리)

@WebServlet("/userlist")
public class UserController extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        UserDao dao = new UserDao();
        List<User> users = dao.getAllUsers();

        request.setAttribute("users", users);  // 데이터를 JSP로 전달
        RequestDispatcher dispatcher = request.getRequestDispatcher("userlist.jsp");
        dispatcher.forward(request, response);
    }
}

서블릿(UserController)이 요청을 받고 데이터를 처리한 후 JSP로 전달

🔹 JSP (View 역할, UI만 담당)

<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ page import="java.util.List, mypackage.User" %>
<%
    List<User> users = (List<User>) request.getAttribute("users");
%>
<html>
<body>
    <h2>사용자 목록</h2>
    <ul>
        <% for(User user : users) { %>
            <li><%= user.getName() %></li>
        <% } %>
    </ul>
</body>
</html>

📌 💡 모델2 방식의 특징
비즈니스 로직과 UI가 분리되어 유지보수가 쉬움
컨트롤러가 중간에서 역할을 수행하여 코드 구조가 깔끔함
대규모 프로젝트에 적합 (Spring 같은 프레임워크와 호환 가능)
초기 설정이 모델1보다 복잡함


✅ 4. 모델1 vs 모델2 비교

비교 항목 모델1 방식 (JSP 중심) 모델2 방식 (MVC 패턴)
구조 JSP 파일이 모든 역할 수행 서블릿(Controller)이 비즈니스 로직 담당, JSP(View)와 분리
코드 유지보수 ❌ 어려움 (Java 코드 + HTML 혼합) ✅ 쉬움 (역할이 분리됨)
재사용성 ❌ 낮음 (비즈니스 로직이 JSP에 포함됨) ✅ 높음 (Controller가 로직을 처리)
적합한 프로젝트 작은 규모의 빠른 개발 대규모 프로젝트, 협업이 필요한 환경
속도 ✅ 초기 개발 속도 빠름 ❌ 초기 설정 필요하지만 유지보수 용이

✅ 5. 결론 (초급 개발자로서 알아야 할 핵심 내용)

모델1 방식은 빠르게 개발할 수 있지만, 유지보수가 어렵고 비효율적이므로 실무에서는 거의 사용되지 않음.
모델2 방식은 MVC 패턴을 따르며, 비즈니스 로직과 UI가 분리되어 유지보수가 용이하여 실무에서 일반적으로 사용됨.
Spring과 같은 프레임워크는 모델2 기반의 MVC 패턴을 사용하므로, 초급 개발자는 모델2 방식을 익혀야 함.

🚀 이제 MVC와 모델1 vs 모델2의 차이를 확실히 이해했을 거야! 😊
👉 다음 단계: Spring MVC 패턴 이해하기!

'웹 개발 > 웹 개발 기초' 카테고리의 다른 글

EL, JSTL이란?  (0) 2025.02.07
서블릿 매핑 방식  (0) 2025.02.07
HTTP전달방식(GET방식과 POST방식)  (0) 2025.02.07
포워딩, 리다이렉트 비교  (0) 2025.02.07
URL과 URI의 차이  (1) 2025.02.05