wpark 꿀팁
RFC문서를 읽고 HTTP프로토콜 규칙을 준수하는 웹서버를 만드는 프로젝트. 웹서버는 다양한 방식으로 구현할 수 있는데, 해당 프로젝트의 경우 select() 함수를 이용한 단일 프로세스 multiplexing 서버.
HTTP 서버 기본 예제 : https://medium.com/from-the-scratch/http-server-what-do-you-need-to-know-to-build-a-simple-http-server-from-scratch-d1ef8945e4fa
HTTP 프로토콜에 대한 설명 : https://www.ntu.edu.sg/home/ehchua/programming/webprogramming/HTTP_Basics.html
I/O multiplexing : https://notes.shichao.io/unp/ch6/#readset-writeset-and-exceptset-as-value-result-arguments
rfc3875(cgi 프로토콜) : https://tools.ietf.org/html/rfc3875
(1) 설정파일 파싱 / select()를 이용한 서버의 기본뼈대 만들기
(2) RFC를 읽고 HTTP method GET -> POST -> 기타등등 의 순서대로 구현. 메소드 하나씩 구현할 때마다 테스터를 이용해서 테스트.
(3) CGI 구현
(1) 설정파일은 nginx 를 참고하되, 완전히 똑같을 필요는 없음.
(2) select() 는 read set, write set 을 한번에 체크하고 select() 이후 클라이언트 소켓별로 단 한번의 read 또는 write 를 써야만 한다. 이는 subject에도 명시되어있으며, 이를 어길시 0점. 해당 부분이 문제가 되면 코드를 처음부터 갈아엎어야하는 불상사가 생길수도...
(3) read/recv/write/send 의 리턴값을 반드시 체크. -1, 0, 그 이상인지 모두 체크해야함. errno 체크시 0점.
(4) curl, telnet 명령어를 이용한 테스트는 필수. 특히 telnet이 동작하는 방식을 잘 보면 단일 연결에 여러개의 http request 를 보낼 수 있는 것을 알 수 있는데 tester 를 통과하려면 단일 연결에 여러개의 요청을 처리할 수 있어야 한다. (nginx 를 이용, telnet으로 테스트해보자)
(5) siege -b 명령어로 서버 부하테스트에서 99.5% 를 넘겨야함. 해당 명령어를 수행하면 무한루프가 되는데 ctrl-c 를 할때까지 멈추지 않고 계속 무한히 돌아가야함.
(6) 영어를 잘하는 동료와 같이하면 좋음.