개발자는 기록이 답이다

패스트캠퍼스 환급챌린지 16일차 미션 (2월 16일) : Spring Webflux 완전 정복 : 코루틴부터 리액티브 MSA 프로젝트까지 강의 후기 본문

패스트캠퍼스

패스트캠퍼스 환급챌린지 16일차 미션 (2월 16일) : Spring Webflux 완전 정복 : 코루틴부터 리액티브 MSA 프로젝트까지 강의 후기

slow-walker 2024. 2. 16. 23:41

 

 

1. Spring frame work는 어떻게 구성되어있을까?


스프링 포트폴리오는 두 가지 병렬 스택을 제공합니다. 하나는 Spring MVC 및 Spring Data 구성 요소를 사용하는 Servlet API 기반의 스택이며, 다른 하나는 Spring WebFlux 및 Spring Data의 리액티브 저장소를 활용한 완전히 리액티브한 스택입니다. 두 경우 모두 Spring Security가 두 스택에 대한 네이티브 지원을 제공합니다.

https://spring.io/reactive에서 캡처한 사진

 

먼저 Servlet Stack은 5개의 계층으로 이루어져 있습니다.

 

  1. Servlet Containers (예: Tomcat, Jetty, JBoss 등)는 첫 번째 계층입니다.
  2. Servlet API는 두 번째 계층으로, Servlet Containers에서 사용되는 API를 제공합니다.
  3. Spring MVC는 세 번째 계층으로, 웹 애플리케이션의 모델-뷰-컨트롤러 아키텍처를 구현하는 데 사용됩니다.
  4. Spring Security는 네 번째 계층으로, 보안 관련 기능을 제공하여 웹 애플리케이션을 보호합니다.
  5. Spring Data는 다섯 번째 계층으로, 데이터 액세스 기술을 단순화하고 개발자가 데이터에 더 쉽게 액세스할 수 있게 도와줍니다.

2. Servlet containers 구조

  • 요청이 들어올 때마다 request-per-thread 모델을 사용하여 쓰레드를 할당하고, 여러 클라이언트 요청을 동시에 처리합니다.
  • HTTP 통신은 Connector를 통해 수행되며, 각 요청과 응답의 내용 및 헤더를 변환하기 위해 Filter가 사용됩니다.
  • 클라이언트의 요청은 Servlet의 service 메소드에 전달되고, 그 결과는 응답으로 반환됩니다.
  • Servlet은 init destroy 메소드를 통해 생명주기를 담당합니다.

3. Servlet

public interface Servlet {
	public void init(ServletConfig config)
		throws ServletException;
	public void service(ServletRequest req, ServletResponse res)
        throws ServletException, IOException;
    public void destroy();
}

 

  • Java EE Servlet에서 정의 (현재는 Jakarta EE Servlet에서 지원)
  • init: Servlet을 초기화할 때 사용. Servlet 객 체를 생성할 때 사용되며 이후 Servlet Container에 등록합니다.
  • service:클라이언트의요청에따라서비즈니 스로직을실행하고응답을 반환합니다.
  • destroy: Servlet 종료시 수행. 리소스 해제 등 을 맡습니다.

4. HttpServlet

public abstract class HttpServlet extends GenericServlet {
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) {...}
	protected void doHead(HttpServletRequest req, HttpServletResponse resp) {...}
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) {...}
    protected void doPut(HttpServletRequest req, HttpServletResponse resp) {...}
    protected void doDelete(HttpServletRequest req, HttpServletResponse resp) {...}
    protected void doOptions(HttpServletRequest req, HttpServletResponse resp) {...}
    protected void doTrace(HttpServletRequest req, HttpServletResponse resp) {...}
}
  • Servlet을기반으로 HTTP프로토콜을 지원합니다
  • HTTP요청처리에 특화된 기능을 제공합니다
  • GET, POST, PUT, DELETE, HEAD, OPTION, TRACE등을 구현합니다

5. HttpServlet service

protected void service(HttpServletRequest req, HttpServletResponse resp) {
	String method = req.getMethod();
	if (method.equals(METHOD_GET)) {
    	...
		doGet(req, resp);
	} else if (method.equals(METHOD_HEAD)) {
		...
		doHead(req, resp);
	} else if (method.equals(METHOD_POST)) {
    	doPost(req, resp);
	} else if (method.equals(METHOD_PUT)) {
    	doPut(req, resp);
	} else if (method.equals(METHOD_DELETE)) {
    	doDelete(req, resp);
	} else if (method.equals(METHOD_OPTIONS)) {
    	doOptions(req, resp);
	} else if (method.equals(METHOD_TRACE)) {
    	doTrace(req, resp);
	}
}
  • request로부터 method를 추출합니다.
  • request method에 따라서 doGet, doHead, doPost, doPut, doDelete, doOptions, doTrace 등 을 수행합니다.

 

이번 내용은 다행히도 알고 있는 MVC에 대한 내용이라서 이해하기가 수월했다.

하지만 selvet의 종류가 여러개인줄을 몰랐기 때문에 따로 더 찾아봐야 할 것 같다.


※ 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다. https://bit.ly/48sS29N