1. MVC 패턴이란?

MVC (Model-View-Controller) 패턴은
소프트웨어 설계에서 ‘역할 분리(Separation of Concerns)’ 를 실현하기 위한 대표적인 아키텍처 패턴이다.
디자인 패턴 중 하나

👉 한 문장으로 요약하면,

“사용자의 요청을 처리하고 결과를 화면에 보여주는 과정을 3개의 역할로 나눈 구조”

2. MVC 구조 한눈에 보기

[사용자] → Controller → Model → View → [사용자]

구성요소역할예시
Model비즈니스 로직, 데이터 처리 담당DB와의 연동, 계산, 상태 관리
View사용자에게 보여지는 화면(UI) 담당HTML, JSP, Thymeleaf 등
Controller요청(Request)을 받고 Model과 View를 연결URL 라우팅, 흐름 제어

3. 각 구성요소 자세히 보기

✅ Model (모델)

핵심 역할: 애플리케이션의 데이터와 비즈니스 로직을 담당

DB, DAO, Service 계층에서 주로 존재

View나 Controller에 의존하지 않는다. (즉, 화면이 바뀌어도 Model은 그대로)

예시 (Spring 기반)

public class Member {
    private Long id;
    private String name;
}

@Service
public class MemberService {
    @Autowired
    private MemberRepository memberRepository;

    public Member findMember(Long id) {
        return memberRepository.findById(id);
    }
}

✅ View (뷰)

핵심 역할: 사용자가 볼 수 있는 출력 결과 화면

데이터의 표현에만 집중해야 하며, 로직이 포함되면 안 됨

HTML, JSP, Thymeleaf, React 등 다양한 형태 가능

예시 (Thymeleaf)

<p th:text="'회원 이름: ' + ${member.name}"></p>

✅ Controller (컨트롤러)

핵심 역할: 사용자의 요청을 받고, Model과 View를 연결하는 중간 관리자

클라이언트의 입력을 해석하고, 비즈니스 로직을 호출한 뒤 View에 전달

예시 (Spring MVC)

public class MemberController {

    @Autowired
    private MemberService memberService;

    @GetMapping("/members/{id}")
    public String getMember(@PathVariable Long id, Model model) {
        Member member = memberService.findMember(id);
        model.addAttribute("member", member);
        return "memberView"; // View 이름
    }
}

4. MVC 동작 흐름 정리 (Spring MVC 기준)

1️⃣ 사용자 요청

→ 클라이언트가 /members/1 요청을 보냄

2️⃣ DispatcherServlet (Front Controller)

→ 스프링이 모든 요청을 가장 먼저 받는 진입점
→ 적절한 Controller로 요청을 위임

3️⃣ Controller 호출

→ URL 매핑된 메서드 실행
→ 비즈니스 로직(Service) 호출

4️⃣ Model에 데이터 저장

→ Controller는 로직 처리 결과를 Model에 담음

5️⃣ ViewResolver 실행

→ Controller가 반환한 View 이름을 실제 JSP/HTML 경로로 변환

6️⃣ View 렌더링 후 응답 반환

→ 데이터를 포함한 View를 사용자에게 전달

5. MVC 패턴의 장점과 단점

✅ 장점

  • 관심사의 분리(SoC) → 유지보수 용이
  • 재사용성 증가 → Model과 View가 독립적
  • 확장성 높음 → 새로운 UI나 기능 추가 쉬움
  • 테스트 용이 → 각 계층 단위 테스트 가능

❌ 단점

  • 구조가 복잡해지기 쉬움
  • 작은 프로젝트에서는 과한 구조가 될 수 있음
  • 초심자는 데이터 흐름을 이해하기 어렵다

6. Spring MVC의 계층 구조 요약

Controller → Service → Repository → DB
         ↓
        View
계층역할예시
Controller요청/응답, 라우팅, 파라미터 처리@Controller, @RestController
Service비즈니스 로직@Service
RepositoryDB 연동 (MyBatis, JPA 등)@Repository
View사용자에게 결과 반환Thymeleaf, JSP

7. MVC vs MVVM vs MVP

패턴View의 역할Controller/Presenter/ViewModel의 역할사용 예시
MVC단순 출력흐름 제어 (Controller 중심)Spring, Django
MVP사용자 이벤트 위임Presenter가 로직 처리Android (옛 방식)
MVVMView ↔ ViewModel 바인딩데이터 바인딩 중심Vue.js, React, Flutter

MVC 패턴

MVP 패턴

MVVM 패턴

profile
slow but steady

0개의 댓글