Notice
Recent Posts
Recent Comments
Link
개발자는 기록이 답이다
패스트캠퍼스 환급챌린지 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가 두 스택에 대한 네이티브 지원을 제공합니다.
먼저 Servlet Stack은 5개의 계층으로 이루어져 있습니다.
- Servlet Containers (예: Tomcat, Jetty, JBoss 등)는 첫 번째 계층입니다.
- Servlet API는 두 번째 계층으로, Servlet Containers에서 사용되는 API를 제공합니다.
- Spring MVC는 세 번째 계층으로, 웹 애플리케이션의 모델-뷰-컨트롤러 아키텍처를 구현하는 데 사용됩니다.
- Spring Security는 네 번째 계층으로, 보안 관련 기능을 제공하여 웹 애플리케이션을 보호합니다.
- 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