MVC 패턴이 뭐고 Model, View, Controller가 각각 무슨 역할을 하는지 스프링부트 예시로 정리했습니다.
MVC란
애플리케이션을 Model(데이터), View(화면), Controller(중간 처리) 세 가지 역할로 나누는 설계 패턴입니다. 한 클래스가 데이터 처리부터 화면 출력까지 다 하지 않고, 역할별로 책임을 쪼개는 게 핵심입니다.
- Model: 데이터와 비즈니스 로직 (예: User, UserService, DB 조회 결과)
- View: 사용자에게 보여지는 화면 (예: Thymeleaf 템플릿, JSON 응답)
- Controller: 요청을 받아서 Model을 호출하고, 결과를 View에 전달하는 중간 다리
흐름
① 클라이언트 요청 → Controller
② Controller가 Model(Service)을 호출해서 데이터 처리
③ Model이 처리 결과를 Controller에 반환
④ Controller가 결과를 View에 전달
⑤ View가 화면(또는 JSON)을 만들어서 응답
스프링부트 코드로 보면
java
// Model - 데이터와 로직
@Service
public class UserService {
public List<User> findAll() {
return userRepository.findAll(); // DB 조회
}
}
// Controller - 중간 다리 역할
@Controller
public class UserController {
@GetMapping("/users")
public String getUsers(Model model) {
List<User> users = userService.findAll(); // ② Model 호출
model.addAttribute("users", users); // ④ View에 데이터 전달
return "users"; // View 이름 반환
}
}
html
<!-- View - resources/templates/users.html -->
<ul>
<li th:each="user : ${users}" th:text="${user.name}"></li>
</ul>
UserController는 직접 DB를 조회하지도, HTML을 만들지도 않습니다. UserService(Model)에 데이터를 요청하고, 받은 결과를 users.html(View)에 넘겨주는 역할만 합니다.
왜 나누는가
한 클래스에 DB 조회, 비즈니스 로직, 화면 출력이 다 섞여 있으면, 화면 디자인 하나 바꾸려 해도 로직 코드까지 건드릴 위험이 커집니다. 역할을 나눠두면 화면(View)만 바꾸거나, 로직(Model)만 바꾸는 게 서로 영향 없이 가능해집니다. 여러 명이 같이 개발할 때도 "이 사람은 화면, 저 사람은 로직"처럼 역할을 나눠 작업하기 쉬워집니다.
마무리 정리
데이터는 Model, 화면은 View, 그 사이를 이어주는 건 Controller.
'DEV > cs' 카테고리의 다른 글
| [CS] 애자일(Agile) 방법론이란 (1) | 2026.09.28 |
|---|---|
| [CS] 오버로딩 vs 오버라이딩 비교 (0) | 2026.09.27 |
| [CS] OSI 7계층이란 - 각 계층 역할 정리 (0) | 2026.09.25 |
| [CS] 큐(Queue)란 - 구조와 활용 예시 (0) | 2026.09.24 |
| [CS] RESTful API란 - REST의 의미부터 쉽게 (0) | 2026.09.23 |