스프링 MVC 1편 간단 흐름정리

이름이름·2023년 4월 28일
0

Spring

목록 보기
20/20

MVC패턴이 생겨난 이유


원래 하나의 서블릿이나 JSP로 다 처리했었는데 이렇게 하나로 다 모아두면 유지보수도 힘들고 비효율적임


그래서 JSP로 처리하던 것을 컨트롤러(Controller)와 뷰(View)라는 영역으로 서로 역할을 나누고
컨트롤러가 HTTP요청을 받고 비즈니스로직을 실행하고
모델은 이제 뷰에 출력할 데이터들을 담아둠
그냥 통이라고 생각하면 됨
그래서 이제 뷰는 모델만 뒤져서 모델에 담겨있는 데이터를 화면에 그리는 일에 집중할 수 있게됨 (html 생성하는 부분)

FrontController

Overview

v1

기존 코드를 최대한 유지하면서, 프론트 컨트롤러를 도입

v2

프론트 컨트롤러의 도입으로 MyView 객체의 render() 를 호출하는 부분을 모두 일관되게 처리할 수 있다. 각각의 컨트롤러는 MyView 객체를 생성만 해서 반환하면 된다.

프론트컨트롤러가 무엇이오?



컨트롤러가 여러개가 있어도 이제 공통으로 쓰는 로직이 있을게 분명하다.
공통로직 같은건 프론트 컨트롤러를 만들어놓고 거기에서 미리 앞에서 처리하자는 취지

v1

기존 코드를 최대한 유지하면서, 프론트 컨트롤러를 도입하는 것
일단 프론트컨트롤러 만들고 단순히 분리하는 느낌
각 컨트롤러에서 dispatcher를 이용해 JSP로 랜더링 함

v2

각 컨트롤러에서 랜더링도 지금 dispatcher로 일일히 다 하고있는데 그것도 어떻게 보면 공통로직임. 따라서 MyView라는 클래스를 만들어서 여기안에 render해주는 메서드 만들어주고(대신에 이 render메서드에 dispatcher가 있어야겠지)
각각 컨트롤러에서 dispatcher를 쓰는게 아닌 MyView를 사용해주면 됨

V3

각 컨트롤에서 굳이 계속 서블릿을 사용할 이유가 있을까?
프론트컨트롤러에서만 extend HttpServlet을 상속받아 사용하고 다른 컨트롤러에서는 서블릿을 사용하지 않는다.
따라서 각 컨트롤러의 구현이 매우 단순해지고 (프론트 컨트롤러는 복잡해지지만), 테스트 코드 작성시 테스트 하기 쉽다.

근데 이제 컨트롤러들이 서블릿을 안쓰는대신 우리가 ModelView라는 것을 만들고 이것들을 갖다 쓰게하는데 이것이 약간 번거롭다

profile
공부 정리

0개의 댓글