2020-11-30(Mon)

  1. 학습 날짜 // 2020-11-30(월)

  2. 학습시간 // 9:00~22:00

  3. 학습 범위 및 주제 // webserv

  4. 동료 학습 방법 // sanam, yohai님과 토의

  5. 학습 목표 // webserv

  6. 상세 학습 내용

테스터로 주어진 CGI은 소문자를 대문자로 만든 결과물을 돌려주는 CGI다.

그럼 이 CGI에 이미지 파일을 전달하면 어떻게 작동하는가? 실험해본 결과 문제가 있음을 알 수 있었다. 테스터CGI에 이미지를 넘겨줄 경우, 중간에 CGI의 write_pipe의 버퍼가 비워지지 않고 결과적으로 해당 FD에 대해 서버는 CGI가 데이터를 읽어가서 결과값을 돌려주기를 기다리고, 클라이언트는 서버가 응답을 주기를 기다리게된다. 우리 서버가 문제가 있는지 확인해야했다. 혹시 이미지 파일에 CRLF 나 null 값 등이 섞여있어서 이를 제대로 처리하지 못한 것인지 검증해보았으나 아무리 확인해도 문제가 없어보였다. 결국 CGI가 이미지 파일을 받았을 때 undefined behavior에 해당하는 동작을 보이는 것이라고 결론지었다.

따라서 문제를 아래와 같이 정의하고 해결하였다.

문제) CGI가 정상적으로 작업을 마치지 못하고 block될 경우, 서버는 CGI의 작업종료를 기다리고 클라이언트는 서버의 응답을 기다리는 악순환을 어떻게 해결할 것인가

해결)

CGI가 CGI_TIMEOUT_SECOND에 해당되는 시간동안 응답을 보이지 않으면, CGI의 프로세스를 종료시키고 클라이언트에게 에러코드를 보낸 후, 관련된 자원들을 모두 반환하고 초기화한다.

  1. 학습 내용에 대한 개인적인 총평

이 문제 때문에 주말을 거의 반납했습니다. 원래는 트렌젠던스를 함께 하기로한 eunhkim, jujeong님께 저번 주에 프로젝트를 마치겠다고 약속했던 상황이었기 때문에 빠르게 해결해야했기 때문입니다. 하지만 돌발사항으로 개발일정이 미뤄진 것을 받아들이고 이번주 목요일까지 마무리짓기로 양해를 구했습니다.

하루에 끝내려고 했던 투두를 끝내기 위해 저녁을 못 먹거나 9시 넘어서 먹는 등의 생활을 3주 정도 하고 있다보니 몸이 축나네요. 고통스럽습니다.

그래도 떠오르는 문제들에 마냥 뻗어버리진 않는 서버를 만들기위해 최선을 다했다고 당당하게 말할 수 있어서 좋습니다. 일전에 현대오토에버 CTO님이 말씀하셨듯 끈기와 집요함이 중요한 것 같네요ㅎㅎ 팀원들이 모두 끈기와 집요함을 발휘해줘서 고통스럽지만 좋은 결과 있을거라 믿습니다.

다음 학습 계획

  • Webserv 에러해결

Last updated