MVC패턴

euicheol0910 2025. 5. 13. 17:20

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