럿고의 개발 노트
MVC Pattern 이란? 본문
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로 구분하여 애플리케이션을 구축하는 방법입니다.
- 사진과 같이 각자의 역할에 맞는 일을 하면서 사용자의 요구를 처리하는 방식입니다.
- 작동 순서
- User가 Controller에게 요구사항을 전달합니다.(URL을 이용합니다.)
- Controller는 알맞은 Model에게 요청을 전달합니다.
- Model은 비즈니스 로직을 이용하여 소스를 제어한 후에 그 결과를 Controller에게 전달해줍니다.
- Controller는 Model이 전달한 결과를 View에 반영합니다.
- 데이터가 반영된 View는 사용자에게 보여줍니다.
- MVC 패턴 - 모델 2
- Model : Service Class or Java Bean
- 비즈니스 로직을 처리하는 것
- View : JSP
- 사용자에게 출력되는 화면
- 모델1과 다른 점은 로직 처리 코드가 포함되어 있지 않다는 점이다.
- 요청 결과의 출력 또는 Controller에 요청을 보내는 용도로 사용함.
- Controller : Servlet
- 모든 흐름 제어를 맡는 곳
- 사용자가 요청을 보내면 요청을 분석하여 요청을 처리하기 위한 Model을 사용하여 처리함.
- 처리한 Model을 받으면 View에게 전달해 사용자에게 출력한다.
- Model : Service Class or Java Bean
- 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