프런트 컨트롤러 패턴
모든 요청을 단일 handler(처리기)에서 처리하도록 하는 패턴
스프링 웹 MVC 프레임워크의 DispatcherServlet(프런트 컨트롤러 역할)이 프런트 컨트롤러 패턴으로 구현 됨.
MVC 프레임워크를 만드는 기반 코드로 활용된다.
프런트 컨트롤러 실습
DispatcherServlet과 몇 가지 Controller를 만들어 모든 요청을 DispatcherServlet이 받아 적절한 Controller에게 위임한다.
의존성 설정
dependencies {
// 임베디드 톰캣
implementation 'org.apache.tomcat.embed:tomcat-embed-core:8.5.42'
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper:8.5.42'
// JSP 화면
implementation 'javax.servlet:jstl:1.2'
// tomcat이 실행하는 Servlet 작성
implementation 'javax.servlet:javax.servlet-api:4.0.1'
implementation 'org.reflections:reflections:0.9.12'
// 로그 출력
implementation 'ch.qos.logback:logback-classic:1.2.3'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}
동작 과정
① main 메서드를 실행하면 임베디드 톰캣이 실행된다.
톰캣이 실행되면 지정한 경로 하위에 빌드된 파일이 저장된다.(tomcat 규약에 맞게 경로를 설정해야 함)
저장되지 않는다면 : Project Structure > Modules > main > Paths > Compiler Output 확인
② DispatcherServlet 생성
tomcat이 해당 파일을 실행하려면 Servlet이어야 함.(Servlet 상속)
@WebServlet 애너테이션을 이용하여 어떤 경로로 입력하더라도 DispatcherServlet이 호출되도록 설정
resources 하위 패키지에 logback 설정 파일(xml)을 생성한다.
③ localhost:8080에 접속하여 임의의 경로를 입력해도 콘솔에 로그가 출력된다.
④ Controller 인터페이스를 생성한다.
⑤ Controller 인터페이스를 구현하는 HomeController를 생성한다.
HomeController를 호출하면 지정한(홈) 화면이 표시되도록 한다.
⑥ DispatcherServlet에서 사용할 RequestMappingHandlerMapping를 생성한다.
요청에 해당하는 컨트롤러를 Map에 저장한다. [key : 요청, value : 컨트롤러]
어떠한 경로도 설정하지 않으면 HomeController를 실행하도록 하는 초기화 메서드를 생성한다.
⑦ DispatcherServlet : 초기화 작업
tomcat이 HttpServlet을 싱글톤으로 만들면 호출되는 초기화 메서드. map을 초기화하도록 한다.
⑧ DispatcherServlet : 요청이 들어오면 RequestMappingHandlerMapping에게 작업을 위임한다.
DispatcherServlet : 요청 url를 처리하는 handler를 달라고 요청한다.
RequestMappingHandlerMapping : 요청 url에 맞는 handler를 반환한다.
요청과 응답을 주고 받는 면이 객체 지향에서 A가 B에게 작업을 위임하는 점과 많이 닮은 거 같다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
#패스트캠퍼스 #포트폴리오 #직장인자기계발 #환급챌린지 #포트폴리오챌린지 #패스트캠퍼스후기 #초격차패키지 #오공완
'Java > [패스트캠퍼스] 50일 포트폴리오 챌린지' 카테고리의 다른 글
[13일차] 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) (0) | 2023.08.20 |
---|---|
[12일차] 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) (0) | 2023.08.19 |
[10일차] 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) (0) | 2023.08.17 |
[9일차] 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) (0) | 2023.08.16 |
[8일차] 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) (0) | 2023.08.15 |