DEV/cs

[CS] MVC 패턴이란 - 스프링부트 예시로 정리

강한 2026. 9. 26. 23:15

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.