myway00 / Implement-Tomcat-By-Myself

스프링 부트 내부의 톰캣이 어떤 동작을 하는지 호기심을 갖고 톰캣을 간단히 구현한 레포지토리입니다.
0 stars 0 forks source link

Servlet & Servlet Container #6

Open myway00 opened 1 year ago

myway00 commented 1 year ago

1. Servlet

2. Servlet Container

  1. 서블릿 생명주기 관리 서블릿 컨테이너는 서블릿의 탄생과 죽음을 관리한다. 서블릿 클래스를 로딩하여 인스턴스화하고, 초기화 메서드를 호출하고, 요청이 들어오면 적절한 서블릿 메서드를 찾아서 동작한다. 또한 서블릿의 생명이 다하면 가비지 컬렉션(Garbage Collection)을 통해 메모리에서 제거한다.

  2. 통신 지원 서블릿 컨테이너는 웹 서버와 소켓을 만들어서 클라이언트의 요청을 받고 응답할 수 있는 통신을 지원해준다. 통신을 하기 위한 listen, accept 등의 과정을 API로 제공하여 복잡한 과정을 생략해주기 때문에 개발자가 비즈니스 로직 개발에 집중할 수 있게 도와준다.

  3. 멀티쓰레드 지원 및 관리 서블릿 컨테이너는 클라이언트의 요청을 받을 때마다 새로운 자바 스레드를 생성한다. 따라서 동시에 여러 요청이 들어와도 멀티쓰레딩 환경에서 동시다발적인 작업을 관리할 수 있다.

myway00 commented 1 year ago
  1. 클라이언트 (예 : 웹 브라우저)는 웹 서버에 액세스 하여 HTTP 요청을 합니다.
  2. 웹 서버가 요청을 수신하고 서블릿 컨테이너로 전달합니다. 서블릿 컨테이너는 호스트 웹 서버와 동일한 프로세스, 동일한 호스트의 다른 프로세스 또는 요청을 처리하는 웹 서버와 다른 호스트에서 실행될 수 있습니다.
  3. 서블릿 컨테이너는 해당 서블릿의 구성에 따라 호출할 서블릿을 결정하고 요청 및 응답을 나타내는 객체로 호출합니다.
  4. 서블릿은 요청 오브젝트를 사용하여 원격 사용자, 이 요청의 일부로 전송된 HTTP POST 매개 변수 및 기타 관련 데이터를 찾습니다. 서블릿은 프로그래밍된 모든 로직을 수행하고 클라이언트로 다시 전송할 데이터를 생성합니다. 응답 데이터를 통해이 데이터를 클라이언트로 다시 보냅니다.
  5. 서블릿이 요청 처리를 완료하면 서블릿 컨테이너는 응답이 올바르게 플러시 되는지 확인하고 제어를 호스트 웹 서버로 다시 리턴합니다.