[MVC] MVC 총정리 + MVC로 코드짜기

Jae Eon·2021년 5월 11일
0

백엔드 공부

목록 보기
2/17

들어가며

MVC의 정의, MVC의 등장 이유, MVC의 문제점과 MVC를 지키며 코딩하는 방법을 정리한 포스트입니다.

🍊 MVC 정의

MVC는 Model View Controller 약자이다.
mvc는 코드 로직들을 model, view, controller 의 특성에 맞게 분리해 놓은 것이다.


🍑 등장 이유

등장이유는 간단히 생산성이 좋기 때문이다.
생산성은 크게 4가지로

  • 구성요소들의 재사용 (ex.콘솔용 어플을 웹으로 확장 할때 모델은 그대로 재사용 가능)
  • 확장성 증가
  • 중복 코딩 제거
  • 각 요소들에 집중가능

MVC 이전의 JSP Model1 에서는 하나의 클래스에 로직 + 출력이 같이 존재 했고
유지보수가 어려운 단점이 있었다.

MVC를 적용하며 Model(로직)과 View(출력)가 분리 되었고 협업도 용이해 지게 되었다.

🍓 MVC 흐름

  • 클라이언트는 필요한 기능을 컨트롤러에 요청
  • 컨트롤러는 알맞은 모델에게 로직 수행을 요청
  • 컨트롤러는 알맞은 뷰를 선택
  • 뷰에따른 결과 화면 출력

🍒 M,V,C 객체의 역할

Model (데이터 관리)

  • 데이터와 행동을 갖는 객체
  • 비즈니스 로직 수행
  • 상태 변화 처리
  • 상태 정보 반환

View (UI)

  • 데이터의 시각화
  • 모델이 처리한 데이터를 컨트롤러에서 받아 사용
  • 어떠한 데이터와 로직이 있으면 안된다 ❌

Controller (View와 Model의 중개자)

  • 사용자의 요청을 해석하여 처리하고 결과를 반환
  • 모델과 뷰를 느슨하게 연결 (모델과 데이터의 존재를 혼자 알고있다)
  • 데이터의 흐름 제어

🍋 MVC를 지키며 코딩하는 5가지 방법

처음 패턴을 적용해 코딩을 하면 내가 MVC를 잘 지키고 있는지 알기가 힘든경우가 굉장히 많다.
공부하던 중 굉장히 좋은 적용방법이자 점검방법을 영상을통해 알게 되어 정리해 보았다.

  1. ModelControllerView에 의존하면 안된다.
    👉 Model 내부에 ControllerView에 관련된 코드가 없어야한다(Import 금지)

  2. ViewModel에만 의존하고 Controller엔 의존하면 안된다.
    👉 View내부에 Model의 코드만 있을 수 있고, Controller코드는 있으면 안된다.

  3. ViewModel로 부터 데이터를 받을때는 사용자마다 다르게 보여줘야하는 데이터만 받아야한다.
    👉 ex) 배달될 주소, 사용자 이름⭕ , 홈페이지 이름, 공통 메세지("자동차이름을 입력하세요")❌

  4. ControllerModelView에 의존해도 된다.
    👉 Controller내부에는 ModelView의 코드가 있을 수 있다.

  5. ViewModel로 부터 데이터를 받을때, 반드시 Controller에서 받아야한다.
    👉 Controller가 두 코드를 중개한다. (1번과 2번을 잘 지키면 5번도 잘지켜진다)


🍍 M,V,C 검증

  • Model 검증
    데이터 검증(Valid), 로직에 대한 검증 필요
  • View 검증
    간단한 검증(Null 입력, 적절하지 않은 타입) 필요
  • Controller 검증
    파라미터 존재 유무 검증(ex. @RequestBody , @PathVariable)

🍈 MVC 문제점

  • 비대한 컨트롤러
    서비스가 커질수록 컨트롤러의 코드가 증가할 수 밖에없음
  • 컨트롤러의 중복 로직
  • DB 접근성
    DB에서 MVC중 어느 객체로 접근을 해야하는지 모호함

🥭 MVC 문제점을 개선 하기 위한 5-Layer 구조

MVC를 개선하기 위해 MVC가 녹아있는 5-Layer 구조가 나타났다.

  • Presentation Layer 는 MVC에서 View 의 기능을 한다.

  • Control Layer 는 MVC에서 Controller의 기능을 한다.

  • Business Logic LayerServiceDomain을 가진다.
    애플리케이션에서 가장 재사용 가능성이 높은 계층이다.
    👉Service의 역할
      ControlPersistance 계층을 연결한다
      클래스간의 관계를 관리한다
      상태의 흐름이 들어가있어 각각의 상태를 저장한다
      트랜잭션 관리(상태의 흐름과 관련)

    👉 Domain의 역할
      데이터와 행위를 갖는 객체(MVC의 Model 역할)
      Persistance에 맵핑된다.

  • Persistance Layer는 데이터 처리(CRUD)를 한다
    DAO 패턴,ORM

  • Domain Model Layer의 역할
    각 계층 사이에서 전달되는 객체임
    DTO 패턴
    대부분 도메인 모델을 DTO로 사용한다.

🍇 MVC의 대안

MVC패턴의 대안으로 MVP , MVVN이 있다.

profile
🖋정리를 안하면 잊어버린다.👣한 발자국씩 가보자!

0개의 댓글