김영한 [스프링 MVC 1편] - 강의정리
프론트 컨트롤러 패턴 소개
- FrontController 패턴 특징
- 프론트 컨트롤러 서블릿 하나로 클라이언트의 요청을 받음
- 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출
- 입구를 하나로 하여 공통처리 가능
- 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿으 사용하지 않아도 된다.
- 스프링 웹 MVC의 DispatcherServlet이 FrontController 패턴으로 구현되어 있다.
프론트 컨트롤러 도입 - v1
프론트 컨트롤러 분석
- urlPatterns
- urlPatterns = "/front-controller/v1/"
-> /front-controller/v1 를 포함한 하위 모든 요청은 이 서블릿에서 받아들인다.
- urlPatterns = "/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 |