본문 바로가기
한화시스템 Beyond SW Camp/백엔드

[Java] MVC 패턴, Layered 패턴

by taeh00n 2025. 1. 15.

MVC 패턴

MVC는 소프트웨어를 Model, View, Controller라는 3가지 구성 요소로 구분한 개발 방법론

MVC 패턴

MVC 패턴의 흐름을 알아보겠다

1. 사용자의 요청을 Controller가 받는다.

2. Controller는 Service에서 비즈니스 로직을 처리 후 Model에 담는다.

3. Model에 저장된 결과를 바탕으로 시각적으로 출력하는 View를 사용해 사용자에게 전달한다.

 

Controller : 사용자의 요청을 받아서 Service 메소드를 호출 -> 데이터를 처리하고 Model 객체에 담아 View로 전달.

Service : 비즈니스 로직을 처리하는 계층. 필요한 데이터의 처리를 한다.

Model : 실제로 데이터를 담는 객체. DTO나 Entity 객체로 데이터가 저장.

View : Model에서 전달된 데이터를 사용자에게 시각적으로 보여주는 역할

 

 

간단한 예제를 통해 MVC 패턴을 살펴보겠다.

User

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

    public User(String email, String password, String name) {
        this.email = email;
        this.password = password;
        this.name = name;
    }

//... Getter, Setter 생략...
}

UserController

@WebServlet("/user/*")
public class UserController extends HttpServlet {

    private UserService userService;

    public UserController() {
        userService = new UserService();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String action = req.getPathInfo();
        if ("/signup".equals(action)) {
            User user = new User(
                    req.getParameter("email"),
                    req.getParameter("password"),
                    req.getParameter("name")
            );
            userService.signup(user);
            resp.sendRedirect("/user/login");
        }
    }
}

사용자가 /signup 경로로 Post 요청을 보내면 User 객체를 생성한다. 생성된 User 객체는 Service에 signup() 메소드로 전달되어 회원가입 로직이 실행될 것이다.

 

UserService

public class UserService {
    private UserDao userDao;

    public UserService() {
        this.userDao = new UserDao(DbConnection.getConnection());
    }

    public void signup(User user) {
        String originPassword = user.getPassword();
        user.setPassword("암호화됨" + originPassword);
        userDao.insertUser(user);
    }
}

위의 코드에서는 "암호화됨" 이라는 문자열만 붙여서 비즈니스 로직을 표현하였다. 실제로 암호화같은 데이터 처리가 비즈니스 로직을 처리하는 Service에서 일어난다. 그리고 DB에 저장하기 위해 userDao.insertUser(user)를 호출한다.

 

UserDao

public class UserDao {
    private Connection conn;

    public UserDao(Connection conn) {
        this.conn = conn;
    }

    public void insertUser(User user) {
        String sql = "INSERT INTO user (email, password, name) " +
                "VALUE ('"+user.getEmail()+"','"+user.getPassword()+"','"+user.getName()+"')";
        try {
            conn.createStatement().executeQuery(sql);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

UserDao데이터베이스와 상호 작용한다. Connection 객체를 통해 데이터베이스와 연결하고 insertUser() 메소드로 사용자 정보를 데이터베이스에 삽입한다.

signup.jsp (View)

<html>
<head>
    <title>회원가입</title>
</head>
<body>
<form action="/user/signup" method="post">
    <p>이메일 : <input type="text" name="email"></p>
    <p>비밀번호 : <input type="password" name="password"></p>
    <p>이름 : <input type="text" name="name"></p>
    <button>가입하기</button>
</form>
</body>
</html>

signup.jsp 즉 View는 사용자에게 데이터를 시각적으로 출력한다.

 

 

위의 코드로 간단히 살펴보면은 MVC 패턴은 Controller는 사용자 요청을 받고, Service에서 비즈니스 로직을 처리한 후 Model을 업데이트하며, View에 결과를 전달하는 구조이다.

이러한 흐름을 통해 각 계층이 독립적으로 역할을 나누고, 코드의 유지보수성도 높이며, 각 계층을 독립적으로 테스트 할 수 있게 된다.

 


Layered 패턴

프리젠테이션 계층 (Presentation Layer) - View + Controller

사용자 인터페이스 및 사용자 요청을 처리하는 계층

 

애플리케이션 계층 (Application Layer) - Controller + Service

애플리케이션의 비즈니스 로직을 처리하는 계층

 

도메인 계층 (Domain Layer) : Model

도메인 객체와 관련된 로직을 처리하는 계층

 

영속성 계층 (Persistence Layer) : Dao

데이터베이스와의 상호작용을 처리하는 계층

 

 

'한화시스템 Beyond SW Camp > 백엔드' 카테고리의 다른 글

[Java] 카카오 로그인  (1) 2025.01.31
[Java] SQL Injection  (0) 2025.01.19
[IntelliJ] Tomcat Servlet, mariaDB 연동  (0) 2025.01.08
[Java] 스레드  (1) 2025.01.08
[Java] 스트림  (0) 2025.01.07