웹서버 4

정글사관학교 52일차 TIL: tiny 서버 구현, string 관련 함수 정리

1. tiny 서버 구현 Tiny main() 루틴 타이니는 포트로부터 오는 반복적으로 연결 요청을 듣기 수행하는 서버. Open_listenfd() 함수를 호출해 듣기 소켓을 오픈한 다음, 무한한 서버 루프를 실행 ⇒ 반복적으로 accept() 을 실행해 연결을 받고, 트랜잭션을 수행한 뒤, 연결을 닫아. doit 함수 doit 함수는 HTTP 트랜잭션을 다룬다. 요청라인을 읽고 parsing. 이때, rio_readlineb 함수를 이용해 request line을 읽는다. *rio_readinitb, rio_readlineb 텍스트 라인 전체를 내부 읽기 버퍼에서 복사하는 rio_readlineb와 텍스트 라인과 바이너리 데이터 모두를 읽을 수 있는 rio_readnb 파일 → 읽기 버퍼 → (읽기 ..

정글사관학교 48일차 TIL: 웹브라우저 요청 흐름, HTTP

웹브라우저 요청 흐름(중요!) 면접 단골 질문이니 잘 정리해두자. 자, 구글에 접속해보자. 이제 면접관이 질문을 한다. 지금부터 구글에 "hello"를 검색할 거예요. 검색창이 뜨기까지, 컴퓨터에서는 무슨 일이 벌어지고 있는지 설명해주세요. 검색창에 hello를 적고 enter를 누르는 순간부터 시작한다. 1. HTTP 요청 메시지 생성 구글 창에서 입력을 받으면 웹브라우저는 URI를 위와 같이 변경하며, 이 URI를 parsing해 HTTP 요청 메시지를 생성한다. 이때 DNS를 조회해 해당 호스트 주소의 IP를 가져온다. 저 메시지 안에는 아래와 같은 내용이 들어있다. 검색한 내용을 조회하는 요청이니 GET 요청에 해당되며, 검색 내용(q=hello)과 언어(hl=ko), HTTP 버전, 그리고 호스..

정글사관학교 47일차 TIL: PORT, URI, 웹브라우저 요청 흐름(중요)

PORT 클라이언트가 동시에 여러 서버와 연결해야 하는 경우를 생각해보자. 예를 들어 내 컴퓨터에서 게임도 하고, 화상통화도 하며, 그 와중에 웹서핑까지 하면 어떻게 될까? 아래 이미지처럼 두 개의 서버가 필요하다고 할때, IP만으로는 한 서버에서 게임/화상통화 요청시 응답오는 패킷을 구별할 수 없다. (둘다 200.200.200.2) 우리가 이전 공부 자료에서 봤던 것처럼, TCP/IP 패킷에서는 PORT라고 하는 글자를 본 적이 있을 것이다. 이것이 바로 이러한 상황에서 필요한 정보이다. 아래처럼 TCP의 PORT 정보를 활용하면 우리는 한 서버 내에서 오는 다양한 프로세스를 구별할 수 있게 된다. 즉, PORT는 같은 IP 내에서 프로세스를 구분하게 해주는 식별자라고 보면 되겠다. 이름부터가 "항구..

정글사관학교 45일차 TIL: 인터넷 네트워크 개념 정리(TCP/IP, UDP)

malloc 주차가 끝나고, 이제 OS 전 마지막 준비 단계인 주차에 들어섰다. 간만에 밀린 운동도 해서 기분은 좋으나 매우 피곤한 관계로, 빠르게 정리하고 집에 갈 예정. 인터넷 네트워크 인터넷 통신 클라이언트와 서버는 어떻게 통신할까? 중간에 인터넷이라는 놈이 둘 사이를 연결해준다. 그러면 이 인터넷은 어떻게 구성되어 있는 걸까? 인터넷은 수많은 서버 노드의 집합이라고 생각하면 된다. IP(인터넷 프로토콜) 클라이언트와 서버는 무작정 소통하는 게 아니다. 둘 사이에는 일종의 전송 규칙을 설정해 통신하는데, 이때 정하는 규칙을 IP(인터넷 프로토콜)이라고 한다. IP의 역할은 크게 두 가지이다. IP address를 통해 데이터를 전달 패킷 형태로 데이터를 전송 IP는 일종의 통신 규약이라고 했다. I..