| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- integer
- wsdl
- oracle
- 스레드
- java
- http
- 영상편집
- MariaDB
- Docker
- API
- 오블완
- JDBC
- 톰캣
- 키보드
- equals
- 삼성증권
- Linux
- 컨트롤러
- MySQL
- 프로세스
- ibatis
- Tomcat
- 티스토리챌린지
- HTML
- Database
- 안드로이드 스튜디오
- cmd
- 스레드 덤프
- letterspacing
- START WITH
- Today
- Total
블로그 이름
[JAVA] 서블릿(Servlet) 이란? 본문
서블릿(Servlet) : 동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 어플리케이션 프로그래밍 기술이다.
웹에는 요청(Request)와 응답(Response) 가 있고, 개발자가 해당 요청과 응답을 일일히 처리하지 않고 비즈니스 로직에만 집중할 수 있도록 도와주는 기술이 서블릿이다. 서블릿은 이러한 웹 요청/응답의 흐름을 메서드 호출만으로 체계적으로 다룰 수 있게 해주는 기술이다.
개발자가 소스를 작성하면, .java 컴파일 후 자바 클래스에서 서블릿 컨테이너에 등록 후 요청이 오면 해당 서블릿 메서드를 실행하여 응답한다.
서블릿의 주요 특징
1. 클라이언트의 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트이다.
2. JAVA 의 스레드를 이요하여 동작한다.
3. mvc 패터에서 컨트롤러로 이용한다.
4. UDP보다 속도가 느리다.
5. HTML 변경 시 Servlet을 재 컴파일 해야 한다는 단점이 있다.
서블릿의 동작과정
1. HTTP 요청을 보낸다.
2. HttpServletRequest, HttpServletResponse 객체를 생성한다.
3. 서블릿 분석 설정파일을 참고한다. (web.xml 등...)
4. 서블릿 인스턴스 존재 유무 확인 후 없으면 init()을 실행한다.
5. 서블릿에서 service() 호출 후 클라이언트의 GET, HOST 메서드 여부에 따라 doGet() 혹은 doHost()를 호출한다.
6. doGet(), doPost() 메서드는 동적 페이지를 생성한 후, HttpServletResponse 객체에 응답을 보낸다.
7. 응답을 처리하였으면 distroy() 메서드 실행하여 Request, Response 객체를 소멸시킨다.
init() : 서블릿이 처음 요청될 때 초기화 하는 메서드, 클래스를new해서 사용하듯 서블릿도 초기화해주어야 사용 가능하다. 이렇게 초기화된 서블릿은 싱글톤으로 관리되어 또 호출된다면 기존 서블릿 클래스를 호출한다.
service() : 서블릿 컨테이너가 요청 받고 응답 내려줄 때 필요한 서블릿의 메서드이다. doGet, doPost같은 메서드들이 호출된다.
destroy() : 사용되지 않는 서블릿 클래스는 주기적으로 서블릿 컨테이너가 메서도 호출하여 제거한다. 이렇게 제거된 서블릿을 재사용하려면 init을 다시 호출해주어야한다.
Servlet 생명주기
서블릿이 자바 클래스이므로 실행하면 초기화부터 서비스 수행 후 소멸까지의 과정을 거친다. 이를 서블릿의 생명주기라고 하며, 기능 수행 콜백 메서드를 서블릿 생명주기 메서드라고 한다.
1. 클라이언트 요청이 들어오면 컨테이너는 해당 서블릿이 메모리에 있는지 확인하고, 없을 경우 init 메서드를 호출하여 메모리에 적재한다. init 메서드는 처음 한 번만 실행된다.
2. init 메서드 호출 후 service 메서드로 요청에 대한 응답이 doGet() 메서드와 doPost() 메서드로 분기된다.
3. 컨테이너가 서블릿에 종쵸 요청 시 destroy() 메서드가 호출되는데 마찬가지로 한 번만 실행되며, 종료 시에 처리해야 하는 작업들은 destroy() 메서드를 오버라이딩하여 구현하면 된다.
서블릿 컨테이너 : 서블릿을 담고 관리해주는 컨테이너이다. 구현된 servlet 클래스의 규칙에 맞게 서블릿 관리 및 요청 객체 생성 및 동적인 페이지 생성하여 응답을 보낸다. 서블릿 컨테이너는 클라이언트 요청을 받고 응답 할 수 있도록 웹 서버와 소켓으로 통신하며 대표적인 예로 톰캣이 있다. 톰캣은 실제로 웹 서버와 통신하여 JSP와 Servlet이 작동하는 환경을 제공한다.
HttpServletRequest : 헤더 정보, 파라미터, 쿠키, URI, URL 등의 정보를 읽어들이는 메서드와 Body의 Stream을 읽어 들이는 메서드를 가지고 있다.
HttpServletResponse : 클라이언트에게 응답을 보내기 위한 객체를 생성하여 서블릿에 전달하고, 이 객체로 contentType, 응답코드, 응답 메세지 등을 전송한다.
서블릿 컨테이너의 주요 기능
1. 생명주기 관리 : 서블릿의 생명주기를 관리한다. 컨테이너 실행 시 서블릿 클래스를 로딩하여 인스턴스화 하고, 초기화 메서드를 호출하고, 요청 시 서블릿 메서드를 찾아 동작한다. 그리고 서블릿의 생명이 다하면 GC로 메모리에서 제거한다.
2. 통신 지원 : 클라이언트의 Request를 받아주고 Response를 보낼 수 있게 웹 서버와 소켓을 만들어서 통신해준다. 원래 웹 통신 시 소켓을 만들고, 특정 포트를 연결하고, 연결 요청 시 스트림을 생성하여 받는 등의 복잡한 과정들을 서블릿 컨테이너가 대신 해준다.
3. 멀티스레딩 관리 : 서블릿 요청 시 스레드를 생성하여 작업을 수행한다. 여러 요청이 들어와도 멀티스레딩 환경으로 동시다발적인 작업을 관리할 수 있다. 이렇게 한번 메모리에 올라간 스레드는 다시 생성할 필요가 없기 때문에 메모리 관리에 효율적이다.
4. 선언적인 보안관리 : 보안 관련 기능을 지원하기에 따로 보안 관련 메서드를 구현하지 않아도 된다.
오늘은 서블릿이 무엇인지에 대해 알아보았다.
'개발 > Java' 카테고리의 다른 글
| [JAVA] 자바 버전 여러 개 활용하기 (프로그램 실행 시 자바 버전 변경) (0) | 2025.02.12 |
|---|---|
| [JAVA] 긴 데이터 줄이는 방법 (StringUtils.abbreviate) (0) | 2025.02.10 |
| [JAVA] Integer 에서 == 연산자 대신 'equals' 메서드 비교해야 하는 이유 (0) | 2025.01.19 |
| [JAVA] isEmpty() 와 isBlank()의 차이 (1) | 2024.12.30 |
| [JAVA] List를 지정 크기로 분할하기 (0) | 2024.12.30 |