스프링 MVC 전체 구조직접 만든 MVC 프레임워크와 스프링 MVC를 비교해 보자.직접 만든 MVC 프레임워크 구조SpringMVC 구조여러 개의 핸들러를 스프링 부트가 미리 등록한다.핸들러 어댑터 목록에서 핸들러를 처리할 수 있는 핸들러 어댑터를 조회한다.조회한 핸들러 어댑터를 통해 실제 핸들러를 호출한다.직접 만든 프레임워크 ⇒ 스프링 MVC 비교FrontController ⇒ DispatcherServlethandlerMappingMap ⇒ HandlerMappingMyHandlerAdapter ⇒ HandlerAdapterModelView ⇒ ModelAndViewviewResolver(메서드) ⇒ ViewResolver(인터페이스)MyView ⇒ ViewDispatcherServlet 구조 살펴..
빈 생명주기 콜백스프링 빈이 생성되거나 죽기 일보직전에 스프링이 빈 안에 있는 메서드를 호출하는 기능이다.생성되고 나서 초기화될 때 호출 혹은 빈이 사라지기 직전 안전하게 종료할 수 있는 메서드를 호출한다.빈 생명주기 콜백 시작데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다.이번 시간에는 스프링을 통해 이러한 초기화 작업과 종료 작업을 어떻게 진행하는지 예제로 알아보자.간단하게 외부 네트워크에 미리 연결하는 객체를 하나 생성한다고 가정해보자.실제로 네트워크에 연결하는 것은 아니고, 단순히 문자만 출력하도록 했다.이 NetworkClient는 애플리케이..
프론트 컨트롤러 패턴 소개프론트 컨트롤러 도입 전입구가 없어 아무 컨트롤러나 호출할 수 있는 상황이다.그래서 클라이언트의 요청에 대한 공통 로직을 컨트롤러마다 작성해야 하는 문제점이 있다.프론트 컨트롤러 도입 후FrontController 패턴 특징프론트 컨트롤러 서블릿 하나로 클라이언트의 요청을 받는 구조다.요청을 받으면 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출한다.즉 요청에 대한 입구를 하나로 해서 공통 처리가 가능해졌다.이를 통해 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 된다.정리프론트 컨트롤러도 서블릿이다.그래서 컨트롤러들 앞에다가 공통 로직을 처리할 서블릿을 뒀다고 이해하면 된다.이전에는 고객의 요청이 오면 서블릿 매핑으로 직접 호출이 되었다.이제 그게 아..
서블릿과 자바 코드로 만든 HTML 예시@WebServlet(name = "memberListServlet", urlPatterns = "/servlet/members")public class MemberListServlet extends HttpServlet { private MemberRepository memberRepository = MemberRepository.getInstance(); @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { respon..