✅ MVC 패턴이란?

졸용·2025년 8월 15일

🔹역할과 책임

  • Model:

    • 도메인 데이터와 규칙(비즈니스 로직)을 보유
    • 영속성(Entity + Repository), 서비스 로직 (도메인 서비스/애그리게이트), DTO 등이 포함될 수 있다
    • 변경 시 뷰/컨트롤러를 직접 알 필요 없다 (느슨한 결합).
  • View:

    • 사용자가 보는 표현 (HTML, Thymeleaf, Mustache, Freemarker, JSON 등)
    • 표시 책임만 가진다
    • 계산/트랜잭션/DAO 호출 등 비즈니스 로직 금지
  • Controller:

    • 사용자의 입력/요청을 해석하고 흐름 제어
    • 모델에 일을 시키고, 결과를 어떤 뷰로 보여줄지 결정
    • 가능한 “얇게(thin)” 유지 (파라미터 검증/변환, 서비스 호출, 결과 바인딩 위주)


🔹Web MVC (특히 Spring MVC) 요청 수명 주기

  1. 클라이언트 요청 (GET/POST… 등)

  2. DispatcherServlet: 프런트 컨트롤러가 모든 요청을 접수

  3. HandlerMapping: 어떤 컨트롤러 메서드가 처리할지 탐색

  4. HandlerAdapter: 해당 메서드를 호출할 수 있게 어댑팅

  5. Controller 실행: 서비스/리포지토리 호출로 모델 준비

  6. ViewResolver: 논리 뷰 이름 → 실제 뷰(템플릿/JSON) 결정

  7. @RestController는 뷰 템플릿 없이 HttpMessageConverter로 JSON 직렬화

  8. 응답 렌더링: 뷰에 모델 바인딩 → HTML/JSON으로 반환


➡️ 다이어그램으로 보면 (전통 MVC):
[Client] (브라우저/)
      |
      v
[HTTP Request]
      |
      v
+--------------------------------------+
| DispatcherServlet (Front Controller) |
+--------------------------------------+
      |
      v
+---------------------------+
| HandlerMapping            |   어떤 컨트롤러/메서드가 요청을 처리할지 매핑
+---------------------------+
      |
      v
+---------------------------+
| HandlerAdapter            |   메서드 호출 준비, 파라미터 바인딩
+---------------------------+
      |
      v
+-----------------------------------------------+
| Controller (@Controller / @RestController)	|
| - 요청 파라미터 처리								|
| - Service 호출  								|
| - 결과 DTO 반환								|
+-----------------------------------------------+
      |
      v
+---------------------------+
| Service Layer             |   비즈니스 로직 처리, 트랜잭션 관리
+---------------------------+
      |
      v
+---------------------------+
| Repository / DAO          |   DB 접근, JPA/Hibernate+---------------------------+
      |
      v
[Model 객체 / 엔티티 반환]
      |
      v
+---------------------------+
| ViewResolver (전통 MVC)   |   뷰 이름 → 템플릿 매핑
+---------------------------+
      |
      v
+---------------------------+
| View (Thymeleaf / JSP)    |   HTML 렌더링
+---------------------------+
      |
      v
[HTTP Response]Client

REST API 기준이라면 ViewResolver와 View 단계가 생략되고, HttpMessageConverter가 JSON 변환을 담당한다

profile
꾸준한 공부만이 답이다

0개의 댓글