210127 개발일지(51일차) - 컴퓨터 시스템 11장 웹서버 프로젝트(5) : 6절 소형 웹서버 구현 및 프로젝트 회고록, 앞으로의 학습 자세

고재개발·2021년 1월 27일
0

Computer System

목록 보기
12/13

작은 프로그램이지만.. 웹서버를 구현하는 것은 정말 어려웠다. 아직 웹서버의 기능을 깊게, 정확하게는 모르지만 기본원리 정도는 알게되었다고.... 생각한다...... 앞으로도 파이팅........

웹서버란 무엇인가?

같은 클라이언트(웹 브라우저 등)로부터 HTTP 요청을 받아들이고, HTML 문서 등의 웹 페이지를 반환하는 컴퓨터 프로그램이다.
여기서 핵심은 프로그램!!! 일반 서버와 헷갈리지 말자.

웹 서버의 주된 기능은 클라이언트로부터 요청을 받은 뒤, 요청한 것을 응답으로 넘겨주는 것이다.
즉, 1. 웹서버가 2. 클라이언트의 요청을 3. 서버에서 찾아서 전달해주는 느낌으로 생각하면 된다.

작은 웹서버 구현(tiny 프로그램) 및 회고록

과제하면서 작성한 파일(tiny.c 등)들은 아래 깃헙에 있다.
https://github.com/kjhchs2/tiny_webserver
이 모든 과제는 컴퓨터시스템(csapp) 11장 6절에 대한 내용이다. 이를 알기 위해 10장의 일부(rio) 부분도 필요한 부분들에 대해 공부했다.

우리가 구현한 tiny는, GET요청에 대해서만 HTML 정보를 돌려주는 아주 작은 웹서버다. 앞에 포스팅 했었던 소켓 인터페이스와 네트워크를 기반으로 통신을 해주는 것이다. 소켓에 대한 개념부터, sockaddr 및 addrinfo 구조체 등 정말 낯선 개념이었다. 공부를 한다고 했지만, 네트워크에 대한 내용은 정말 어려웠다.

여태까지 했던 공부와는 많이 다르다고 느꼈던 점은..
1. 웹서버를 구현하기 위해 socket관련 함수들과 내용들을 공부하다 보니
2. sockadrr 구조체를 공부해야하고, 그러다보니 addrinfo 구조체를 공부하다 보니
3. getaddrinfo()함수를 알아봐야 하고, 그러다보니 readline에 대해 알아봐야 하고..
...
... 의 연속이었다.

그래도 유섭이와 승현이와 함께 책을 차근차근 읽어보면서 부딪혀보니, 해낼 수 있었다. tiny 웹서버를 구현하기 위해 전반적인 네트워크 프로그래밍에 대해 공부해볼 수 있는 좋은 기회였다고 생각한다.


이번 과제에서 얻어가는 점은
  • 네트워크 계층 등 네트워크에 대한 전반적인 개념
  • 웹서버의 기능과 역할에 대한 이해
  • 파일 식별자 및 소켓 인터페이스에 대한 이해

라고 할 수 있다!

Q&A 후기

장병규 의장님께서 이번에 직접 우리들의 일주일간 쌓인 질문을 받아주셨다.(10조*3개씩)
→ 결론은 모든 것을 알 수는 없다. 필요한 부분을 찾아 공부해서 적용시키자!
예를 들어, 운전을 잘하는 드라이버가 엔진 구조 및 동작 원리에 대해 세세하게 알고 있지는 않는다. 궁금한 부분(개념)에 대해서 잘 찾아보고, 그걸 실행(구현)해보면서 부딪히며 나아가는게 엔지니어링이라고 했다. 앞으로 이 부분을 명심하고 공부하는 데 힘써야 겠다!
"개념 공부 → 구현 → 개념 공부 → 구현 → 개념 공부 → 구현"의 반복!

profile
고재개발

0개의 댓글