모든 내용은 [윤성우 저, "열혈강의 TCP/IP 소켓 프로그래밍", 오렌지미디어] 를 기반으로 제 나름대로 이해하여 정리한 것입니다. 다소 부정확한 내용이 있을수도 있으니 이를 유념하고 봐주세요!
01. 웹 서버와 웹 서버의 접속에 사용되는 웹 브라우저에 대한 설명으로 옳지 않은 것을 모두 고르면?
a. 웹 브라우저는 소켓을 생성하고 이 소켓으로 서버에 접속하는 클라이언트 프로그램으로 보기 어렵다.
=> 웹 브라우저는 소켓 기반의 클라이언트 프로그램이 맞다.
b. 웹 서버는 TCP 소켓을 생성해서 서비스한다. 그 이유는 클라이언트와 연결을 일정시간 이상 유지한 상태에서 각종 정보를 주고 받기 때문이다.
=> 웹 서버는 1)클라이언트가 데이터를 요청하면, 2) 웹 서버가 클라이언트의 요청에 응답하고, 3) "바로 연결을 종료"한다. 따라서, 연결을 일정시간 이상 유지하지 않는다.
e. 웹 서버에는 웹 브라우저가 아니면 접속이 불가능하다.
=> 소켓 기반의 클라이언트 프로그램이라면 웹 브라우저가 아니라도 가능하다. 웹 브라우저는 서버가 전송하는 HTML문으로 이뤄진 Hypertext를 HTML 문법을 근거로 보기 좋게 변화해서 보여주는 역할을 추가적으로 해줄 뿐이다.
# 옳은 설명
c. Hypertext와 일반 text의 가장 큰 차이점은 이동성의 존재유무이다.
d. 웹 서버는 웹 브라우저가 요청하는 파일을 전송해주는 일종의 파일 전송 서버로 볼 수 있다.
02. HTTP 프로토콜과 관련된 설명으로 옳지 않은 것을 모두 고르면?
a. HTTP 프로토콜은 상태를 유지하지 않는 Stateless 프로토콜이다. 따라서 TCP가 아닌 UDP를 기반으로 구현해도 문제되지 않는다.
=> HTTP는 신뢰할 수 있거나 메시지 손실이 없는(최소한의 오류는 표시) 연결을 요구한다. 인터넷 상의 가장 일반적인 두 개의 전송 프로토콜 중에서 TCP는 신뢰할 수 있으나, UDP는 그렇지 않다. 그러므로 HTTP는 연결이 필수는 아니지만 연결 기반인 TCP 표준에 의존한다.
[출처] : https://developer.mozilla.org/ko/docs/Web/HTTP/Overview
# 옳은 설명
b. HTTP 프로토콜을 가리켜 상태를 유지하지 않는 Stateless 프로토콜이라 하는 이유는, 한번의 요청과 응답의 과정을 마치고 나면 연결을 끊어버리기 때문이다. 따라서 동일한 웹 서버와 동일한 웹 브라우저가 총 세 번의 요청 및 응답의 과정을 거치는 경우에는 총 세 번의 소켓생성 과정을 거치게 된다.
c. 서버가 클라이언트에게 전송하는 상태코드에는 클라이언트의 요청에 대한 결과정보가 담겨있다.
d. HTTP 프로토콜은 인터넷을 기반으로 하는 프로토콜이다. 때문에 인터넷 기반에서 많은 클라이언트에게 서비스를 제공할 수 있도록 HTTP를 Stateless 프로토콜로 설계한 것이다.
03. IOCP와 epoll은 우수한 성능을 보장하는 대표적인 서버 모델들이다. 그런데 HTTP 프로토콜을 기반으로 하는 웹 서버에 이 모델을 적용하는 경우에는, 다른 모델에 비해 우수한 성능을 보장한다고 말할 수 없다. 그렇다면 그 이유는 무엇인가?
- IOCP와 epoll 모두 둘 이상의 소켓을 쉽게 관리할 수 있는 서버 모델이다. 즉, 관찰의 대상이 되는 소켓들 중에서 IO와 관련된 이벤트가 발생한 소켓을 감지해서 관련된 IO를 처리할 수 있는 서버 모델이다.
- 그런데 웹 서버의 경우에는 둘 이상의 소켓을 계속해서 관리할 필요가 없다. 왜냐하면 단 한 번의 요청 및 응답의 과정을 거치고 나면, 연결을 종료하기 때문이다.
- 따라서 IOCP와 epoll을 통한 추가적인 성능의 향상을 기대하는데 한계가 있다.
[출처] : 윤성우 저, "열혈강의 TCP/IP 소켓 프로그래밍", 오렌지미디어
'Programming > 열혈 TCP, IP 소켓 프로그래밍(저자 윤성우)' 카테고리의 다른 글
Ch 19. 내용 확인문제 (0) | 2020.08.14 |
---|---|
Ch 19. Windows에서의 쓰레드 사용 (0) | 2020.08.14 |
Ch 24. HTTP 서버 제작하기 (0) | 2020.08.14 |
Ch 18. 내용 확인문제 (0) | 2020.08.10 |
Ch 18. 멀티쓰레드 기반의 서버구현 (0) | 2020.08.10 |