logo

English

이곳의 프로그래밍관련 정보와 소스는 마음대로 활용하셔도 좋습니다. 다만 쓰시기 전에 통보 정도는 해주시는 것이 예의 일것 같습니다. 질문이나 오류 수정은 siseong@gmail.com 으로 주세요. 감사합니다.

서블릿(Servlet) 이란 무엇인가?

by siseong@naver.com posted Nov 01, 2017
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print Update Delete
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print Update Delete

1. 서블릿(Servlet)

서블릿의 용어는 Server + Let 의 합성어라고 하는 사람들도 있고 Server + Applet 이라는 사람들도 있다. 뭔가 더 햇갈리는 느낌이 강하게 나지만 결국 "클라이언트 요청을 처리하고 그 결과를 다시 클라이언트에게 전송하는 Servlet 클래스의 구현 규칙을 지킨 자바 프로그램" 이라고 이해하면 될 것 같다. 그렇게 타협했다. 물론 자바와 관련이 있으므로 당연히 JDK 가 필요하다. 즉 자바 API 와 이를 동작시키는 JVM 이 필요하다는 소리이다.

 

2. 서블릿 컨테이너

그렇다면 서블릿이라는 놈을 관리해주는 놈이 있어야 하지 않을까? 그냥 서버에 서블릿 만들어서 위치해 둔다고 클라이언트의 Request/Response 를 처리해줄리가 없다. 결론적으로 서블릿을 관리해주는 놈을 서블릿 컨테이너라고 한다. 서블릿 컨테이너는 서블릿의 생명주기를 관리하고 요청에 따른 스레드를 생성해준다. 또, 클라이언트의 Request 를 받아주고 Response 를 보낼 수 있게 웹 서버와 소켓을 만들어서 통신을 해준다. 자세한 서블릿 컨테이너의 역할은 아래와 같다.

 

  • 통신 지원
    서블릿과 웹 서버가 통신할 수 있는 손쉬운 방법을 제공한다. 우리가 통신을 한다고 생각할 때 소켓을 만들고, 특정 포트를 리스닝하고, 연결 요청이 들어오면 스트림을 생성해서 요청을 받는다고 알고있는데 이 과정을 서블릿 컨테이너가 대신 해주는 것이다. 서블릿 컨테이너는 이런 통신 과정을 API 로 제공하고 있기 때문에 우리가 쉽게 사용할 수 있다.
  • 생명주기 관리
    서블릿 컨테이너가 기동되는 순간 서블릿 클래스를 로딩해서 인스턴스화하고, 초기화 메서드를 호출하고, 요청이 들어오면 적절한 서블릿 메소드를 찾아서 호출한다. 만약 서블릿의 생명이 다하는 순간 가비지 컬렉션을 진행한다.
  • 멀티스레딩 관리
    서블릿 컨테이너는 해당 서블릿의 요청이 들어오면 스레드를 생성해서 작업을 수행한다. 즉 동시의 여러 요청이 들어온다면 멀티스레딩 환경으로 동시다발적인 작업을 관리한다.
  • 선언적인 보안관리
    서블릿 컨테이너는 보안 관련된 기능을 지원한다. 따라서 서블릿 코드 안에 보안 관련된 메소드를 구현하지 않아도 된다.
  • JSP 지원

 

 

3. 톰캣

 톰캣이라면 프로그래밍을 하는 사람들은 다 들어봤을 이름이다. 하지만 솔직하게 말해서 나는 톰캣을 "오픈소스 웹 서버 아니야? 그거 돌리면 고양이 웹 페이지 뜨던데" 정도로 알고 있었다. 뭐... 어찌됐든 톰캣은 서블릿 컨테이너이다. 톰캣은 웹 서버와 연동하여 실행할 수 있는 자바 환경을 제공하여 자바 서버 페이지(JSP)와 자바 서블릿이 실행할 수 있는 환경을 제공하고 있다. 톰캣은 관리툴을 통해 설정을 변경할 수 있지만, XML 파일을 편집하여 설정할 수도 있다. 그리고, 톰캣은 HTTP 서버도 자체 내장하기도 한다. 보통 톰캣은 WAS 의 기능을 수행한다라고 말한다. 요즘 톰캣의 버젼이 올라가면서 웹 서버의 기능도 충분히 잘 수행하기 때문에 굳이 웹 서버와 WAS 를 나눠서 생각하지 않아도 되지만... 정확한 개념을 필요하는 사람은 여기를 참고하면 되겠다. (http://blog.naver.com/PostView.nhn?blogId=ssohyuny2000&logNo=155249496)

TAG •

List of Articles
No. Subject Author Date Views
22 MySQL 시작할때 No directory, logging in with HOME=/ 에러 해결 방법, 홈 디렉토리 변경 digipine 2021.05.06 1133
21 Docker를 통한 MySQL 설치하기 lizard2019 2021.04.15 871
20 Ubuntu mySql 완전 삭제하기 lizard2019 2021.04.15 1168
19 MySQL root 비밀번호 변경하기 (MySQL 5.7버전 이상) lizard2019 2019.06.10 3543
18 MySQL Data Backup - Database Dump 방법 및 복구 방법 엉뚱도마뱀 2017.11.18 1050
17 [PostgreSQL] 간단 사용법 digipine 2017.11.02 5531
16 MySQL 5.7.x 버전 root 및 유저 암호(Password) 변경 digipine 2017.11.02 875
15 SQLite 활용 팁 3 - 다른 DB 테이블에 트리거 사용하기 digipine 2017.11.01 948
14 SQLite 활용 팁 2 - 트리거 실전 사용하기 digipine 2017.11.01 674
13 SQLite 활용 팁 2 - 트리거 실전 사용하기 digipine 2017.11.01 573
12 SQLite 활용 팁 1 - 트리거 활용하기 digipine 2017.11.01 611
11 Ubuntu에서 sqlite3 빌드 방법 digipine 2017.11.01 926
10 HTTP Multi Part Request Sample Format digipine 2017.11.01 912
» 서블릿(Servlet) 이란 무엇인가? siseong@naver.com 2017.11.01 757
8 Apache Tomcat 설치후 관리자 모드 실행 되지 않을때 문제 해결방법 digipine 2017.11.01 3281
7 Filter를 이용한 웹 프로그래밍 Filter 란 무엇인가? file siseong@naver.com 2017.10.31 4902
6 Eclipse, JSP, Beans 실습하기 digipine 2017.10.29 3313
5 MS Access MDB를 위한 DB Connection String digipine 2017.10.29 1943
4 Choosing a free database - DB2 digipine 2017.10.29 1471
3 [Oracle] SQL*Plus 개요,각종 명령어들 digipine 2017.10.28 1484
Board Pagination Prev 1 2 Next
/ 2