웹 프로젝트를 진행하며 알아야 하는 개념 일부를 정리하는 블로그를 써보겠습니다.
Model-View-Controller 의 구성으로 이뤄진 소프트웨어 디자인 패턴 중 하나입니다.
애플리케이션을 Model, View, Controller의 세가지 구성 요소로 분리하여 관리하게 됩니다.
유지보수성을 높이고, 구성 요소를 분리하기 때문에 책임을 명확히 하여 효율적인 개발 과정이 진행되도록 합니다.
애플리케이션의 데이터 구조와 비즈니스 로직을 관리합니다.
데이터베이스와 상호작용, 데이터 검증, 비즈니스 규칙 등을 담당합니다.
사용자에게 데이터를 표시하고, 사용자로부터 입력을 받을 수 있는 UI를 제공합니다.
사용자로부터의 요청을 받아 처리할 비즈니스 로직으로 전달하고, 적절한 뷰를 선택하여 응답을 생성합니다.
Java 기반 웹 애플리케이션에서 HTTP 요청을 처리하고, 응답을 생성하는 컴포넌트입니다.
주로 Controller의 일부로 간주됩니다.
사용자 요청을 처리하고, 모델과 상호 작용하여 데이터를 준비하여 적절한 뷰로 전달합니다.
DispatcherServlet 으로부터 요청을 받음RequestMapping을 통해 적절한 컨트롤러 메서드를 호출Manager 또는 DAO와 상호 작용함모든 HTTP 요청을 중앙에서 받아 적절한 컨트롤러로 분배하는 프론트 컨트롤러 역할입니다.
Spring MVC와 같은 프레임워크에서 핵심적인 역할을 함
요청 흐름을 관리하고, 요청을 처리할 컨트롤러를 결정
RequestMapping 을 사용하여 요청을 처리할 적절한 컨트롤러를 찾음특정 요청을 단순히 다른 리소스로 포워딩하는 간단한 컨트롤러입니다.
특정 URL 패턴이나 HTTP 메서드에 따라 컨트롤러 메서드를 매핑하는 데 사용되는 어노테이션 또는 설정입니다.
@Controller
public class UserController {
@RequestMapping(value = "/signup", method = RequestMethod.POST)
public String handleSignup(User user) {
// 비즈니스 로직 처리
return "signupSuccess";
}
}
DispatcherServlet이 요청을 받으면 RequestMapping을 통해 어떤 메서드가 요청을 처리할지 결정데이터베이스와의 상호 작용을 추상화하여 데이터 접근 로직을 관리합니다.
CRUD 작업을 수행하며, 데이터베이스 관련 변경이 있을 경우 DAO만 수정하면 됩니다.
Manager 또는 Controller 로부터 데이터 접근 요청을 받음public class ProfessorDAO {
public Professor findProfessorByEmail(String email) {
// 데이터베이스에서 이메일로 교수 조회
}
public boolean createProfessor(Professor professor) {
// 데이터베이스에 교수 생성
}
}
애플리케이션의 비즈니스 엔티티를 표현하는 개체입니다. 주로 데이터베이스 테이블과 1:1로 매핑되며, 비즈니스 데이터를 캡슐화힙니다.
DAO를 통해 데이터베이스로부터 데이터를 가져오거나 저장Controller나 Manager에서 비즈니스 로직을 처리할 때 사용 public class Professor {
private int id;
private String professorId;
private String name;
private String email;
private String password;
private String dept;
private String professorOffice;
private char deleted;
private String createdAt;
// Getters and Setters
}
비즈니스 로직을 구현하는 계층입니다. 여러 DAO를 조합하여 복잡한 비즈니스 요구 사항을 처리합니다.
Controller로부터 비즈니스 작업 요청을 받음DAO를 통해 조회하거나 조작public class ProfessorSignupManager {
private ProfessorDAO professorDAO;
public ProfessorSignupManager() {
this.professorDAO = new ProfessorDAO();
}
public boolean registerProfessor(Professor professor) {
if(professorDAO.findProfessorByEmail(professor.getEmail()) != null) {
return false; // 중복 이메일
}
// 비밀번호 해싱 및 기타 로직
return professorDAO.createProfessor(professor);
}
}
[Client (Browser)]
|
v
[DispatcherServlet]
|
v
[Controller] ----> [ForwardController]
| |
v v
[Manager] [View (JSP)]
|
v
[DAO] <----> [Domain]
|
v
[Database]