바퀴의 재발명 Don't reveint the wheel. 바퀴를 재발명하지 말라는 격언은 프로그래밍 공부를 하거나 업으로 삼고계신 분이라면 누구나 한 번쯤 들어봤을 말이다. 특정 문제를 해결하기 위해, 이미 개발된 것이 있다면 그것을 재활용할 것이지 다시 구현하는
사용자는 많은 시간을 웹 브라우저를 사용하며 보낸다. 어느 통계에 따르면 컴퓨터 사용 시간의 n%를 브라우저가 차지한다고 한다. 이토록 우리는 웹 브라우저를 통해 많은 자원을 획득하고 소비한다. 그런데 브라우저는 어느 자원을 요청할 것인지 어떻게 표현하고 서버는 어느
서론 웹 서버는 HTTP 메시지를 받아서 파싱하여 적절한 자원을 찾은 뒤, 해당 자원을 HTTP 메시지로 보내주는 소프트웨어이다. 클라이언트와 웹 서버간에 이루어지는 통신은 모두 HTTP를 통해 발생하기 때문에, HTTP 메시지를 이해하는 것은 중요하다. HTTP 메
저번 글에서는 HTTP 메시지의 전반적인 구조와 메서드에 대해 다뤘다. 이번 글에서는 상태코드에 대해 상세히 알아보자.상태 코드는 서버가 클라이언트에게 응답을 보낼 때 포함된다. 서버는 상태 코드를 클라이언트의 요청을 잘 처리했는지, 처리하지 못했다면 어떤 문제가 있었
이번 글에서는 리다이렉션 상태 코드, 클라이언트 에러 상태 코드 그리고 서버 에러 상태 코드를 살펴보자.리다이렉션 상태 코드는 클라이언트가 요청한 자원이 위치한 곳을 알려줄 때 사용한다. 다음 글에서는 에러 상태 코드에 대해 다루겠다.
이 시리즈에서 구현하는 웹 서버는 유닉스 OS에서 동작한다고 가정한다.소켓을 생성하는 함수인 socket 함수의 프로토타입은 아래와 같다.비슷한 프로토콜을 묶어서 프로토콜 체계라 부른다. 필자는 프로토콜 체계를 나누는 기준이 무엇인지 파악하지 않았다. 웹 서버를 구현
서론 저번 글을 통해 TCP 소켓을 생성하는 방법에 대해 알아봤다. 이번 글에서는 소켓에 주소와 포트를 할당하는 방법을 알아보자. 본론 왜 주소와 포트를 할당하나? 서버는 TCP 소켓을 생성한 뒤에, 해당 소켓에 ip주소와 포트를 할당해야한다. 이는 특정 ip
이전 글에서는 서버 소켓에 ip주소와 포트를 할당하는 방법에 대해 알아보았다. 이번 글을 통해, 연결하여 통신하는 방법을 알아보자.소켓을 통한 통신은 다음과 같은 과정을 거친다.소켓 생성. socket()소켓 주소할당. bind()연결요청 대기상태. listen()연결
TCP는 연결 지향형 프로토콜이기 때문에 데이터를 송수신하기 전에는 연결을 생성하고 데이터의 송수신이 완료된 후에는 연결을 종료해야한다. 이번 글에서는 연결을 종료하는 방법에 대해 살펴보자. 소켓또한 파일이기 때문에, close 시스템 함수를 통해 소켓을 닫아서 연결을
일반적인 상황에서는 소켓을 생성한 뒤 그대로 사용하여 통신을 진행해도 무방하지만 소켓에 옵션을 설정해서 동작을 바꿔야하는 상황이 발생하기도 한다. 이번 글에서는 소켓의 옵션을 확인하고 설정하는 방법과 흔하게 쓰이는 옵션 네가지(SO_SNDBUF, SO_RCVBUF, S
운영체제는 프로세스를 실행 단위로 사용한다. 프로세스는 독립적인 메모리 공간을 갖는데, 왜 웹서버를 멀티 프로세스로 구현하는 경우가 있을까? 그것은 소켓을 통해 데이터를 수/송신할 때 사용하는 read/write 함수가 블로킹 함수이기 때문이다. 모든 경우에서 블로킹이