JSP MVC Architecture

JSP MVC 아키텍처 (JSP MVC Architecture)

MVC 패턴 개요 (Overview of MVC Pattern)

MVC(Model-View-Controller) 패턴은 소프트웨어 설계 패턴으로, 애플리케이션을 세 가지 주요 구성 요소로 분리합니다:

  • Model: 애플리케이션의 데이터와 비즈니스 로직을 관리합니다.
  • View: 사용자에게 정보를 표시하는 역할을 합니다.
  • Controller: 사용자의 입력을 처리하고, 그에 따라 모델과 뷰를 업데이트합니다.

MVC 패턴은 코드의 유지보수성과 확장성을 높이고, 역할 분리를 통해 개발 효율성을 증대시킵니다.

JSP와 서블릿을 이용한 MVC 구현 (Implementing MVC using JSP and Servlets)

JSP와 서블릿을 사용하여 MVC 패턴을 구현하는 방법을 살펴보겠습니다. 간단한 회원 관리 시스템을 예제로 설명합니다.

Model (모델)

모델은 데이터와 비즈니스 로직을 관리합니다. 여기서는 사용자 정보를 관리하는 User 클래스와 데이터베이스 작업을 수행하는 UserDAO 클래스를 사용합니다.

예제: User.java

package com.example.model;

public class User {
    private String username;
    private String password;
    private String email;

    // 생성자, 게터, 세터
    public User(String username, String password, String email) {
        this.username = username;
        this.password = password;
        this.email = email;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

예제: UserDAO.java

package com.example.dao;

import com.example.model.User;
import java.sql.*;

public class UserDAO {
    private Connection getConnection() throws SQLException {
        String jdbcURL = "jdbc:mysql://localhost:3306/mydb";
        String dbUser = "root";
        String dbPassword = "password";
        return DriverManager.getConnection(jdbcURL, dbUser, dbPassword);
    }

    public boolean insertUser(User user) {
        String sql = "INSERT INTO users (username, password, email) VALUES (?, ?, ?)";
        try (Connection conn = getConnection(); 
             PreparedStatement pstmt = conn.prepareStatement(sql)) {
            pstmt.setString(1, user.getUsername());
            pstmt.setString(2, user.getPassword());
            pstmt.setString(3, user.getEmail());
            int affectedRows = pstmt.executeUpdate();
            return affectedRows > 0;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }

    // 추가적인 데이터베이스 작업 메서드들 (예: getUser, updateUser, deleteUser)
}

Controller (컨트롤러)

컨트롤러는 사용자의 입력을 처리하고, 모델과 상호작용한 후 결과를 뷰에 전달합니다. 서블릿을 사용하여 컨트롤러를 구현합니다.

예제: UserServlet.java

package com.example.controller;

import com.example.dao.UserDAO;
import com.example.model.User;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;

public class UserServlet extends HttpServlet {
    private UserDAO userDAO;

    public void init() {
        userDAO = new UserDAO();
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        String action = request.getServletPath();

        try {
            switch (action) {
                case "/register":
                    registerUser(request, response);
                    break;
                // 추가적인 액션 처리 (예: 로그인, 사용자 정보 수정)
            }
        } catch (Exception e) {
            throw new ServletException(e);
        }
    }

    private void registerUser(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String email = request.getParameter("email");

        User newUser = new User(username, password, email);
        boolean isSuccess = userDAO.insertUser(newUser);

        if (isSuccess) {
            response.sendRedirect("register-success.jsp");
        } else {
            response.sendRedirect("register-failure.jsp");
        }
    }

    // doGet 메서드 및 추가적인 메서드들
}

View (뷰)

뷰는 사용자에게 정보를 표시하는 역할을 합니다. JSP를 사용하여 뷰를 구현합니다.

예제: register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
    <title>회원 가입</title>
</head>
<body>
    <h2>회원 가입</h2>
    <form action="register" method="post">
        사용자 이름: <input type="text" name="username" required><br>
        비밀번호: <input type="password" name="password" required><br>
        이메일: <input type="email" name="email" required><br>
        <input type="submit" value="가입">
    </form>
</body>
</html>

예제: register-success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
    <title>가입 성공</title>
</head>
<body>
    <h2>회원 가입에 성공했습니다!</h2>
    <a href="login.jsp">로그인</a>
</body>
</html>

예제: register-failure.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
    <title>가입 실패</title>
</head>
<body>
    <h2>회원 가입에 실패했습니다. 다시 시도해주세요.</h2>
    <a href="register.jsp">다시 시도</a>
</body>
</html>

이로써 JSP와 서블릿을 사용하여 MVC 패턴을 구현하는 방법을 상세히 설명했습니다. 모델은 데이터와 비즈니스 로직을 관리하고, 컨트롤러는 사용자의 입력을 처리하며, 뷰는 사용자에게 정보를 표시합니다. 이 패턴을 사용하면 애플리케이션의 코드 구조가 명확해지고 유지보수성이 향상됩니다.

Leave a Reply

Your email address will not be published. Required fields are marked *