MVC 패턴
MVC는 소프트웨어를 Model, View, Controller라는 3가지 구성 요소로 구분한 개발 방법론
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 |