서블릿을 설명하기 앞서 서블릿이 왜 탄생하게 되었는지에 대해 알아보고자 한다.
클라이언트가 form과 같은 데이터를 전송 버튼을 누름으로써
서버에 요청을 했다고 하자.
이때 서버에서 처리해야 하는 업무는 아래 순서와 같다.
• 서버 TCP/IP 연결 대기, 소켓 연결
• HTTP 요청 메시지를 파싱해서 읽기
• POST 방식, /save URL 인지
• Content-Type 확인
• HTTP 메시지 바디 내용 피싱
ex) username, age 데이터를 사용할 수 있게 파싱
• 저장 프로세스 실행
• 비즈니스 로직 실행
- 데이터베이스에 저장 요청
• HTTP 응답 메시지 생성 시작
• HTTP 시작 라인 생성
• Header 생성
• 메시지 바디에 HTML 생성에서 입력
• TCP/IP에 응답 전달, 소켓 종료
너무 많은 처리 내용이 있다.
하지만 서블릿은 비즈니스 로직 실행 만을 제외한 모든 업무를 처리해준다.
즉, 개발자는 비즈니스 로직 실행인 애플리케이션만 개발하면 된다.
● 서블릿의 특징
서블릿은 아래와 같은 구조로 이루어져 있다.
• urlPatterns(/hello)의 URL이 호출되면 서블릿 코드가 실행
• HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest
• HTTP 응답 정보를 편리하게 제공할 수 있는 HttpServletResponse
• 개발자는 HTTP 스펙을 매우 편리하게 사용
간단한 예시를 통해 흐름을 읽혀보자.
웹 브라우저에서 localhost:8080/hello 로 요청을 보내면
WAS는 요청 메시지를 기반으로 request(요청), response(응답) 객체를 생성한다.
이를 가지고 서블릿 컨테이너에서 애플리케이션 로직을 수행하고
이 결과를 response 객체에 담아 웹 브라우저에게 응답을 한다.
간단히 정리하면
HTTP 요청시
- WAS는 Request, Response 객체를 새로 만들어서 서블릿 객체 호출
- 개발자는 Request 객체에서 HTTP 요청 정보를 편리하게 꺼내서 사용
- 개발자는 Response 객체에 HTTP 응답 정보를 편리하게 입력
- WAS는 Response 객체에 담겨있는 내용으로 HTTP 응답 정보를 생성
● 서블릿 컨테이너
톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 한다.
서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리한다.
서블릿 객체는 싱글톤으로 관리가 되는데,
그 이유는 고객의 요청이 올 때마다 계속 객체를 생성하는 것은 비효율적이기 때문이다.
최초 로딩 시점에 서블릿 객체를 미리 만들어두고 재활용한다.
모든 고객 요청은 동일한 서블릿 객체 인스턴스에 접근한다.
'Java > Apache Tomcat' 카테고리의 다른 글
[WAS] 쓰레드 | 쓰레드 풀 | 멀티 쓰레드 (0) | 2022.03.13 |
---|---|
[Tomcat] 아파치 톰캣 설치하기 | 톰캣 서버 구동하기 | 톰캣이란? (0) | 2021.12.22 |