회사

[Spring MVC1] 4. MVC 프레임워크 만들기

daykim 2024. 9. 10. 15:57
김영한 [스프링 MVC 1편] - 강의정리

 

프론트 컨트롤러 패턴 소개


  • FrontController 패턴  특징
    • 프론트 컨트롤러 서블릿 하나로 클라이언트의 요청을 받음
    • 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출
    • 입구를 하나로 하여 공통처리 가능
    • 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿으 사용하지 않아도 된다.
  • 스프링 웹 MVC의 DispatcherServlet이 FrontController 패턴으로 구현되어 있다.

 

프론트 컨트롤러 도입 - v1


프론트 컨트롤러 분석

  • urlPatterns
    • urlPatterns = "/front-controller/v1/"
      -> /front-controller/v1 를 포함한 하위 모든 요청은 이 서블릿에서 받아들인다.

 

View 분리 - v2


 

Model 추가 - v3


서블릿 종속성 제거

  • 컨트롤러 입장에서 HttpServletRequest, HttpServletResponse가 필요할까?
  • 요청 마라미터 정보는 자바의  Map으로 대신 넘기도록 하면, 지금 구조에서 컨트롤러가 서블릿 기술을 몰라도 동작가능하다.
  • request 객체를 Model로 사용하는 대신 별도의 Model 객체를 만들어 반환하면 된다.
  • 컨트롤러가 서블릿 기술을 사용하지 않도록 변경하면, 구현 코드도 단순해지고, 테스트 코드 작성이 쉽다.

뷰 이름 중복 제거

  • 컨트롤러에서 지정하는 뷰 이름에 중복이 있는걸 확인할 수 있다.
  • 컨트롤러는 뷰의 논리 이름을 반환하고, 실제 물리 위치의 이름은 프론트 컨트롤러에서 처리하도록 단순화 하자.
  • 이렇게 해두면 향후 뷰의 위치가 함께 이동해도 프론트 콘트롤러만 고치면 된다.

 

 

단순하고 실용적인 컨트롤러 - v4


  • 기본구조는 V3와 같지만, ModelView가 아닌 ViewName을 반환한다.

 

 

 

 

 

 

 

'회사' 카테고리의 다른 글

[DB] 인덱스와 파티션 차이  (1) 2024.09.09
@Transactional과 try-catch  (0) 2024.09.02
동일 도메인 인스턴스간 HTTP 세션 충돌 방지  (0) 2024.06.05
MySQL 중복 레코드 관리  (0) 2024.04.04
ObjectMapper  (0) 2024.03.27