네이버 부스트 코스 웹 백엔드 과정을 공부하고 정리한 내용입니다.
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 객체에 저장한다.
출처 :
'개발 공부 > 웹' 카테고리의 다른 글
웹서버와 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 |