일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- 개발자
- 자바알고리즘
- 운영체제
- Java
- 자바개발자
- 코드업
- 자바의정석
- Codeup
- React
- 자바스크립트
- 국비지원코딩
- 프로세스
- 자바
- 백엔드
- 개발자일기
- 스프링부트
- 미라클모닝
- db
- 소셜로그인구현
- 프로그래머
- 국비지원
- 프로그래밍
- 리액트
- 혼공컴운
- 코딩
- 알고리즘
- SpringBoot
- 데이터베이스
- 백엔드개발자
- 프로그래머스
- Today
- Total
초코딩(chocoding)
Servlet이란? 본문
Servlet이란?
=> 클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술
=> 간단히 말해서, 자바를 사용하여 웹을 만들기 위해 필요한 기술로 클라이언트가 어떠한 요청을 하면(로그인을 하고 확인 버튼을 누르는 경우 등) 그에 대한 결과를 다시 전송해주어야 하는데 이러한 역할을 하는 자바 프로그램을 말함
=> 서블릿은 자바로 구현된 CGI라고 말하기도 함
Servlet의 특징은?
- 클라이언트의 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트
- HTML을 사용하여 요청에 응답함
- Java Thread를 이용하여 동작함
- MVC 패턴에서 Controller로 이용함
- HTTP 프로토콜 서비스를 지원하는 javax.serclet.http.HttpServlet 클래스를 상속받음
- UDP보다 처리 속도가 느림
- HTML 변경 시 Servlet을 재컴파일해야 함
일반적으로 웹서버는 정적인 페이지만을 제공하기 때문에 동적인 페이지를 제공하기 위해서
웹서버는 다른 곳에 도움을 요청하여 동적인 페이지를 작성해야 함
동적인 페이지로는 임의의 이미지만을 보여주는 페이지와 같이 사용자가 요청한 시점에 페이지를 생성해서 전달해주는 것을 의미함
=> 여기서 웹서버가 동적인 페이지를 제공할 수 있도록 도와주는 어플리케이션이 서블릿이며, 동적인 페이지를 생성하는 어플리케이션이 CGI임
그렇다면 CGI는 뭘까?
CGI (Common Gateway Interface)란?
=> CGI는 특별한 라이브러리나 도구를 의미하는 것이 아니고, 별도로 제작된 웹서버와 프로그램간의 교환 방식을 말함
=> CGI방식은 어떠한 프로그래밍 언어로도 구현이 가능하며, 별도로 만들어 놓은 프로그램에 HTML의 Get 또는 Post 방법으로 클라이언트의 데이터를 환경변수로 전달하고 프로그램의 표준 출력 결과를 클라이언트에게 전송하는 것
=> 즉, 자바 어플리케이션 코딩을 하듯 웹 브라우저용 출력 화면을 만드는 방법
다음으로 Servlet의 동작 방식을 알아보자.
1. 사용자(클라이언트)가 URL을 입력하면 HTTP Request가 Servlet Container로 전송
2. 요청을 전송받은 Servlet Container는 HttpServletRequest, HttpServletResponse 객체를 생성
3. web.xml을 기반으로 사용자가 요청한 URL이 어느 서블릿에 대한 요청인지 찾음
4. 해당 서블릿에서 service 메서드 호출 후, 클라이언트의 Get / Post 여부에 따라 doGet() 또는 doPost()를 호출
5. doGet() 또는 doPost() 메서드는 동적 페이지를 생성한 후 HttpServletResponse 객체에 응답을 보냄
6. 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킴
그럼 Get, Post 방식은 무엇일까?
Get 이란?
=> 어떠한 정보를 가져와서 조회하기 위해 사용되는 방식
=> 간단한 데이터를 URL에 넣도록 설계된 방식으로 데이터를 보내는 양에 한계가 있음. HTTP 자체는 Get 방식의 URL 길이에 제약을 두고 있지는 않지만, 브라우저에서 최대 길이를 제한하고 있으며 URL 형식에 맞지 않는 파라미터 이름이나 값은 인코딩하여 전다해야 함
-> URL에 변수(데이터)를 포함시켜 요청
-> 데이터를 Header에 포함하여 전송
-> URL에 데이터가 노출되어 보안에 취약
-> 캐싱할 수 있음
* 캐싱이란?
=> 한번 접근 후에 또 요청할 시 빠르게 접근하기 위해 레지스터에 데이터를 저장시켜 놓는 것
Post 란?
=> 데이터를 서버로 제출하여 추가 또는 수정하기 위해 사용하는 방식
=> 데이터를 Body에 포함시키기 때문에 메세지 길이의 제한은 없지만 최대 요청을 받는 시간인 time out이 존재하므로 클라이언트에서 페이지를 요청하고 기다리는 시간이 존재
-> URL에 변수(데이터)를 노출하지 않고 요청
-> 데이터를 Body에 포함시킴
-> URL에 데이터가 노출되지 않아서 기본 보안은 됨
-> 캐싱할 수 없음
다시 본론으로 돌아와서 서블릿 컨테이너에 대해 알아보자.
서블릿 컨테이너란?
=> 서블릿을 관리해주는 컨테이너
=> 클리아언트 요청을 받아주고 응답할 수 있게 웹서버와 소켓으로 통신하며, 대표적인 예로 톰켓이 있음
톰켓은 실제로 웹 서버와 통신하여 JSP와 Servlet이 작동하는 환경을 제공함
Servlet Container의 역할
1. 웹서버와의 통신 지원
2. 서블릿 생명주기 (Life Cycle) 관리
3. 멀티쓰레드 지원 및 관리
4. 선언적인 보완 관리
- 클라이언트의 요청이 들어오면 컨테이너는 해당 서블릿이 메모리에 있는지 확인하고, 없을 경우 init()메소드를 호출하여 적재.
init()메소드는 처음 한번만 실행되기 때문에, 서블릿의 쓰레드에서 공통적으로 사용해야하는 것이 있다면 오버라이딩하여 구현하면 됨
실행 중 서블릿이 변경될 경우, 기존 서블릿을 파괴하고 init()을 통해 새로운 내용을 다시 메모리에 적재함 - init()이 호출된 후 클라이언트의 요청에 따라서 service()메소드를 통해 요청에 대한 응답이 doGet()가 doPost()로 분기됨
이때 서블릿 컨테이너가 클라이언트의 요청이 오면 가장 먼저 처리하는 과정으로 생성된 HttpServletRequest, HttpServletResponse에 의해 request와 response객체가 제공됨 - 컨테이너가 서블릿에 종료 요청을 하면 destroy()메소드가 호출되는데 마찬가지로 한번만 실행되며, 종료시에 처리해야하는 작업들은 destroy()메소드를 오버라이딩하여 구현하면 됨
https://mangkyu.tistory.com/14
[JSP] 서블릿(Servlet)이란?
1. Servlet(서블릿) 서블릿을 한 줄로 정의하자면 아래와 같습니다. 클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술 간단히 말해서,
mangkyu.tistory.com
위 블로그를 참고하여 작성
'Database' 카테고리의 다른 글
[JDBC] - DAO, DTO, AO (1) | 2023.10.06 |
---|