-
[모각코] 5주차 결과 (15:00 ~ 18:00)카테고리 없음 2022. 8. 1. 17:45
HTTP
- HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜
- Plain text, JSON, XML, HTML등 다양한 형태의 정보도 전송함
- 특징
- 클라이언트 - 서버 구조
- 클라이언트가 서버에 요청(Request)를 보내면 서버가 그에 대한 응답(Response)를 보내는 구조
- 클라이언트는 서버에 요청을 보내고 응답을 대기
- 주로 TCP/IP를 이용하는 프로토콜이다.
- 연결 상태를 유지하지 않는 (Stateless) 프로토콜이다
- 쿠키와 세션을 통해 상태 저장
- 요청, 응답 방식으로 동작
- 클라이언트 - 서버 구조
- 메서드
- GET : 리소스 취득
- POST : 서브 리소스의 작성, 리소스의 추가, 그 밖의 처리
- PUT : 리소스 갱신, 리소스 작성
- DELETE : 리소스 삭제
- HEAD : 리소스의 헤더 취득
- OPTIONS : 리소스가 서포트하는 메서드의 취득
- TRACE : 자기 앞으로 요청 메세지를 반환 시험
- CONNECT : 프록시 동작의 터널 접속으로 변경
- Create → POST/PUT, Read → GET, Update → POST, Delete → DELETE
웹 서버와 웹 어플리케이션 서버
- 웹 서버 (WS)
- 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 웹 페이지를 정적으로 처리해 반환
- 단순히 저장되어있는 웹 페이지를 클라이언트로 전달하고, 클라이언트로 부터 컨텐츠를 전달받아 저장하거나 처리하는 역할
- 웹 어플리케이션 서버 (WAS)
- 프로그램 실행 환경과 데이터베이스 접속 기능 제공
- 여러개의 트랜잭션 관리
- 업무를 처리하는 비지니스 로직 수행
- 웹 서버 + 웹 컨테이너
- WAS가 웹 서버를 포함하는 개념이지만 둘이 같이 쓰는 경우가 있음
- WAS가 할 일의 부담을 줄이기 위해
- WAS의 설정파일을 외부에 노출시키지 않도록 하기 위해
- Web Logic, Jeus, Tomcat, JBoss
- 웹 컨테이너
- JAVA 서블릿과 상호작용하는 WAS의 구성 요소
- JSP와 서블릿을 실행시킬 수 있는 소프트웨어이며 서블릿 컨테이너 라고도 한다.
- 클라이언트에서 요청을 하면 컨테이너는 HttpServletRequest, HttpServletResponse 객체를 생성햐며 post, get 여부에 따라 동적인 페이지를 생성
- 서블릿의 생명주기를 관리한다.
- 서블릿 클래스를 로딩하여 인스턴스화
- 싱글톤으로 생성되므로 모든 클라이언트의 요청은 동일한 인스턴스에 접근
- 초기화 메서드 (init) 호출
- 요청이 들어오면 적절한 서블릿 메서드 호출
- 서블릿 소멸 시 Garbage Collection 진행
- JSP도 서블릿으로 변환함
- 서블릿 클래스를 로딩하여 인스턴스화
- 웹 서버에서 받응 요청을 분석하여 서블릿을 실행시키고, 서블릿에서는 웹 서버의 정보를 확인할 수 있도록 한다.
- 통신지원
- 소켓 연결, 포트 리스닝, 스트림 생성 등
- 멀티 스레딩 지원
- 컨테이너는 요청이 올 때 마다 새로운 자바 쓰레드 생성
- 쓰레드 풀
- 선언적 보안 관리, jsp 지원
- 서블릿 수행 결과를 웹 서버에 전달하여 동적 페이지 제공
서블릿
- 동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술
- 특징
- 클라이언트의 요청에 대해 동적으로 작동하는 웹 컴포넌트
- HTML을 사용하여 response
- JAVA의 스레드를 이용하여 동작한다.
- MVC 패턴에서 컨트롤러로 이용된다.
- 서블릿 컨테이너를 통해 동작한다.
- 동작
- 클라이언트 요청
- HttpServletRequest, HttpServletResponse 객체 생성
- Web.xml이 어느 서블릿에 대한 요청인지 탐색
- 해당하는 서블릿에서 service() 메서드 호출
- doGet() 또는 doPost() 호출
- HttpServletRequest, HttpServletResponse 객체 소멸
- 생명주기
- init() : 클라이언트에서 요청이 들어왔을 때 메모리에 해당 서블릿이 없는경우 호출, 처음 한번만 실행된다. 새로운 요청이 들어오는 경우 스레드가 생성되어 처음 생성된 인스턴스를 사용한다.
- init() 이후 클라이언트의 요청에 따라 service() 메소드를 통해 doGet() 또는 doPost() 로 분기한다.
- 컨테이너가 서블릿 종료 요청을 하면 destroy() 메소드로 종료한다.