본문 바로가기
Spring Study/MVC 패턴

[MVC 패턴] MVC 프레임워크 만들기

by 정재인 2023. 8. 12.

프론트 컨트롤러 (Front Controller)

프론트 컨트롤러 도입 전
프론트 컨트롤러 도입 후

 

프론트 컨트롤러 패턴 특징

- 프론트 컨트롤러 서블릿 하나로 클라이언트의 요청을 받음

- 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출

- 입구가 하나, 공통 처리 가능

- 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 됨

- DispatcherServletFront Controller 패턴으로 구현되어 있음

 

 

뷰 리졸버 (View Resolver)

- MyView view = viewResolver(viewName): 컨트롤러가 반환한 논리 뷰 이름을 실제 물리 뷰 경로로 변경한다. 실제 물리 경로가 있는 MyView 객체를 반환한다.

- 뷰 객체를 통해 HTML 화면을 렌더링 한다.

- 뷰 객체의 render()는 모델 정보도 함께 받는다.

- JSP는 request.getAttribute()데이터를 조회하기 때문에, 모델의 데이터를 꺼내 request.setAttribute()로 담아둔다.

- JSP로 포워드해서 JSP를 렌더링한다.

 


어댑터 패턴 (Adapter Pattern)

프론트 컨트롤러가 다양한 방식의 컨트롤러를 처리할 수 있도록 해준다.

- 핸들러 어댑터: 중간에서 어댑터 역할을 하고, 다양한 종류의 컨트롤러를 호출할 수 있게 도와준다.

- 핸들러 (= 컨트롤러): 컨트롤러의 이름을 더 넓은 범위인 핸들러로 변경한 것이다. 핸들러는 컨트롤러 뿐만 아니라 어댑터가 지원하기만 하면, 어떤 것이라도 URL에 매핑해서 사용할 수 있기 때문이다.

 

핸들러를 처리할 수 있는 어댑터 조회

MyHandlerAdapter adapter = getHandlerAdapter(handler)

 

어댑터 호출

ModelView mv = adapter.handler(request, response, handler);

- 어댑터의 handler(request, response, handler) 메서드를 통해 실제 어댑터가 호출된다.

- 어댑터는 handler(컨트롤러)를 호출하고 그 결과를 어댑터에 맞추어 반환한다.

 

어댑터 변환

ModelView mv = new ModelView(viewName);
mv.setModel(model);

return mv;

어댑터가 호출하는 Controller는 뷰의 이름을 반환한다. 하지만 어댑터는 뷰의 이름이 아니라 ModelView를 만들어서 반환해야 한다. Controller는 뷰의 이름을 반환했지만, 어댑터는 이것을 ModelView로 만들어서 형식을 맞추어 반환한다.

 

여기에 애노테이션(@Annotation)을 사용해서 더 편리하게 컨트롤러를 발전시킬 수 있다. 이는 어노테이션을 지원하는 어댑터를 추가하면 가능하다. 다형성과 어댑터 덕분에 기존 구조를 유지하면서, 프레임워크의 기능을 확장할 수 있다.

 

'Spring Study > MVC 패턴' 카테고리의 다른 글

[MVC 패턴] 타임리프 (Thymeleaf)  (0) 2023.08.16
[MVC 패턴] MVC 기본 기능  (0) 2023.08.15
[MVC 패턴] MVC 구조  (0) 2023.08.14
[MVC 패턴] JSP / MVC 패턴  (0) 2023.08.09
[MVC 패턴] 서블릿 (Servlet)  (0) 2023.08.08

댓글