JSP - 27. 프론트컨트롤러 + 커맨드패턴
ioc패턴을 적용한 프레임워크
프론트 컨트롤러 + 커맨드패턴
- 프론트컨트롤러 생성
- 중복코드 처리
- 유일한 서블렛, 백엔드 컨트롤러는 서블릿이 아니다
- 커맨드패턴 적용
- 프론트컨트롤러가 요청을 분석하여 백엔드 컨트롤러에게 넘김
- 백엔드컨트롤러 메서드의 시그니처에 따라 요청을 보내야하는데, 그 시그니처에 맞게 코드를 일일이 짜려면 종속성/결합력 발생함
- 커맨드 패턴 (=> Invoker가 reflection 기반으로 백엔드컨트롤러를 호출) 으로 해결하자
프론트컨트롤러가 받는 요청에는 invoker가 어떤 컨트롤러를 호출해야할지
- 백엔드컨트롤러에는 웹서블릿 대신할 커스텀 어노테이션을 만들자
- 어떤 컨트롤러가 어느 어노테이션을 가지고있는지 '어노테이션 트레이싱'을 해야함
- 어노테이션 트레이싱을 맡은 컴포넌트
- 1) 어노테이션 수집하여 맵으로 관리하는 역할 (key: 요청, value: 요청처리자)
- 2) 하나의 커맨드를 발생했을때 그걸 처리하는 핸들러를 검색해주는 역할
- 3) 검색 마치고 다시 프론트에게 어떤 컨트롤러가 필요하다고 알려주는 역할
진행순서
- 프론트 -> 맵가지고있는애 -> 프론트 -> invoker -> 백엔드 컨트롤러(scope, 논리적뷰네임을 리턴) -> invoker -> 프론트컨트롤러
리팩토링
- 프론트컨트롤러 생성후 web.xml등록
- 기존 컨트롤러 상속없애고 오버라이드지우고 웹서블릿주석
- 기존 컨트롤러 중복소스 잘라내어 프론트로 옮김
- 커맨드패턴적용
개발순서 (다이어그램 참고)
- FrontController
- Enum RequestMethod
- @RequestMapping
- @Controller
- RequestMappingCondition
- RequestMappingInfo
과제
- 거래처관리
- 갖고있는 서블릿,컨트롤러에 최대한많이 프레임워크적용하기
다음주
- 필터이용한 ㄱ보안 (접근제어) -> 추후 프레임워크 만들예정
- 파일업로드