※ 본문은 김영한 선생님의 인프런 '스프링 MVC 1편' 강의를 듣고 정리한 내용임을 알립니다.
Model / View / Controller
▶ Controller
: HTTP 요청을 받아서 파라미터를 검증하고 비즈니스 로직을 실행,
그리고 View에 전달할 결과 데이터를 조회해서 Model에 담는다.
▶ Model
: View에 출력할 데이터를 담아둔다.
: View가 필요한 데이터를 모두 Model에 담아서 전달해주기 때문에 View는 화면을 렌더링하는 일에 집중할 수 있다.
▶ View
: Model에 담겨있는 데이터를 사용해서 화면을 그리는 일에 집중한다.
※ Service
: Controller에 비즈니스 로직을 둘 수도 있지만, 이 경우에는 Controller가 너무 많은 역할을 담당한다.
→ 일반적으로 비즈니스 로직은 Service라는 계층을 별도로 만들어서 처리한다.
→ 이후 Controller는 비즈니스 로직이 있는 Service를 호출하는 일을 담당한다.
※ redirect vs forward
: 리다이렉트는 실제 클라이언트(웹 브라우저)에 응답이 나갔다가 클라이언트가 redirect 경로로 다시 요청
→ 클라이언트가 인지할 수 있으며, URL 경로도 실제로 변경됨
: 포워드는 서버 내부에서 일어나는 호출
→ 클라이언트가 전혀 인지하지 못함
※ /WEB-INF
: 이 경로 안에 JSP가 있으면 외부에서 직접 JSP 호출 불가능
: 컨트롤러를 통해서만 JSP를 호출하고 싶을 때 사용
: 내부에서 forward가 발생해야 함
▶ 서블릿과 JSP 만으로 구성한 MVC 패턴의 한계
: "공통 처리가 어렵다"
→ 기능이 복잡해질수록 Controller에서 공통으로 처리해야 하는 부분들이 많아진다.
=> 해결 방안
: Controller 호출 전에 먼저 공통 기능을 처리해야 한다. (수문장 역할)
→ FrontController 패턴을 도입하면 이런 문제를 깔끔하게 해결할 수 있다.
→ FrontController는 스프링 MVC의 핵심!
▶ FrontController
- 프론트 컨트롤러는 서블릿 하나로 클라이언트의 요청을 받는 방식
- 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출함
- 공통 처리 가능
- 이후, 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 됨
'Web > 기초 공부' 카테고리의 다른 글
웹 애플리케이션 이해 (0) | 2021.03.29 |
---|---|
HTTP 정리 (0) | 2021.03.28 |
웹 기본 (0) | 2021.03.26 |