MVC 패턴은 Model - View - Controller의 약자로, 소프트웨어 디자인 패턴 중 하나이며, 애플리케이션을 3개의 주요 구성 요소로 분리하여 역할을 나누는 아키텍처 패턴입니다. 웹 개발에서 특히 자주 사용되며, 유지보수성과 확장성을 높이는 데 도움이 됩니다.
1. Model (모델) – 데이터와 비즈니스 로직 담당
Model은 애플리케이션의 핵심 데이터와 그 처리 로직을 담고 있는 영역입니다.
Model의 구성 요소
- DTO (Data Transfer Object): 데이터 전달 객체
- Entity: DB 테이블과 매핑되는 객체
- Service 클래스: 핵심 비즈니스 로직 처리
- Repository (DAO): DB와 직접 통신
Entity 클래스
@Entity
public class User {
@Id @GeneratedValue
private Long id;
private String name;
private String email;
// 생성자, getter/setter
}
Repository 인터페이스
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByEmail(String email);
}
Service 클래스
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User findUserById(Long id) {
return userRepository.findById(id)
.orElseThrow(() -> new IllegalArgumentException("유저 없음"));
}
}
2. View (뷰) – 사용자에게 보여주는 화면 구성
View는 유저가 눈으로 보는 화면, 즉 UI를 담당합니다. 하지만 로직은 거의 포함하지 않으며, 데이터를 화면에 표시하는 데만 집중합니다.
View에 사용하는 기술
- HTML, CSS, JavaScript
- JSP, Thymeleaf (Spring에서 주로 사용)
- React, Vue 등 (프론트 분리형)
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><title>유저 정보</title></head>
<body>
<h2 th:text="${user.name} + '님 환영합니다!'">사용자 이름</h2>
<p th:text="'이메일: ' + ${user.email}">이메일</p>
</body>
</html>
위 예시는 Controller에서 넘겨준 user 객체의 데이터를 보여주는 화면입니다.
3. Controller (컨트롤러) – 요청 처리와 흐름 제어 담당
Controller는 사용자의 요청(HTTP 요청)을 받고, 알맞은 서비스를 호출하고, 처리 결과를 View로 연결해주는 중간 관리자 역할을 합니다.
Controller의 기능
- URL 요청을 처리 (@GetMapping, @PostMapping)
- Model에서 데이터 받아오기
- View에 데이터 전달
- 요청 파라미터 수집 및 검증
예시 (Spring MVC)
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public String getUser(@PathVariable Long id, Model model) {
User user = userService.getUserById(id);
model.addAttribute("user", user);
return "userDetail"; // userDetail.html
}
}
전체 흐름 요약
[1] 사용자가 URL 입력 (/user/1)
↓
[2] DispatcherServlet이 요청을 받음
↓
[3] 해당 URL을 처리할 Controller 호출
↓
[4] Controller는 Service를 통해 데이터 조회
↓
[5] 조회한 데이터를 Model에 담아 View에 전달
↓
[6] View는 데이터를 사용자에게 화면으로 출력
'웹' 카테고리의 다른 글
| 스프링 프레임워크(Spring Framework)란? (5) | 2025.05.20 |
|---|---|
| WAS에 대하여 (2) | 2025.05.19 |
| 클라이언트-서버 구조에 대하여 (5) | 2025.05.15 |
| HTTP(HyperText Transfer Protocol) (0) | 2025.05.14 |