진행 계획 및 결과

[1일차] 2023.03.27 (월)

프로젝트 진행 시간 13:00 ~ 18:00

진행 계획

  1. 요구 사항 읽어보기 ( 추후에 더 읽어볼 예정 )

결과

[13:00 ~ 15:00] 요구 사항 파악

[15:30 ~ 18:00] < HTTP 완전 정복 > 1장 공부 및 공유



[2일차] 2023.03.28 (화)

프로젝트 진행 시간 13:00 ~ 18:00

진행 계획

  1. < HTTP 완전 정복 > 2, 3장 공부 및 공유

결과

[13:00 ~ 14:50] 2장(URL & 리소스) 공부 및 공유 방법 : 각자 진행 후 프로젝트에 필요한 사항 이야기 나눔

[15:00 ~ 17:30] 3장(HTTP 메시지) 공부 및 공유 방법 : 파트를 나눠서 다 같이 읽고 프로젝트에 필요한 사항 이야기 나눔



[3일차] 2023.03.29 (수)

프로젝트 진행 시간 13:00 ~ 18:00

진행 계획

  1. < HTTP 완전 정복 > 4 장 공부 및 공유

결과

[13:00 ~ 18:00] 각자 4장 공부 ☝🏻 공유는 내일 13시 진행 예정




[4일차] 2023.03.30 (목)

모임 시간 프로젝트 진행 시간 13:00 ~ 18:00

진행 계획

  1. < HTTP 완전 정복 > 다같이 4장 커넥션 관리 복습
  2. < HTTP 완전 정복 > 5장 HTTP 아키텍쳐 공부하기

결과

[13:00 ~ 14:00] 4장 복습

[16:00 ~ 17:00] 각자 5장 공부

[17:00 ~ 18:00] 5장 스터디



[5일차] 2023.03.31 (금)

모임 시간 프로젝트 진행 시간 13:00 ~ 18:00

진행 계획

  1. 설계…!
  2. 구현 계획…!

결과

[13:00 ~ 13:45] 설계 방식 논의

[13:45 ~ 14:50] 사용 가능 함수 공부

[15:15 ~ 16:50] 여러가지 컨벤션 구축



[6일차] 2023.04.03 (월)

모임 시간 프로젝트 진행 시간 13:00 ~ 18:00

진행 계획

  1. 아주 간단한 configuration 파일 간이 파서 만들기

결과

[13:00 ~ 18:00] nginx config 파일 파서 설계 및 구현 시도



[7일차] 2023.04.04 (화)

모임 시간 프로젝트 진행 시간 13:00 ~ 18:00

진행 계획

👍 에코 서버 만들기 레퍼런스 1. 에코 서버 레퍼런스 코드 공부하기 2. 에코 서버 구현하기

결과

[13:00 ~ 16:00] 에코 서버 코드 공부 및 테스트

[17:00 ~ 20:00] select 와 epoll 을 이용한 멀티플랙싱 에코 서버 코드 공부
2, 3 번 못함.



[8일차] 2023.04.05 (수)

모임 시간 프로젝트 진행 시간 13:00 ~ 18:00

진행 계획

👍 에코 서버 만들기 레퍼런스 1. 에코 서버 레퍼런스 코드 공부하기 2. 에코 서버 구현하기

결과

[13:00 ~ 18:00] 동기 & 비동기, Blocking & Non-Blocking, LT & GT 공부

☝🏻참고자료

2, 3번 못함.



[9일차] 2023.04.06 (목)

모임 시간 프로젝트 진행 시간 13:00 ~ 18:00

진행 계획

👍 에코 서버 만들기 레퍼런스 1. 개념 정리하기 2. 에코 서버 구현하기

결과

[13:00 ~ 15:40] kqueue 에코 서버 구현하기

[16:00 ~ 17:00] 에코 서버 실행해보기 (터미널 1024 글자 제한 이슈... OS에서 보안상의 이유로 1024로 제한했다고 한다.)

[17:00 ~ 18:00] 에코 서버 명세서 작성
☝🏻 c -> c++ 하기 위한 명세서



[10일차] 2023.04.07 (금)

모임 시간 프로젝트 진행 시간 13:00 ~ 18:00

진행 계획

👍 에코 서버 만들기 레퍼런스 1. 에코 서버 명세서 작성하기 2. 에코 서버 속성 및 기능 객체로 리팩토링하기

결과

[13:00 ~ 14:00] 에코 서버 명세서 작성

[14:00 ~ 16:00] server-socket 클래스 구현 및 기존 에코 서버에 적용

[16:00 ~ 18:00] server 클래스(kqueue 활용 및 이벤트 핸들러) 구현 중...



[11일차] 2023.04.10 (월)

모임 시간 프로젝트 진행 시간 13:00 ~ 18:00

진행 계획

  1. 에코 서버 속성 및 기능 객체로 리팩토링하기
  2. 에코 서버에 request 구현하기

결과

[13:00 ~ 15:40] server 클래스 구현

[16:40 ~ 19:00] request 객체 구현



[12일차] 2023.04.11 (화)

모임 시간 프로젝트 진행 시간 13:00 ~ 18:00

진행 계획

  1. request 객체 논의
  2. request 객체 테스트

결과

[13:00 ~ 15:00] request 객체 구조 픽스 & 요청 메시지 파싱 구조 논의

[15:20 ~ 18:00] request 메시지 파싱 및 테스트 * 헤드 ( 시작줄과 헤더_헤더는 맵 자료구조에 키와 값으로 넣음 ) * 바디 ( vector 에 string 으로 넣음 ) * 포스트맨을 사용해서 POST 테스트까지 진행



[13일차] 2023.04.12 (수)

진행 계획

  1. Mock up response 객체 논의
  2. Mockup response 객체 구현
  3. request 함수 만들기

결과

[13:00 ~ 15:00] Mock up 객체 생성하고 리턴 확인

[15:20 ~ 18:00]



[14일차] 2023.04.13 (목)

진행 계획

  1. method 구현 (get, post, delete)

결과

[13:00 ~ 14:45] nginx conf 파일 분석

[15:20 ~ 18:00] GET method 구현 -> entity 받아오는 부분 구현... chunk 등장...



[15일차] 2023.04.14 (금)

진행 계획

  1. method 구현 (get, post, delete)
  2. 테스트하기

결과

[13:00 ~ 15:30] GET 구현

[16:00 ~ 17:00] Method 유효성 검사 및 Transaction 객체 및 GET 수정

[17:00 ~ 18:20] 요청 메시지 entity 파싱 논의



[16일차] 2023.04.17 (월)

진행 계획

  1. 요청 메시지 read 위치 논의

    • setRawMsg 를 전체적으로 개편?!
    • Server 의 read/write도 개편
      • Server는 event만 감지하며, 그 외의 일은 모두 Transaction이 하자?!
    • parsing (configuration, entity, header) 정리!
    • Server, Transaction, Response, Request 객체간에 어떤 역할을 할지 명확하게 정리!
  2. 논의 바탕으로 구현

결과

  1. read, write 를 transaction 으로 논의 1-1. 넣고 200 을 받자

  2. setRawMsg chunk 와 content-length 로 구분하자.

[13:30 ~ 16:00] server 와 read, method, write, transaction 구현 & 논의

[16:30 ~ 18:00] transaction 구조 논의 & 수정 & 포스트맨 테스트

[20:00 ~ 21:00] entity parsing 논의 - gnl 로 일단 합의



[17일차] 2023.04.18 (화)

진행 계획

  1. entity 파싱 구현

결과

[13:00 ~ 14:50] entity 파싱 방법 논의... 자료구조... 할당 논의

[15:10 ~ 16:00] 똑같은 논의... entity 파싱 방법 논의... 자료구조... 할당

[16:20 ~ 17:50] head 파싱 후 Content-Length 일 때 entity 처리 구현

[19:30 ~ 20:30] 이전까지 구현한 코드 리팩토링

[20:30 ~ 21:00] entity 파싱 chunk 부분 수도 코드 작성



[18일차] 2023.04.19 (수)

진행 계획

  1. entity 파싱 구현

결과

[13:00 ~ 17:00] head 와 entity 파싱 재논의 및 구현



[19일차] 2023.04.20 (목)

진행 계획

  1. entity chunked 파싱 구현
  2. port 파라미터로 받기
  3. Header parsing 3-1. value 에서 앞부분 whitespace 제거 3-2. value 에서 뒷부분 CR 제거
  4. Transfer executeRead 에서 entity parsing 부분 함수로 묶기 4-1. entity 길이 유효성 검사(content_length 와 max_body_size 비교)

결과

[13:40 ~ 18:00] entity chunked 파싱 구현 및 postman 테스트

[19:30 ~ 20:00] 큰 데이터를 보내면 abort 발생하는 에러 픽스

[20:00 ~ 21:30] 2 ~ 4 진행



[20일차] 2023.04.21 (금)

진행 계획

  1. multiple socket 구현
  2. 각종 bug FIX

결과

[13:00 ~ 14:30] 'multiple server 란?' 에 대한 개념 논의

[14:00 ~ 15:00] 천하제일 multiple socket 구현 - jnam 이 함

(❗️ read 와 write error 발생 ❗️)
write error는 고질적으로 발생해왔음..
근데..read error가 생겼다.....!?

[15:00 ~ 18:00]

  • read 에러 고침
    ↘︎ how to fix
    multiple server를 만들면서 iterator를 사용하는 for문을 추가함. 그 과정에서 executeRead()가 반복문 안에 잘못 들어가 있었음.

[19:00 ~ 20:00] * write 에러의 원인이 sigpipe 였다는 것을 존재를 앎 (exit status code 가 141)
↘︎ how to fix
recv, send 함수 앞/뒤로 SIGPIPE를 ignore 처리 && transaction 하나의 cycle이 끝나면 해당 client disconnect 처리



[21일차] 2023.04.24 (월)

진행 계획

  1. 서버 config 파일 파싱

결과

[13:00 ~ 15:00] config 파일 구성 요소 개념 정리 ( feat. server_name??? )

[15:10 ~ 17:40] config 파싱 구조 결정 및 구현

[19:15 ~ 22:30] config 파싱 구현, 파싱 내용 출력 및 에러 수정



[22일차] 2023.04.25 (화)

진행 계획

  1. config 로 server_socket 적용

  2. kevent 의 udata 공부 및 적용 여부 논의

  3. Post, Delete…? 까지 하나여~?

결과

[13:00 ~ 14:00] config 로 server_socket 적용

[14:00 ~ 14:50] config 로 server_socket 적용

[15:00 ~ 17:20] config 구성요소 적용 (root, location 등등)

[18:50 ~ 21:00] flag 사용해서 fd 리턴하도록 리팩토링



[23일차] 2023.04.26 (수)

진행 계획

  1. execute method 구현

    • checkResource 구현
  2. Get method 를 fd 사용해서 구현하기

결과

[13:00 ~ 15:20] * checkResource 구현

[15:45 ~ 17:10] * checkResource 에러 픽스 * executeMethod, file fd 값 처리 구현

[17:10 ~ 18:10] * get Method fd 로 작동할 수 있게 수정 중



[24일차] 2023.04.27 (목)

진행 계획

  1. GET method 완성하기

    • Flag 흐름 체크해서 디버깅
    • response msg : char *
  2. executeMethod 수정하기

    • 원래 transaction cycle 에서 한번만 수행되는 것을 전제로 하고 있었음
    • 이제는 file 의 READ EVENT 에 의해 여러번 수행되는 구조
  3. Trim segfault 잡기

  4. code refactoring

  5. error page caching

결과

[13:00 ~ 13:50] 1. GET method 완성하기 * response msg : char * 완료

[13:50 ~ 15:00] 1. GET method 완성하기 * Flag 흐름 체크해서 디버깅

[15:45 ~ 16:45] 2. executeMethod 수정하기 * status code refactoring * END flag 추가 * fread 와 fwrite 추가

[16:45 ~ 17:30] trim segfault 잡기 및 코드 살짝 리팩토링

[18:35 ~ 22:30] code refactoring * safe 함수 util 로 바꾸기 * wall werror wextra 수정 * server::run() refactoring * httpGet 함수 에러 발생 및 수정 중 (버퍼사이즈와 바디사이즈가 같을 때 리드를 한 번만 해야하는데, 여러번 시도함... eof 감지가 안된다는 말)



[25일차] 2023.04.28 (금)

진행 계획

  1. kevent->data 사용하여 file read 구현
    • 클라이언트가 연결된 소켓을 끊었을 때 EOF 로 disconnect 하는 부분 구현
  2. 404, 500, 501 에러 페이지 반환에 관한 논의

결과

[13:00 ~ 14:50] kevent->data 사용해서 file read 하기 구현 (data_size 사용)

[14:50 ~ 15:00] 클라이언트가 연결된 소켓을 끊었을 때 EOF 로 disconnect 하는 부분 구현 (구조체 안에 data 변수 사용)

[15:00 ~ 16:00] 큰 데이터 요청에 대한 테스트 진행

[16:00 ~ 17:00] 404, 500, 501 에러 페이지 반환 구현 중



[26일차] 2023.05.01 (월)

진행 계획

  1. 404, 500, 501 에러를 위한 객체 구현
    • Error Page 를 시작할 때 열기
    • 열린 Error Page 를 버퍼에 담기
    • Server 객체 안에 Error Page buffers 들고다니기
  2. 에러 페이지 리턴 방법 논의하기
  3. autoindex 처리

결과

[13:30 ~ 15:50] 404, 500, 501 에러 페이지 세팅하기

[16:10 ~ 17:20] 에러 상황 시 404, 500, 501 에러 페이지 반환 구현

[17:20 ~ 18:20] 세그먼트 에러 픽스 & method issue 픽스 * 에러 이벤트 등록 후 clear 추가 * 메서드 체크 전에 resource 체크

[19:10 ~ 21:00] autoindex 처리...!



[27일차] 2023.05.02 (화)

진행 계획

  1. 뭘 해야하는지 알아보기
  2. CGI config file 만들기
  3. CGI 구현하기

결과

[13:00 ~ 14:50] CGI 어떻게 구현할지 논의

[15:00 ~ 15:30] 각자 할 것 진행 (이스터에그, pipe 를 통한 로직 논의, docs 정리)

[15:30 ~ 17:00] CGI 구현

[18:40 ~ 20:35] CGI 구현

[21:00 ~ 22:40] POST 구현



[28일차] 2023.05.03 (수)

진행 계획

  1. post 구현하기
    • cgi 아닌 요청이 들어왔을 때 처리하기
  2. delete 구현하기
  3. waitpid Nonblocking

결과

[13:40 ~ 14:25] post 구현하기 * cgi 아닌 post 처리 * post 로 업로드한 파일 get 으로 접근하는 테스트

[14:30 ~ 14:40] delete 구현하기

[14:50 ~ 17:00] get cgi 구현 및 post 재논의



[29일차] 2023.05.04 (목)

진행 계획

  1. 바뀐 코드 로직 점검 및 정리
  2. python 파일을 만드는 python 코드를 작성
  3. 이벤트 발생 시 에러 발생 픽스

결과

[13:00 ~ 14:35] 바뀐 로직 점검 & python 파일 만드는 python 코드 완성

[14:35 ~ 16:35] 이벤트 발생 시 에러 발생 픽스
* fd 를 close 하고 EV_DELETE 를 해서 문제 발생.
-> kevent 로 EV_DELETE 후 close(fd) 하도록 수정

[16:50 ~ 18:30] 전체 파일 정리 (TODO & FIXME 정리)



[30일차] 2023.05.08 (월)

진행 계획

결과

[13:30 ~ 14:00] config 파일 지정안했을 때 default.config 처리

[14:00 ~ 15:00] location / { /디렉토리 } 일 때 발생한 버그 픽스

[ ~ 22:30] 깃허브 이슈 36-refactoring 분담 처리 중



[31일차] 2023.05.09 (화)

진행 계획

결과

[13:00 ~ 22:30] 깃허브 이슈 36-refactoring 분담 처리 중



[32일차] 2023.05.11 (목)

진행 계획

  • try-catch & 서버가 종료되지 않게 하기
  • GET 이 빈파일 조회 및 응답 보내기
  • 클라이언트가 disconnected 할 때, file이 살아있는 경우 file fd를 체크해서 처리해주기

결과

[18:00 ~ :] 마무리 작업



[33일차] 2023.05.12 (금)

진행 계획

  • config file
  • eval-HTTP response status code
  • use max_body_size & max_head_size in conf
  • close file_fd after check it is not client
  • use max_body_size & max_head_size in conf
  • close file_fd after check it is not client

결과

[13:00 ~ 18:00] 마무리 작업


팀 나눠서 동료 평가 진행하기~