웹 서버 실행 환경이란?
웹 서버 실행 환경이란?
목차
• 웹 개발자 이것까지 알아야 하나?
• 그럼 웹 서버는 무엇을 어떻게 처리하나?
• HTTP 메시지 상세 분석
웹 서버 실행 환경이란?
Socket 통신 및 HTTP 프로토콜 해석 등을 추상화한 환경
?
들어는본듯?
SMS?인증?
HTML5?WEB Socket??
?HTML?
WHAT?
1. 웹 개발자가 이것까지 알아야 하나?
TCP
Keep Alive
GzipHTTP
Chunked
등....;;;;;Cache
Session
"관련 Needs가 발생하지 않는 한 굳이 알아야 할 필요성은 없다고 생각한다." by 전성균!!
1. 웹 개발자가 이것까지 알아야 하나?
TCP
Keep Alive
GzipHTTP
Chunked
등....;;;;;
1. 웹 개발자가 이것까지 알아야 하나?
TCP
Keep Alive
GzipHTTP
Chunked
등....;;;;;Cache
1. 웹 개발자가 이것까지 알아야 하나?
TCP
Keep Alive
GzipHTTP
Chunked
등....;;;;;Cache
Session
그럼 몰라도 상관 없겠네?
이런거 까지 알아 뭐하겠노?또 소고기 사묵겠지?
"하지만 다양한 기능 구현 시 좀 더 최적화된 결과물을 만들어 낼 수 있다."
2. 그럼 웹 서버는 무엇을 어떻게 처리하나?
Web Server +
Web Application Server
너무 간단한거 아니야?
Wire Shake로 본 웹 서버 처리 과정
웹 서버 처리 과정1. HTTP Session(논리적 연결) 생성
2. 브라우저 내부 Thread가 Client Socket을 만들어 Server Socket 과의 연결을 수행한다3. 브라우저와 웹 서버는 HTTP Request 및 Response를 수행한다.
4. Server Socket Close
5. Client Socket Close 및 브라우저 쓰레드 종료.
6. HTTP Session Close
3. HTTP 메시지 상세 분석
HTTP 메시지
- HTTP 메시지는 원격 기계에 있는 문서의 위치와 메시지를 지정하는 방법이다.
- HTTP 메시지는 아스키코드 13번인 "캐리지 리턴(\r)"과 10번인 "라인피드(\n)"의 조합으로 각 행을 구분한다.(CRLF)
- HTTP 메시지는 시작행과 부가정보(선택적으로 추가 가능한 메시지 헤더와 메시지 바디)로 구성된다.
시작행
- 시작 행은 HTTP 메시지의 가장 첫 행에 존재한다.
- 시작 행은 HTTP (메서드/URL/버전/응답코드) 등의 정보로 구성된다.
- HTTP POST 요청 시 시작 행을 가장 먼저 읽어드린 웹 서버는 "메시지 바디"가 들어올 것을 예상 후 메시지 헤더의 Content-Length 길이를 읽어드려 메시지 바디 크기를 파악한다.
- HTTP GET 요청 시 시작 행을 가장 먼저 읽어드린 웹 서버는 "메시지 바디"가 존재하지 않는다는 것을예상한다.
HTTP 메시지 헤더
- 메시지 헤더는 콜론(:)으로 구분된 이름/값 쌍으로 정의된다.
- 메시지 헤더는 여러 개일 수 있으며, 가장 마지막에 내용 없는 메시지 헤더를 추가해 더 이상의 메시지 헤더가 없음을 알린다.
- Chunked 인코딩 방식에서는 크기가 0인 청크를 사용해 메시지 바디의 끝을 알린다.
즉 메시지 바디의 종료 시점은 크기가 0인 청크를 만날 때이다.
- 메시지 바디의 끝을 알리는 방법으로 Content-Length 메시지 헤더를 사용한다.(POST 요청 시 해당)
만약 이 값이 지정된 경우는 메시지 헤더 전송이 모두 완료된 후 해당 크기 만큼의 메시지 바디가 따라온다는 의미를 가지게 된다.(Chunked 인코딩 방식 제외)
HTTP 메시지 바디
- 메시지 헤더 종료 후 메시지 헤더의 Content-Length 길이를 통해 메시지 바디를 얼마나 읽어야 되는지 판단한다.
- 만약 바이너리(mime-type: multipart/form-data) 데이터 전송 시 메시지 바디는 임의의 문자열인 "7dd3ba3a4316ee"로 각 행이 구분된다.
- 메시지 헤더의 Content-Length로 전달받은 크기에 도달하면 메시지 읽기를 종료한다.
이후 모든 내용(시작 행 + 부가정보)을 취합해 클라이언트로 응답한다.(정적 HTML 등)
HTTP 헤더 처리
HTTP 바디 처리
최희탁 지음
Hanbit eBook
Realtime 07
웹 프로그래머를 위한
서블릿 컨테이너의 이해
참고 서적
감사합니다.