기본 구조는
Client와 Server 간에 request하면 response하는 구조이며 하이퍼텍스트, 하이퍼 미디어 등을 전달한다.
하이퍼텍스트 : 다른 문서를 참조하는 문서를 생성하는 것
하이퍼미디어 : 사진, 영상 등을 포함하는 문서로의 링크를 갖는 문서
보통 요청된 파일을 메모리의 캐시에 저장
멀티 Thread나 멀티 Process를 사용한다.
웹 서버 기능 + Program 코드 를 실행해서 Application Logic 수행할 수 있게 해주는 계층
HTTP 요청 시 WAS는 Request, Response 객체를 새로 만들어서 서블릿 객체를 호출한다.
ex) Servlet, JSP, 스프링 MVC
HTTP 요청 전후 처리 과정이 있는데 서블릿을 통해서 HTTP 스펙을 매우 편하게 쓸 수 있게 된다.
Servlet 객체는
그냥 코드만 만들면 된다. WAS 안에는 서블릿 컨테이너라는 것이 있다.
Servlet 객체를 생성, 초기화, 호출, 종료 하는 생성주기를 관리한다.
싱글톤으로 관리한다.
jsp도 Servlet으로 변환되어 사용된다.
동시 요청을 위한 멀티 쓰레드 처리를 지원한다.
WAS 내부에 쓰레드 풀이 존재한다. 어플리케이션이 로딩될 때 초기에 만들어 둔다.
만약 매 요청마다 만든다면 쓰레드 생성 비용, Context Switching 등 성능이 저하될 것이다.
tomcat의 경우 최대 200개 까지 기본 설정되도록 세팅되어있다. 모두 사용 중이라면 요청을 거절하거나 특정 숫자만큼만 대기하도록 설정 할 수 있다.
WAS의 주요 튜닝 포인트 중 하나는 최대 쓰레드 수이도.
쓰레드 풀의 적정 숫자를 찾기 위해서는 성능 테스트를 통해 찾아 내야 한다.
WAS가 처리하므로 개발자가 멀티 쓰레드 관련 코드를 신경 쓰지 않아도 된다.
마치 싱글 쓰레드 프로그래밍 하듯이 편리하게 소스코드를 개발하면 된다.
단 싱글톤은 주의해서 사용해야 한다.
위치지정자. 전 세계 문서들에 대한 Access를 가능하게 하기 위한 개념
(Protocol)://(Host):(Port)/(Path)
(Host) 자리에 보통 www가 들어가지만 강제적 사항은 아니다. 어떤 Domain Name도 가능하다.
(Path)는 정보가 위치하고 있는 파일 이름을 의미한다.
그냥 HTML, XML
서버에서 생성되어 저장된 고정 내용 문서
클라이언트는 문서의 복사본만 얻을 수 있다.
파일의 내용이 사용될 때가 아니라 생성될 때 결정된다.
브라우저가 문서를 요청할 때마다 웹 서버에 의해 생성.
동적 문서의 내용은 각 요청자 마다 다를 수 있다.
CGI -> 동적 문서를 위한 스크립트 기술
CGI
동적문서가 어떻게 작성되어야 하는지, 입력 Data가 어떻게 Program에 제공되어야 하는지, 출력결과가 어떻게 사용되어야 하는지 등을 정의한 표준들의 집합
동적 문서를 위한 스크립트 기술
문서에서 고정되는 부분과 변환하는 부분을 나누어 서버에서 수행될 수 있는 Script(소스코드)를 내장
예를들면 php, jsp와 같은 것들
화면에서 움직이는 그림, 사용자와 상호작용하는 Program
Java의 applet, JavaScript 등.
요청 메시지와 응답 메시지로 나뉜다.
Request Line
Header Line
Blank Line
Body
로 구성된다.
Method sp URL sp Version cr Lf
Header Name : sp Value cr lf
cr lf
GET
Server로 부터 Document를 요청
POST
Client에서 Server로 Some Information을 Send함
PUT
Server에서 Client로 Some Information을 send함.
1.1나 2 등 기술
클라이언트에서 서버로 전송 시 추가 정보를 기술.
Status Line
Header Line
Blank Line
Body
로 구성된다.
version sp statuscode sp Phrase cr lf
Header Name : sp Value cr lf
cr lf
100
정보 차원
200
성공적
300
클라이언트를 다른 URL로 재지정
400
클라이언트 측에서 오류 발생
403 : Service is denied
404 : Document is not found
406 : request format is not acceptable
500
서버 측에서 오류
501 : 요청된 action은 수행될 수 없음
503 : service is temporarily unavailable
HTTP 1.0에서 HTTP1.1로 변화하면서 영속적 연결을 지원
HTTP 1.0은 매 Req-Res 쌍 마다
연결 설정을 해야했으나, 1.1은 연결 설정 후 연결 종료 메시지를 보내기 전까지 Req-Res 쌍을 주고받을 수 있도록 하는 규약.
브라우저는 쿠키를 도메인 서버이름으로 정렬되는 쿠키 디렉토리에 저장한다.
쿠키의 사용은 브라우저가 읽을 수 없다. 오직 서버가 만들고 서버가 사용한다.
1) 등록된 사용자에게만 액세스를 허용하거나, 2) 유튜브 알고리즘 등에서 사용된다.
HTTP 자체는 보안을 제공하지 않는다.
HTTP는 SSL 위에서 수행될 수 있다.
HTTPS : 기밀성, 인증, 무결성을 제공한다.