dev_beomgeun
꾸준하게 차근차근
dev_beomgeun
전체 방문자
오늘
어제
  • 분류 전체보기 (170)
    • 전공 (0)
      • 운영체제 (0)
      • 알고리즘 (0)
      • 자료구조 (0)
      • 데이터베이스 (0)
      • 네트워크 (0)
    • 개발 공부 (32)
      • 웹 (6)
      • 리눅스 (4)
      • 머신러닝 (1)
      • 스프링 (17)
      • Git (2)
      • AWS (2)
    • 개발 도서, 강의 (3)
      • 스프링 입문을 위한 자바 객체지향의 원리와 이해 (0)
      • 모든 개발자를 위한 HTTP 웹 기본 지식(김영한.. (2)
      • 스프링 부트와 AWS로 혼자 구현하는 웹서비스 (1)
    • 문제 풀이 (118)
      • 백준 알고리즘 (72)
      • 프로그래머스 알고리즘, SQL (38)
      • Hackerrank SQL (8)
    • 프로젝트 기록 (4)
      • 캡스톤 종합설계 (4)
      • 반려하루 프로젝트 (0)
    • 활동 기록 (12)
      • 네이버 부스트캠프 (7)
      • 취준 & 코테 (4)
      • 소프트웨어 마에스트로 13기 (1)
    • 이것저것 (1)

블로그 메뉴

  • 홈
  • 깃허브
  • 링크드인
  • 방명록

공지사항

인기 글

태그

  • 회고
  • Baekjoon
  • Hackerrank
  • 네이버 부스트캠프
  • c++
  • 부스트캠프
  • 서블릿
  • 반성
  • 스프링
  • 프로그래머스
  • 백준 DP
  • 일기
  • 프로그래머스 SQL
  • 백준
  • AI Tech
  • dp
  • 기록
  • HackerRank mysql
  • 그래프탐색
  • BFS

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
dev_beomgeun

꾸준하게 차근차근

Servlet이란?
개발 공부/웹

Servlet이란?

2021. 8. 10. 20:45
728x90

네이버 부스트 코스 웹 백엔드 과정을 공부하고 정리한 내용입니다.

 

0. Java Web Application이란

- WAS에 설치되어 동작하는 어플리케이션이다.

- 자바 웹 어플리케이션에는 HTML, CSS, 이미지, 자바로 작성된 클래스(Servlet 클래스 포함, package, 인터페이스 등), 각종 설정 파일 등이 포함된다.

우리가 이클립스에서 자바 웹 프로젝트를 생성하면 나오는 구조이다.

1. 서블릿이란?

- 자바 웹 어플리케이션의 구성요소 중 동적인 처리를 수행하는 Java 클래스이다.

- WAS에서 동작하며 HttpServlet 클래스를 상속받아야 한다.

- JSP와 서블릿을 효율적으로 이용하려면 웹 페이지 구성(JSP) + 복잡한 프로그래밍(서블릿)으로 구현한다.

 

2. 서블릿의 생명 주기

- init()

1. 해당 URL로 클라이언트가 서버로 요청을 하면 서버는 URL에 해당된 매핑 클래스를 찾는다.

2. 이후 매핑된 클래스가 서블릿이란 걸 알아채고, 해당 서블릿 클래스가 메모리에 존재하는지 확인한다.

3. 존재하지 않는 경우 init()이 실행되며, 서블릿 객체를 메모리에 올린다. -> 최초 실행 시 init 메소드 호출

4. 매번 똑같은 동작을 수행하고, 똑같은 결과를 산출하는 작업은 init 메소드에서 딱 한 번만 수행하도록 처리해준다면 효율적인 자원 사용이 될 것이다.

- service(response, request)

1. URL 요청이 들어올 경우 service 메소드가 호출된다.

2. 서버는 해당 서블릿 객체를 여러 개 만들지 않으므로, 매 요청마다 service 메소드만 호출되고 init은 최초 한 번만 호출된다.

- destroy()

1. 서블릿의 내용이 바뀔 경우, 이미 생성되어 있는 객체는 사라지고 새로운 내용의 서블릿 클래스의 객체가 생성돼야 하므로 destroy 메소드가 호출된다.

2. 기존 객체는 destroy 되고, 나중에 요청이 들어오면 수정된 내용의 객체가 init이 되고 service가 될 것이다. 

 

서블릿의 생명 주기

WAS는 서블릿 요청을 받으면 해당 서블릿이 메모리에 있는지 확인
if(메모리에 없음){
	새로운 서블릿 객체 생성
    init 메소드 실행
}
service() 메소드 실행

WAS가 종료되거나, 서블릿의 내용이 변경될 경우 destroy 메소드 실행

 

3. Service 메소드에 대해

- HttpServlet의 Servive 메소드는 템플릿 메소드 패턴으로 구현되었다.

- 클라이언트의 요청이 GET일 경우 doGet(request, response)를 호출한다.

- 클라이언트의 요청이 POST일 경우 doPost(request, response)를 호출한다.

 

+ 템플릿 메소드 패턴이란

- 상위 클래스에 공통 로직을 수행하는 템플릿 메소드와 하위 클래스에 오버라이딩을 강제하는 추상 메소드 또는 선택적으로 오버라이딩할 수 있는 훅 메소드를 두는 패턴.

- 즉, 상위 클래스에 정의된 견본 메소드에서 상속 받은 하위 클래스가 오버라이딩한 메소드를 호출하는 패턴이다.

- 공통 로직을 수행하는 템플릿 메소드 + 추상 클래스로 무조건 오버라이딩해야하는 메소드 + 선택적으로 오버라이딩하는 훅 메소드

 

4. 서블릿 요청에서 Response와 Request 객체 이해하기

- WAS가 웹 브라우저로부터 servlet 요청을 받으면 HttpServletRequest와 HttpServletResponse 객체를 생성한다.

 

- HttpServletRequest 

1. http 프로토콜의 Request 정보를 서블릿에게 전달하기 위함

2. 헤더 정보, 파라미터, 쿠키, URL, URI 등의 정보를 읽어 들이는 메소드를 가지고 있다. Request.getParameter() 등

3. Body의 Stream을 읽어 들이는 메소드가 있다.

- HttpServletResponse

1. WAS는 어떤 클라이언트가 요청을 보냈는지 알고 있고, 해당 클라이언트에게 응답을 보내기 위해 Response 객체를 사용한다.

2. 서블릿은 해당 객체를 이용해서 contentType, 응답 코드, 응답 메시지 등을 전달한다.

 

- Request 객체에 요청받을 때의 정보를 저장해 두고, 동적인 처리가 끝나고 웹 브라우저에게 응답할 때 Response 객체를 사용한다.

- 이 두 객체를 서블릿에게 전달하고, 서블릿 클래스에서 Request 객체를 통해 요청 정보를 얻고 결과물을 Response 객체에 저장한다.

 

출처 : 

https://www.boostcourse.org/web326/joinLectures/28762

728x90
저작자표시 비영리 변경금지 (새창열림)

'개발 공부 > 웹' 카테고리의 다른 글

웹서버와 WAS  (0) 2021.08.06
웹의 동작과 이해(HTTP 프로토콜, URL)  (0) 2021.08.03
'node'은(는) 내부 또는 외부 명령 실행할 수 있는 프로그램 또는 배치 파일이 아닙니다. cmd창, vscode 터미널 오류  (0) 2021.02.03
2. VSCode와 Node.js를 통한 환경 설정  (0) 2021.02.03
1. 자바스크립트에 대해서  (0) 2021.02.03
    '개발 공부/웹' 카테고리의 다른 글
    • 웹서버와 WAS
    • 웹의 동작과 이해(HTTP 프로토콜, URL)
    • 'node'은(는) 내부 또는 외부 명령 실행할 수 있는 프로그램 또는 배치 파일이 아닙니다. cmd창, vscode 터미널 오류
    • 2. VSCode와 Node.js를 통한 환경 설정
    dev_beomgeun
    dev_beomgeun
    백엔드 개발을 하며 얻은 지식과 경험을 공유합니다. 현재 카카오페이에서 백엔드 엔지니어로 일하고 있습니다.

    티스토리툴바