서블릿 컨테이너 띄우기
Servlet이라는거는 자바의 표준 기술이고, Servlet 표준 기술을 구현한 컨테이너 제품들이 많이 나와 있다.
Servlet Container의 대명사라고 불리는 것이 Tomcat 이다.
Tomcat도 java로 만들어진 프로그램이고, 자바로 만들었다는 이야기는 어떤 클래스의 Object를 만들고 그 안에 어떤 메소드를 실행하면 톰캣이 동작하기 시작한다는 이야기이다.
서버를 설치해서 사용하게 의도했던 톰캣도 있지만, 필요하다면 이 톰캣을 인베드해서 내장해서 필요한 환경에서 사용해도 되도록 톰캣 개발자들이 인베디드 톰캣이라는 내장형 톰캣 라이브러리를 제공해 준다.
아래는 스프링에 내장되어 있는 톰캣 컨테이너 서버 가져와서 실행하는 로직이다.
서블릿 등록
서블릿 컨텍스트 등록하기 위한 ServletContextInitializer() 익명 내부 클래스 생성
servletContext.addServlet( 서블릿명, 서블릿 구현 익명 클래스)로 서블릿 등록 .
.addMapping()으로 어떤 url로 서블릿 컨테이너 호출할 때 해당 서블릿 호출시킬지 정의함.
service(HttpServletRequest req, HttpServletResponse resp) 에서 응답을 구성한다.
127.0.0.1:8080/hello 했을 때 서블릿 연결된 것 확인 가능
서블릿 요청 처리
아래는 서블릿 reqeust 내용 전달받은 것 활용해서 response 응답 만들어내는 부분
프론트 컨트롤러
모든 서블릿에 등장하는 공통적인 코드를 중앙화된 제일 앞단에 존재하는 Controller라고 이름 붙인 오브젝트에서 공통적인 작업을 다 처리하고, 요청의 종류에 따라서 이 로직을 처리하는 다른 오브젝트한테 요청을 다시 위임해서 전달하는 방식으로 전체 애플리케이션이 돌아가게 만든다.
프론트 컨트롤러로 전환
프론트 컨트롤러 패턴을 쓰는 이유는(프론트 컨트롤러 -> 각 서블렛으로 전달) 각 서블릿에서 바로 처리할 때 수행되는 공통 로직들의 중복을 줄일 수 있는 장점 때문에 사용한다. (1번)
그리고 (2)번 처럼 조건에 따라 요청에 맞는 서블릿으로 요청을 처리하도록 한다. (현재 예시에서는 편의상 프론트 컨트롤러 클래스에 로직 구현해 놓은 예시이다.)
Hello 컨트롤러 매핑과 바인딩
기존에 스프링에서 @RestController, @GetMapping 같은 어노테이션 붙이면 실행되던 로직은 아래 프론트 컨트롤러에서 실행시켜주는 방식처럼 프레임워크가 실행시켜 주고 있었다고 생각할 수 있다.
'스프링 관련 > 토비의 스프링 부트 - 이해와 원리' 카테고리의 다른 글
섹션 9. Spring JDBC 자동 구성 개발 (0) | 2024.06.09 |
---|---|
섹션 8. 외부 설정을 이용한 자동 구성 (0) | 2024.06.06 |
섹션 7 조건부 자동 구성 (0) | 2024.06.03 |
섹션 6. 자동 구성 기반 애플리케이션 (0) | 2024.05.30 |
섹션4 독립 실행형 스프링 애플리케이션 (0) | 2024.05.21 |
댓글