진행 계획 및 결과
[1일차] 2023.03.27 (월)
프로젝트 진행 시간 13:00 ~ 18:00
진행 계획
- 요구 사항 읽어보기 ( 추후에 더 읽어볼 예정 )
결과
[13:00 ~ 15:00] 요구 사항 파악
[15:30 ~ 18:00] < HTTP 완전 정복 > 1장 공부 및 공유
[2일차] 2023.03.28 (화)
프로젝트 진행 시간 13:00 ~ 18:00
진행 계획
- < HTTP 완전 정복 > 2, 3장 공부 및 공유
결과
[13:00 ~ 14:50] 2장(URL & 리소스) 공부 및 공유 방법 : 각자 진행 후 프로젝트에 필요한 사항 이야기 나눔
[15:00 ~ 17:30] 3장(HTTP 메시지) 공부 및 공유 방법 : 파트를 나눠서 다 같이 읽고 프로젝트에 필요한 사항 이야기 나눔
[3일차] 2023.03.29 (수)
프로젝트 진행 시간 13:00 ~ 18:00
진행 계획
- < HTTP 완전 정복 > 4 장 공부 및 공유
결과
[13:00 ~ 18:00] 각자 4장 공부 ☝🏻 공유는 내일 13시 진행 예정
[4일차] 2023.03.30 (목)
모임 시간 프로젝트 진행 시간 13:00 ~ 18:00
진행 계획
- < HTTP 완전 정복 > 다같이 4장 커넥션 관리 복습
- < 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
진행 계획
- 설계…!
- 구현 계획…!
결과
[13:00 ~ 13:45] 설계 방식 논의
[13:45 ~ 14:50] 사용 가능 함수 공부
[15:15 ~ 16:50] 여러가지 컨벤션 구축
[6일차] 2023.04.03 (월)
모임 시간 프로젝트 진행 시간 13:00 ~ 18:00
진행 계획
- 아주 간단한 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
진행 계획
- 에코 서버 속성 및 기능 객체로 리팩토링하기
- 에코 서버에 request 구현하기
결과
[13:00 ~ 15:40] server 클래스 구현
[16:40 ~ 19:00] request 객체 구현
[12일차] 2023.04.11 (화)
모임 시간 프로젝트 진행 시간 13:00 ~ 18:00
진행 계획
- request 객체 논의
- request 객체 테스트
결과
[13:00 ~ 15:00] request 객체 구조 픽스 & 요청 메시지 파싱 구조 논의
[15:20 ~ 18:00] request 메시지 파싱 및 테스트 * 헤드 ( 시작줄과 헤더_헤더는 맵 자료구조에 키와 값으로 넣음 ) * 바디 ( vector 에 string 으로 넣음 ) * 포스트맨을 사용해서 POST 테스트까지 진행
[13일차] 2023.04.12 (수)
진행 계획
- Mock up response 객체 논의
- Mockup response 객체 구현
- request 함수 만들기
결과
[13:00 ~ 15:00] Mock up 객체 생성하고 리턴 확인
[15:20 ~ 18:00]
[14일차] 2023.04.13 (목)
진행 계획
- method 구현 (get, post, delete)
결과
[13:00 ~ 14:45] nginx conf 파일 분석
[15:20 ~ 18:00] GET method 구현 -> entity 받아오는 부분 구현... chunk 등장...
[15일차] 2023.04.14 (금)
진행 계획
- method 구현 (get, post, delete)
- 테스트하기
결과
[13:00 ~ 15:30] GET 구현
[16:00 ~ 17:00] Method 유효성 검사 및 Transaction 객체 및 GET 수정
[17:00 ~ 18:20] 요청 메시지 entity 파싱 논의
[16일차] 2023.04.17 (월)
진행 계획
-
요청 메시지 read 위치 논의
- setRawMsg 를 전체적으로 개편?!
- Server 의 read/write도 개편
- Server는 event만 감지하며, 그 외의 일은 모두 Transaction이 하자?!
- parsing (configuration, entity, header) 정리!
- Server, Transaction, Response, Request 객체간에 어떤 역할을 할지 명확하게 정리!
-
논의 바탕으로 구현
결과
-
read, write 를 transaction 으로 논의 1-1. 넣고 200 을 받자
-
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 (화)
진행 계획
- 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 (수)
진행 계획
- entity 파싱 구현
결과
[13:00 ~ 17:00] head 와 entity 파싱 재논의 및 구현
[19일차] 2023.04.20 (목)
진행 계획
- entity chunked 파싱 구현
- port 파라미터로 받기
- Header parsing 3-1. value 에서 앞부분 whitespace 제거 3-2. value 에서 뒷부분 CR 제거
- 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 (금)
진행 계획
- multiple socket 구현
- 각종 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 (월)
진행 계획
- 서버 config 파일 파싱
결과
[13:00 ~ 15:00] config 파일 구성 요소 개념 정리 ( feat. server_name??? )
[15:10 ~ 17:40] config 파싱 구조 결정 및 구현
[19:15 ~ 22:30] config 파싱 구현, 파싱 내용 출력 및 에러 수정
[22일차] 2023.04.25 (화)
진행 계획
-
config 로 server_socket 적용
-
kevent 의 udata 공부 및 적용 여부 논의
-
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 (수)
진행 계획
-
execute method 구현
- checkResource 구현
-
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 (목)
진행 계획
-
GET method 완성하기
- Flag 흐름 체크해서 디버깅
- response msg : char *
-
executeMethod 수정하기
- 원래 transaction cycle 에서 한번만 수행되는 것을 전제로 하고 있었음
- 이제는 file 의 READ EVENT 에 의해 여러번 수행되는 구조
-
Trim segfault 잡기
-
code refactoring
-
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 (금)
진행 계획
- kevent->data 사용하여 file read 구현
- 클라이언트가 연결된 소켓을 끊었을 때 EOF 로 disconnect 하는 부분 구현
- 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 (월)
진행 계획
- 404, 500, 501 에러를 위한 객체 구현
- Error Page 를 시작할 때 열기
- 열린 Error Page 를 버퍼에 담기
- Server 객체 안에 Error Page buffers 들고다니기
- 에러 페이지 리턴 방법 논의하기
- 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 (화)
진행 계획
- 뭘 해야하는지 알아보기
- CGI config file 만들기
- 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 (수)
진행 계획
- post 구현하기
- cgi 아닌 요청이 들어왔을 때 처리하기
- delete 구현하기
- 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 (목)
진행 계획
- 바뀐 코드 로직 점검 및 정리
- python 파일을 만드는 python 코드를 작성
- 이벤트 발생 시 에러 발생 픽스
결과
[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] 마무리 작업