럿고의 개발 노트

MVC Pattern 이란? 본문

Java Note

MVC Pattern 이란?

KimSeYun 2020. 2. 17. 11:40

MVC Pattern 이란?

  • 이글을 쓴 계기는 우아한테크코스 Level 1 미션인 문자열 계산기와 자동차 경주게임을 하다보니, 패턴에 대한 지식이 없는 것 같아서 공부를 해봤습니다.
  • 정확히 말하자면, MVC 패턴에서 Model(Domain)과 View에게 어떤 역할을 줘야 하는지에 대한 명확한 개념이 없었다고 하는게 더 정확하겠네요

디자인패턴이란?

  • MVC 패턴을 공부하기 전에, 디자인 패턴이라는 것을 먼저 알아둬야 함.
  • 디자인 패턴은 건축에서 사용하는 공법이라는 말에서 유래하였으며, 공법을 소프트웨어 개발 방법으로 공식화 한 것입니다.
  • 소수의 뛰어난 개발자가 해결한 문제를 다수의 개발자들이 처리 할 수 있도록 공식화 시킨 규칙이라고 생각하면 됩니다.
  • 프로그램을 어떻게 짜야하는지에 대한 방법론도 디자인패턴에 포함되어 있다고 생각하면 좋습니다.
  • 가장 좋은 장점은 구현자들 간의 커뮤니케이션의 효율성을 높이는 기법이라는 점입니다. 왜냐하면 다른 사람이 작성한 코드를 이해하는 것은 어려운 일이지만, 규칙을 정해놓고 코딩을 하다보면 이해도가 높아지기 떄문입니다.
  • 그러나 디자인패턴을 너무 맹신하지는 않는 것이 좋습니다. 디자인 패턴보다 중요한 것은 코드베이스의 간결성인 점을 알아두셔야 합니다.
  • 즉, 디자인 패턴을 적용할 필요가 없는 부분은 적용하지 않는 것이 좋다는 의미입니다.
  • 디자인 패턴은 알고리즘이 아니라 상황에 따라 자주 쓰이는 설계 방법을 정리한 코딩 방법론으로 모든 상황에 해결책이 아니기 때문입니다.
  • 디자인패턴 위키피디아

MVC 패턴 등장 전의 상황

  • 자바로 웹 어플리케이션을 사용할때는 모델 1을 사용했습니다.
  • JSP + JavaBean(Service)
  • JSP내에 로직 처리를 위한 자바 코드가 출력을 위한 코드와 함께 섞여 삽입되어 있는 형태입니다.
  • 사용자 요청이 들어왔을 때, JSP 자신이 직접 Java Bean이나, 따로 작성한 서비스 클래스를 이용하여 작업을 처리하고 그 처리한 정보를 클라이언트에 출력합니다.
  • 장점은 구조가 단순하여 익히기가 쉽고 구현이 용이하다는 점입니다.
  • 단점은 View와 로직이 함께 섞여 있어 JSP 코드 자체가 복잡해지고, 백엔드와 프론트엔드가 혼재되어 있어 분업이 용이하지 않고 코드가 복잡해져 유지보수가 어렵다는 단점이 있습니다.
  • 이러한 단점들을 해결하고자 MVC 패턴 - 모델2 방식이 등장하게 됩니다.

MVC 패턴이란!?

  • Model / View / Controller로 구분하여 애플리케이션을 구축하는 방법입니다.
    MVC 패턴 사진
  • 사진과 같이 각자의 역할에 맞는 일을 하면서 사용자의 요구를 처리하는 방식입니다.
  • 작동 순서
    1. User가 Controller에게 요구사항을 전달합니다.(URL을 이용합니다.)
    2. Controller는 알맞은 Model에게 요청을 전달합니다.
    3. Model은 비즈니스 로직을 이용하여 소스를 제어한 후에 그 결과를 Controller에게 전달해줍니다.
    4. Controller는 Model이 전달한 결과를 View에 반영합니다.
    5. 데이터가 반영된 View는 사용자에게 보여줍니다.
  • MVC 패턴 - 모델 2
    • Model : Service Class or Java Bean
      • 비즈니스 로직을 처리하는 것
    • View : JSP
      • 사용자에게 출력되는 화면
      • 모델1과 다른 점은 로직 처리 코드가 포함되어 있지 않다는 점이다.
      • 요청 결과의 출력 또는 Controller에 요청을 보내는 용도로 사용함.
    • Controller : Servlet
      • 모든 흐름 제어를 맡는 곳
      • 사용자가 요청을 보내면 요청을 분석하여 요청을 처리하기 위한 Model을 사용하여 처리함.
      • 처리한 Model을 받으면 View에게 전달해 사용자에게 출력한다.
  • MVC 패턴의 장점과 단점
    • 모델1의 단점들이 모두 해결되었다는 점이다. View와 비즈니스 로직이 분리되어 분업(프론트, 백엔드)가 용이해졌으며 유지보수가 간단해졌다는 점이다.
    • 단점은 모델1에 비해 배워야 할점이 많다는 점이지만, 장점에 비해 단점은 아무것도 아니다!

MVC 패턴으로 개발 시, 내가 실수한 점

  • 데이터를 이용해 원하는 형태로 출력을 하는 역할을 Model에게 주었다.
    • 원시 데이터를 변경하는거 아닌 이상 출력과 관련된 부분은 View에게 주어야 한다.
  • 입력값에 대해 검증하는 역할을 View에게 주었다.
    • View는 단순히 입력과 출력을 맡는 부분이다. 들어온 데이터를 검증하는 것은 Model에게 주는 것이 맞는 같습니다.
    • 데이터를 검증하는 것은 비즈니스 로직이기 떄문입니다.
    • 이부분은 OPP의 단일책임원칙에 위반이 되기도 한 것이다.
      모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 해야한다는 원칙

정리

  • 최근 도메인을 이용하여 우아한테크코스 미션을 구현하였는데, View와 Model의 역할이 많이 혼동이 되어서 이번 기회에 공부를 하게 되었습니다.
  • Model에는 데이터를 가공하거나 검증하는 비즈니스로직과 입출력과 관련된 모든 것(데이터 가공을 제외함)은 View에게 주는 것이 맞다고 생각한다.
  • 최근 두가지의 미션을 하면서 Model의 역할과 View에 대한 역할에 대한 많은 고민을 했는데, 자료들과 이번 기회에 정리를 하면서 역할 기준점에 대해서 잡아가는 것 같습니다.
  • 웹 어플리케이션을 위한 MVC패턴보다는 Model과 View에 대한 역할이 궁금해서 정리한 부분이여서 실수한 부분은 웹 MVC 패턴과는 다를것 같습니다.

참고자료

'Java Note' 카테고리의 다른 글

전략 패턴 & 인스터페이 추상화  (0) 2020.03.06
Java API  (0) 2020.01.30
자바 속도 해결 방안(JIT 컴파일러, HotSpot)  (0) 2020.01.26
JVM, JDK, JRE  (0) 2020.01.25
자바(Java)란?  (0) 2020.01.23
Comments