SlideShare una empresa de Scribd logo
1 de 27
Descargar para leer sin conexión
HTTP 완벽가이드
Ch5. Web Servers
웹 서버란
웹 서버란?
- HTTP요청을 처리하고 응답을 제공하는 장비, 소프트웨어
웹 서버 구현
- HTTP프로토콜 구현, TCP기반의 HTTP처리
- 리소스를 관리, 웹 서버 설정 통제 확장하기 위한 기능 제공
간단한 펄 웹 서버
진짜 웹 서버가 하는 일
1. Set up connection
- 클라이언트의 접속을 받아들이거나, 닫는다.
2. Receive request
- HTTP요청 메시지를 네트워크로 부터 읽어들인다.
3. Process request
- 요청 메시지를 해석하고 그에 따른 작업을 한다.
4. Access resource
- 메시지에서 지정한 리소스에 접근한다.
진짜 웹 서버가 하는 일
5. Construct response
- 헤더를 포함한 HTTP 응답 메시지를 생성
6. Send response
- 응답을 클라이언트에게 돌려준다.
7. Log transaction
- 로그파일에 트렌잭션 완료에 대한 기록을 남긴다.
Step1 : 클라이언트 커넥션 수락
- 새 커넥션 다루기
클라이언트가 웹 서버에 TCP커넥션 요청
웹 서버는 TCP커넥션에서 IP를 체크 후, 인가 기능 제공
- 클라이언트 호스트 명 식별
웹 서버는 reverse DNS를 사용, 접근 제어와 로깅 기능 제공
하지만 성능상의 문제로 1.3에서 기본으로 off
참조 : https://httpd.apache.org/docs/2.2/ko/misc/perf-tuning.html
- ident를 통해 클라이언트 알아보기
서버가 identd서버 포트(113)으로 정보 요청, 클라이언트는 클라이언트 정보를
돌려줌.
하지만 공공인터넷에서는 보안과, 트랜잭션 문제로 제한적인 사용.
Step1 : 클라이언트 커넥션 수락
요청 메세지 파싱 방법
- 요청 메서드, 리소스 식별자(URI), 버전번호를 찾는다.
각 값은 한 개의 스페이스로 분리, 끝은 CRLF
- 메시지 헤더들을 읽는다. 끝은 CRLF
- 요청 본문이 있다면, Content-Length만큼 읽어 들인다.
Step2 : 요청 메시지 수신
커넥션 입력/출력 처리 아케텍처
고성능 웹 서버는 수천 개의 커넥션을 동시지원
웹 서버의 아키텍처에 따라 요청을 처리하는 방식도 달라짐
Step2 : 요청 메시지 수신
- 한 번에 하나씩 요청을 처리합니다.
- 트랜잭션이 완료되면, 다음 트랜잭션 처리
- 처리 도중에 모든 다른 커넥션이 무시 되기 때문에,
로드가 적은 서버에서 사용
단일 스레드 웹 서버
- 요청을 처리하기 위해, 여러개의 프로세스 혹은 고효율 스레드 할당.
- 단일 스레드 보다 많은 커넥션을 동시에 처리 가능
- 스레드/프로세스는 요청시 생성하거나, worker pool에서 사용
- 많은 요청으로 인한 메모리,시스템 리소스 소비가 이어진다.
그래서 스레드/프로세스 최대 생성 개수 제한을 둠
멀티프로세스와 멀티스레드 웹 서버
- 대량의 커넥션을 지원하기 위해 사용됨
- 모든 커넥션을 모니터링, 커넥션에 상태가 바뀌면 해당 커넥션 처리
- 스레드와, 프로세스는 유휴(idle) 상태의 커넥션에
매어있지 않아도 됨.
다중 I/O서버
- 여러개의 CPU의 이점을 살리기 위해, 멀티스레딩과 다중화를 결합한 모델
- 여러개의 스레드가 각각 열려있는 커넥션을 감시하고
변화가 있을때 커넥션에 대한 작업을 수행
다중 멀티스레드 웹 서버
Step3 : 요청처리
- 웹 서버가 요청을 받으면, 서버는 요청으로 부터 메서드, 리소스, 헤더, 본문
을
얻어서 요청을 처리한다.
- 메서드에 따라, 본문필요 여부 다름
- 이후 책의 나머지 챕터에서 다룸
Step4 : 리소스의 매핑과 접근
- 웹 서버는 리소스 서버
- 정적 파일(HTML, JPEG, JS), 동적 컨텐츠 제공
- URI에 매핑되는 리소스 식별 방법 제공
- Docroot(DocumentRoot)
- VirtualHost
- Directory Index
- 접근제어
DocumentRoot
URI를 웹 서버의 파일 시스템 안에 있는 파일 이름으로 사용
VirtualHost
각 사이트에 분리된 문서 루트를 주는 방법
한 웹 서버에서 여러개의 웹 사이트를 호스팅 할 때
DirectoryIndex
- 웹 서버는, 파일이름이 아닌 디렉토리 URL에 대한 요청을 받을 수 있다.
- 대부분의 웹 서버는 아래와 같이 처리
- 에러를 반환
- 디렉터리 대신 ‘색인 파일' 반환
- 디렉터리를 탐색, 내용을 담음 HTML반환
- 불필요한 파일 노출을 야기
Step5 : 응답 만들기
- 응답 메시지는 응답상태코드, 응답 헤더, 응답 본문(선택)으로 구성
- 응답 본문이 있다면, 응답 메시지는 다음을 포함한다.
- MIME타입을 서술하는 Content-Type헤더
- 길이를 서술하는 Content-Length헤더
- 실제 응답 본문의 내용
- 리다이렉션
MIME 타입 결정하기
웹 서버에게는 응답 본문의 MIME타입을 결정해야하는 책임이 있다.
- Mime.types
- 매직 타이핑(Magic typing)
- 유형 명시(Explicit typing)
- 유형 협상(Type negotiation)
Step6 : 응답 보내기
- 전송과 응답도 커넥션 관리가 핵심
- nonpersistent(비지속) 커넥션
- 메세지 전송 후 커덱션을 닫기
- persistent(지속) 커넥션이라면
- 서버가 Content-Length헤더를 바르게 계산하기 위해 커넥션을 유지
- 클라이언트가 응답이 언제 끝나는지 알 수 없을경우 커넥션을 유지
Step7 : 로깅
- HTTP메서드
- 클라이언트와 서버의 HTTP버전
- 요청받은 리소스의 URL
- 응답의 HTTP상태코드
- 요청과 응답 메세지의 크기(모든 엔터티 본문을 포함)
- 트렌젝션이 일어난 시간
- Referer와 User-Agent헤더 값
일반적인 로그 포맷
209.1.32.44 - - [03/Oct/1999:14:16:00 -0400] "GET / HTTP/1.0" 200 1024
http-guide.com - dg [03/Oct/1999:14:16:32 -0400] "GET / HTTP/1.0" 200 477

Más contenido relacionado

La actualidad más candente

Chap8 - HTTP 완벽가이드 8장
Chap8 - HTTP 완벽가이드 8장Chap8 - HTTP 완벽가이드 8장
Chap8 - HTTP 완벽가이드 8장LJH11
 
HTTP 발표자료 - 김연수
HTTP 발표자료 - 김연수HTTP 발표자료 - 김연수
HTTP 발표자료 - 김연수Yeon Soo Kim
 
Http 헤더
Http 헤더Http 헤더
Http 헤더kidoki
 
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형Minchul Jung
 
SPDY : 더 빠른 웹을 위한 프로토콜
SPDY : 더 빠른 웹을 위한 프로토콜SPDY : 더 빠른 웹을 위한 프로토콜
SPDY : 더 빠른 웹을 위한 프로토콜Yunsang Choi
 
Http 완벽 가이드(2장 url과 리소스)
Http 완벽 가이드(2장 url과 리소스)Http 완벽 가이드(2장 url과 리소스)
Http 완벽 가이드(2장 url과 리소스)Choonghyun Yang
 
서버성능개선 류우림
서버성능개선 류우림서버성능개선 류우림
서버성능개선 류우림우림 류
 
DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요
DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요
DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요dgmit2009
 
웹을 지탱하는 기술
웹을 지탱하는 기술웹을 지탱하는 기술
웹을 지탱하는 기술JungHyuk Kwon
 
Express framework tutorial
Express framework tutorialExpress framework tutorial
Express framework tutorial우림 류
 
HTTP 완벽가이드 : 1-1 http 개관
 HTTP 완벽가이드 : 1-1 http 개관 HTTP 완벽가이드 : 1-1 http 개관
HTTP 완벽가이드 : 1-1 http 개관ssuser491981
 
HTTP/3 시대의 웹 성능 최적화 기술 이해하기
HTTP/3 시대의 웹 성능 최적화 기술 이해하기HTTP/3 시대의 웹 성능 최적화 기술 이해하기
HTTP/3 시대의 웹 성능 최적화 기술 이해하기SangJin Kang
 
F5 spdy 솔루션 선관
F5 spdy 솔루션 선관F5 spdy 솔루션 선관
F5 spdy 솔루션 선관itian-f5
 
HTTP/2와 웹 성능 최적화 방안
HTTP/2와 웹 성능 최적화 방안HTTP/2와 웹 성능 최적화 방안
HTTP/2와 웹 성능 최적화 방안SangJin Kang
 
Web App Security 2015.10
Web App Security 2015.10Web App Security 2015.10
Web App Security 2015.10Chanjin Park
 

La actualidad más candente (20)

Chap8 - HTTP 완벽가이드 8장
Chap8 - HTTP 완벽가이드 8장Chap8 - HTTP 완벽가이드 8장
Chap8 - HTTP 완벽가이드 8장
 
HTTP 발표자료 - 김연수
HTTP 발표자료 - 김연수HTTP 발표자료 - 김연수
HTTP 발표자료 - 김연수
 
HTTPS
HTTPSHTTPS
HTTPS
 
Http 헤더
Http 헤더Http 헤더
Http 헤더
 
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
 
SPDY : 더 빠른 웹을 위한 프로토콜
SPDY : 더 빠른 웹을 위한 프로토콜SPDY : 더 빠른 웹을 위한 프로토콜
SPDY : 더 빠른 웹을 위한 프로토콜
 
Http 완벽 가이드(2장 url과 리소스)
Http 완벽 가이드(2장 url과 리소스)Http 완벽 가이드(2장 url과 리소스)
Http 완벽 가이드(2장 url과 리소스)
 
서버성능개선 류우림
서버성능개선 류우림서버성능개선 류우림
서버성능개선 류우림
 
Http method
Http methodHttp method
Http method
 
DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요
DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요
DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요
 
웹을 지탱하는 기술
웹을 지탱하는 기술웹을 지탱하는 기술
웹을 지탱하는 기술
 
Web server
Web serverWeb server
Web server
 
Express framework tutorial
Express framework tutorialExpress framework tutorial
Express framework tutorial
 
3장
3장3장
3장
 
HTTP 완벽가이드 : 1-1 http 개관
 HTTP 완벽가이드 : 1-1 http 개관 HTTP 완벽가이드 : 1-1 http 개관
HTTP 완벽가이드 : 1-1 http 개관
 
HTTP/3 시대의 웹 성능 최적화 기술 이해하기
HTTP/3 시대의 웹 성능 최적화 기술 이해하기HTTP/3 시대의 웹 성능 최적화 기술 이해하기
HTTP/3 시대의 웹 성능 최적화 기술 이해하기
 
F5 spdy 솔루션 선관
F5 spdy 솔루션 선관F5 spdy 솔루션 선관
F5 spdy 솔루션 선관
 
Http redirection
Http redirectionHttp redirection
Http redirection
 
HTTP/2와 웹 성능 최적화 방안
HTTP/2와 웹 성능 최적화 방안HTTP/2와 웹 성능 최적화 방안
HTTP/2와 웹 성능 최적화 방안
 
Web App Security 2015.10
Web App Security 2015.10Web App Security 2015.10
Web App Security 2015.10
 

Destacado

Arduino入門(kjcode)
Arduino入門(kjcode)Arduino入門(kjcode)
Arduino入門(kjcode)Jaeeun Lee
 
Objective-C에서 멀티스레드 사용하기
Objective-C에서 멀티스레드 사용하기Objective-C에서 멀티스레드 사용하기
Objective-C에서 멀티스레드 사용하기Jaeeun Lee
 
[명우니닷컴]자바 스레드에 대해
[명우니닷컴]자바 스레드에 대해[명우니닷컴]자바 스레드에 대해
[명우니닷컴]자바 스레드에 대해Myeongun Ryu
 
[명우니닷컴]해커란?
[명우니닷컴]해커란?[명우니닷컴]해커란?
[명우니닷컴]해커란?Myeongun Ryu
 
웹 서버의 기능 및 역할_Wh apm
웹 서버의 기능 및 역할_Wh apm웹 서버의 기능 및 역할_Wh apm
웹 서버의 기능 및 역할_Wh apm엑셈
 
WAS의 동작과 WEB, Servlet, JSP_Wh apm
WAS의 동작과 WEB, Servlet, JSP_Wh apmWAS의 동작과 WEB, Servlet, JSP_Wh apm
WAS의 동작과 WEB, Servlet, JSP_Wh apm엑셈
 

Destacado (7)

Arduino入門(kjcode)
Arduino入門(kjcode)Arduino入門(kjcode)
Arduino入門(kjcode)
 
Objective-C에서 멀티스레드 사용하기
Objective-C에서 멀티스레드 사용하기Objective-C에서 멀티스레드 사용하기
Objective-C에서 멀티스레드 사용하기
 
Java(3/4)
Java(3/4)Java(3/4)
Java(3/4)
 
[명우니닷컴]자바 스레드에 대해
[명우니닷컴]자바 스레드에 대해[명우니닷컴]자바 스레드에 대해
[명우니닷컴]자바 스레드에 대해
 
[명우니닷컴]해커란?
[명우니닷컴]해커란?[명우니닷컴]해커란?
[명우니닷컴]해커란?
 
웹 서버의 기능 및 역할_Wh apm
웹 서버의 기능 및 역할_Wh apm웹 서버의 기능 및 역할_Wh apm
웹 서버의 기능 및 역할_Wh apm
 
WAS의 동작과 WEB, Servlet, JSP_Wh apm
WAS의 동작과 WEB, Servlet, JSP_Wh apmWAS의 동작과 WEB, Servlet, JSP_Wh apm
WAS의 동작과 WEB, Servlet, JSP_Wh apm
 

Similar a HTTP 완벽가이드 - ch5. web server

파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 SeongHyun Ahn
 
REST에 대해 알아봅시다.pdf
REST에 대해 알아봅시다.pdfREST에 대해 알아봅시다.pdf
REST에 대해 알아봅시다.pdfHo Jeong Im
 
20160427 ROS 4차 강의 (for 아스라다 팀)
20160427 ROS 4차 강의 (for 아스라다 팀)20160427 ROS 4차 강의 (for 아스라다 팀)
20160427 ROS 4차 강의 (for 아스라다 팀)Yoonseok Pyo
 
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST APIWooyoung Ko
 
Web server page_ed10
Web server page_ed10Web server page_ed10
Web server page_ed10hungrok
 
Browser Principle에 대해 알아보자.pdf
Browser Principle에 대해 알아보자.pdfBrowser Principle에 대해 알아보자.pdf
Browser Principle에 대해 알아보자.pdfHo Jeong Im
 
HeadFisrt Servlet&JSP Chapter 1
HeadFisrt Servlet&JSP Chapter 1HeadFisrt Servlet&JSP Chapter 1
HeadFisrt Servlet&JSP Chapter 1J B
 
Servlet&jsp 1장
Servlet&jsp 1장Servlet&jsp 1장
Servlet&jsp 1장JeongBong Kim
 
오픈 소스 클라우드 플랫폼 분석
오픈 소스 클라우드 플랫폼 분석오픈 소스 클라우드 플랫폼 분석
오픈 소스 클라우드 플랫폼 분석Jennifer Noh
 
WoO 2012-Web 서비스 기술
WoO 2012-Web 서비스 기술WoO 2012-Web 서비스 기술
WoO 2012-Web 서비스 기술Changhwan Yi
 
Mcollective orchestration tool 소개
Mcollective orchestration tool 소개Mcollective orchestration tool 소개
Mcollective orchestration tool 소개태준 문
 
파일 전송 SFTP 서버 솔루션 - CrushFTP - old version
파일 전송 SFTP 서버 솔루션 - CrushFTP - old version파일 전송 SFTP 서버 솔루션 - CrushFTP - old version
파일 전송 SFTP 서버 솔루션 - CrushFTP - old version옥시즌
 
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdfOS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdfHo Jeong Im
 
파일 전송 SFTP 서버 솔루션 - CrushFTP - old version
파일 전송 SFTP 서버 솔루션 - CrushFTP - old version파일 전송 SFTP 서버 솔루션 - CrushFTP - old version
파일 전송 SFTP 서버 솔루션 - CrushFTP - old version옥시즌
 
한국청소년정보과학회 1회 세미나 - RestFul API Basic
한국청소년정보과학회 1회 세미나 - RestFul API Basic한국청소년정보과학회 1회 세미나 - RestFul API Basic
한국청소년정보과학회 1회 세미나 - RestFul API Basic한국청소년정보과학회
 

Similar a HTTP 완벽가이드 - ch5. web server (20)

파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄
 
Servlet3
Servlet3Servlet3
Servlet3
 
REST에 대해 알아봅시다.pdf
REST에 대해 알아봅시다.pdfREST에 대해 알아봅시다.pdf
REST에 대해 알아봅시다.pdf
 
20160427 ROS 4차 강의 (for 아스라다 팀)
20160427 ROS 4차 강의 (for 아스라다 팀)20160427 ROS 4차 강의 (for 아스라다 팀)
20160427 ROS 4차 강의 (for 아스라다 팀)
 
L4교육자료
L4교육자료L4교육자료
L4교육자료
 
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
 
Web server page_ed10
Web server page_ed10Web server page_ed10
Web server page_ed10
 
Browser Principle에 대해 알아보자.pdf
Browser Principle에 대해 알아보자.pdfBrowser Principle에 대해 알아보자.pdf
Browser Principle에 대해 알아보자.pdf
 
HeadFisrt Servlet&JSP Chapter 1
HeadFisrt Servlet&JSP Chapter 1HeadFisrt Servlet&JSP Chapter 1
HeadFisrt Servlet&JSP Chapter 1
 
Servlet&jsp 1장
Servlet&jsp 1장Servlet&jsp 1장
Servlet&jsp 1장
 
오픈 소스 클라우드 플랫폼 분석
오픈 소스 클라우드 플랫폼 분석오픈 소스 클라우드 플랫폼 분석
오픈 소스 클라우드 플랫폼 분석
 
Node.js 첫걸음
Node.js 첫걸음Node.js 첫걸음
Node.js 첫걸음
 
WoO 2012-Web 서비스 기술
WoO 2012-Web 서비스 기술WoO 2012-Web 서비스 기술
WoO 2012-Web 서비스 기술
 
Warp
WarpWarp
Warp
 
CDN overview
CDN overviewCDN overview
CDN overview
 
Mcollective orchestration tool 소개
Mcollective orchestration tool 소개Mcollective orchestration tool 소개
Mcollective orchestration tool 소개
 
파일 전송 SFTP 서버 솔루션 - CrushFTP - old version
파일 전송 SFTP 서버 솔루션 - CrushFTP - old version파일 전송 SFTP 서버 솔루션 - CrushFTP - old version
파일 전송 SFTP 서버 솔루션 - CrushFTP - old version
 
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdfOS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
 
파일 전송 SFTP 서버 솔루션 - CrushFTP - old version
파일 전송 SFTP 서버 솔루션 - CrushFTP - old version파일 전송 SFTP 서버 솔루션 - CrushFTP - old version
파일 전송 SFTP 서버 솔루션 - CrushFTP - old version
 
한국청소년정보과학회 1회 세미나 - RestFul API Basic
한국청소년정보과학회 1회 세미나 - RestFul API Basic한국청소년정보과학회 1회 세미나 - RestFul API Basic
한국청소년정보과학회 1회 세미나 - RestFul API Basic
 

Más de Mungyu Choi

learning spark - Chatper8. Tuning and Debugging
learning spark - Chatper8. Tuning and Debugginglearning spark - Chatper8. Tuning and Debugging
learning spark - Chatper8. Tuning and DebuggingMungyu Choi
 
Chapter3 - learning spark
Chapter3 - learning sparkChapter3 - learning spark
Chapter3 - learning sparkMungyu Choi
 
Elasticsearch server Chapter5
Elasticsearch server Chapter5Elasticsearch server Chapter5
Elasticsearch server Chapter5Mungyu Choi
 
JVM과 톰캣 튜닝
JVM과 톰캣 튜닝JVM과 톰캣 튜닝
JVM과 톰캣 튜닝Mungyu Choi
 
조대협의 서버 사이드 - 대용량 아키텍처와 성능튜닝
조대협의 서버 사이드 - 대용량 아키텍처와 성능튜닝조대협의 서버 사이드 - 대용량 아키텍처와 성능튜닝
조대협의 서버 사이드 - 대용량 아키텍처와 성능튜닝Mungyu Choi
 
Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어
Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어
Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어Mungyu Choi
 
nodejs websocket & SOCKET.IO
nodejs websocket & SOCKET.IOnodejs websocket & SOCKET.IO
nodejs websocket & SOCKET.IOMungyu Choi
 
정렬(버블정렬,선택정렬,삽입정렬)
정렬(버블정렬,선택정렬,삽입정렬)정렬(버블정렬,선택정렬,삽입정렬)
정렬(버블정렬,선택정렬,삽입정렬)Mungyu Choi
 
c++ API디자인 ch9. 발표자료
c++ API디자인 ch9. 발표자료c++ API디자인 ch9. 발표자료
c++ API디자인 ch9. 발표자료Mungyu Choi
 
Ch11. server infra
Ch11. server infraCh11. server infra
Ch11. server infraMungyu Choi
 
대규모 서비스를 지탱하는 기술 ch6
대규모 서비스를 지탱하는 기술 ch6대규모 서비스를 지탱하는 기술 ch6
대규모 서비스를 지탱하는 기술 ch6Mungyu Choi
 
4.1 단일호스트의 부하
4.1 단일호스트의 부하4.1 단일호스트의 부하
4.1 단일호스트의 부하Mungyu Choi
 

Más de Mungyu Choi (17)

learning spark - Chatper8. Tuning and Debugging
learning spark - Chatper8. Tuning and Debugginglearning spark - Chatper8. Tuning and Debugging
learning spark - Chatper8. Tuning and Debugging
 
Chapter3 - learning spark
Chapter3 - learning sparkChapter3 - learning spark
Chapter3 - learning spark
 
Elasticsearch server Chapter5
Elasticsearch server Chapter5Elasticsearch server Chapter5
Elasticsearch server Chapter5
 
JVM과 톰캣 튜닝
JVM과 톰캣 튜닝JVM과 톰캣 튜닝
JVM과 톰캣 튜닝
 
조대협의 서버 사이드 - 대용량 아키텍처와 성능튜닝
조대협의 서버 사이드 - 대용량 아키텍처와 성능튜닝조대협의 서버 사이드 - 대용량 아키텍처와 성능튜닝
조대협의 서버 사이드 - 대용량 아키텍처와 성능튜닝
 
Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어
Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어
Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어
 
nodejs websocket & SOCKET.IO
nodejs websocket & SOCKET.IOnodejs websocket & SOCKET.IO
nodejs websocket & SOCKET.IO
 
정렬(버블정렬,선택정렬,삽입정렬)
정렬(버블정렬,선택정렬,삽입정렬)정렬(버블정렬,선택정렬,삽입정렬)
정렬(버블정렬,선택정렬,삽입정렬)
 
c++ API디자인 ch9. 발표자료
c++ API디자인 ch9. 발표자료c++ API디자인 ch9. 발표자료
c++ API디자인 ch9. 발표자료
 
b+tree
b+treeb+tree
b+tree
 
Hdfs
HdfsHdfs
Hdfs
 
hadoop ch1
hadoop ch1hadoop ch1
hadoop ch1
 
A tour of go
A tour of goA tour of go
A tour of go
 
Ch11. server infra
Ch11. server infraCh11. server infra
Ch11. server infra
 
대규모 서비스를 지탱하는 기술 ch6
대규모 서비스를 지탱하는 기술 ch6대규모 서비스를 지탱하는 기술 ch6
대규모 서비스를 지탱하는 기술 ch6
 
4.1 단일호스트의 부하
4.1 단일호스트의 부하4.1 단일호스트의 부하
4.1 단일호스트의 부하
 
Chap4_2
Chap4_2Chap4_2
Chap4_2
 

HTTP 완벽가이드 - ch5. web server

  • 2. 웹 서버란 웹 서버란? - HTTP요청을 처리하고 응답을 제공하는 장비, 소프트웨어 웹 서버 구현 - HTTP프로토콜 구현, TCP기반의 HTTP처리 - 리소스를 관리, 웹 서버 설정 통제 확장하기 위한 기능 제공
  • 4. 진짜 웹 서버가 하는 일 1. Set up connection - 클라이언트의 접속을 받아들이거나, 닫는다. 2. Receive request - HTTP요청 메시지를 네트워크로 부터 읽어들인다. 3. Process request - 요청 메시지를 해석하고 그에 따른 작업을 한다. 4. Access resource - 메시지에서 지정한 리소스에 접근한다.
  • 5. 진짜 웹 서버가 하는 일 5. Construct response - 헤더를 포함한 HTTP 응답 메시지를 생성 6. Send response - 응답을 클라이언트에게 돌려준다. 7. Log transaction - 로그파일에 트렌잭션 완료에 대한 기록을 남긴다.
  • 6.
  • 7. Step1 : 클라이언트 커넥션 수락 - 새 커넥션 다루기 클라이언트가 웹 서버에 TCP커넥션 요청 웹 서버는 TCP커넥션에서 IP를 체크 후, 인가 기능 제공 - 클라이언트 호스트 명 식별 웹 서버는 reverse DNS를 사용, 접근 제어와 로깅 기능 제공 하지만 성능상의 문제로 1.3에서 기본으로 off
  • 9. - ident를 통해 클라이언트 알아보기 서버가 identd서버 포트(113)으로 정보 요청, 클라이언트는 클라이언트 정보를 돌려줌. 하지만 공공인터넷에서는 보안과, 트랜잭션 문제로 제한적인 사용. Step1 : 클라이언트 커넥션 수락
  • 10. 요청 메세지 파싱 방법 - 요청 메서드, 리소스 식별자(URI), 버전번호를 찾는다. 각 값은 한 개의 스페이스로 분리, 끝은 CRLF - 메시지 헤더들을 읽는다. 끝은 CRLF - 요청 본문이 있다면, Content-Length만큼 읽어 들인다. Step2 : 요청 메시지 수신
  • 11. 커넥션 입력/출력 처리 아케텍처 고성능 웹 서버는 수천 개의 커넥션을 동시지원 웹 서버의 아키텍처에 따라 요청을 처리하는 방식도 달라짐 Step2 : 요청 메시지 수신
  • 12.
  • 13. - 한 번에 하나씩 요청을 처리합니다. - 트랜잭션이 완료되면, 다음 트랜잭션 처리 - 처리 도중에 모든 다른 커넥션이 무시 되기 때문에, 로드가 적은 서버에서 사용 단일 스레드 웹 서버
  • 14. - 요청을 처리하기 위해, 여러개의 프로세스 혹은 고효율 스레드 할당. - 단일 스레드 보다 많은 커넥션을 동시에 처리 가능 - 스레드/프로세스는 요청시 생성하거나, worker pool에서 사용 - 많은 요청으로 인한 메모리,시스템 리소스 소비가 이어진다. 그래서 스레드/프로세스 최대 생성 개수 제한을 둠 멀티프로세스와 멀티스레드 웹 서버
  • 15. - 대량의 커넥션을 지원하기 위해 사용됨 - 모든 커넥션을 모니터링, 커넥션에 상태가 바뀌면 해당 커넥션 처리 - 스레드와, 프로세스는 유휴(idle) 상태의 커넥션에 매어있지 않아도 됨. 다중 I/O서버
  • 16. - 여러개의 CPU의 이점을 살리기 위해, 멀티스레딩과 다중화를 결합한 모델 - 여러개의 스레드가 각각 열려있는 커넥션을 감시하고 변화가 있을때 커넥션에 대한 작업을 수행 다중 멀티스레드 웹 서버
  • 17. Step3 : 요청처리 - 웹 서버가 요청을 받으면, 서버는 요청으로 부터 메서드, 리소스, 헤더, 본문 을 얻어서 요청을 처리한다. - 메서드에 따라, 본문필요 여부 다름 - 이후 책의 나머지 챕터에서 다룸
  • 18. Step4 : 리소스의 매핑과 접근 - 웹 서버는 리소스 서버 - 정적 파일(HTML, JPEG, JS), 동적 컨텐츠 제공 - URI에 매핑되는 리소스 식별 방법 제공 - Docroot(DocumentRoot) - VirtualHost - Directory Index - 접근제어
  • 19. DocumentRoot URI를 웹 서버의 파일 시스템 안에 있는 파일 이름으로 사용
  • 20. VirtualHost 각 사이트에 분리된 문서 루트를 주는 방법 한 웹 서버에서 여러개의 웹 사이트를 호스팅 할 때
  • 21. DirectoryIndex - 웹 서버는, 파일이름이 아닌 디렉토리 URL에 대한 요청을 받을 수 있다. - 대부분의 웹 서버는 아래와 같이 처리 - 에러를 반환 - 디렉터리 대신 ‘색인 파일' 반환 - 디렉터리를 탐색, 내용을 담음 HTML반환 - 불필요한 파일 노출을 야기
  • 22. Step5 : 응답 만들기 - 응답 메시지는 응답상태코드, 응답 헤더, 응답 본문(선택)으로 구성 - 응답 본문이 있다면, 응답 메시지는 다음을 포함한다. - MIME타입을 서술하는 Content-Type헤더 - 길이를 서술하는 Content-Length헤더 - 실제 응답 본문의 내용 - 리다이렉션
  • 23. MIME 타입 결정하기 웹 서버에게는 응답 본문의 MIME타입을 결정해야하는 책임이 있다. - Mime.types - 매직 타이핑(Magic typing) - 유형 명시(Explicit typing) - 유형 협상(Type negotiation)
  • 24.
  • 25. Step6 : 응답 보내기 - 전송과 응답도 커넥션 관리가 핵심 - nonpersistent(비지속) 커넥션 - 메세지 전송 후 커덱션을 닫기 - persistent(지속) 커넥션이라면 - 서버가 Content-Length헤더를 바르게 계산하기 위해 커넥션을 유지 - 클라이언트가 응답이 언제 끝나는지 알 수 없을경우 커넥션을 유지
  • 26. Step7 : 로깅 - HTTP메서드 - 클라이언트와 서버의 HTTP버전 - 요청받은 리소스의 URL - 응답의 HTTP상태코드 - 요청과 응답 메세지의 크기(모든 엔터티 본문을 포함) - 트렌젝션이 일어난 시간 - Referer와 User-Agent헤더 값
  • 27. 일반적인 로그 포맷 209.1.32.44 - - [03/Oct/1999:14:16:00 -0400] "GET / HTTP/1.0" 200 1024 http-guide.com - dg [03/Oct/1999:14:16:32 -0400] "GET / HTTP/1.0" 200 477