웹 서버

Hoony·2022년 8월 14일
0

HTTP

목록 보기
5/6
post-thumbnail

웹 서버

웹 서버는 HTTP 및 그와 관련된 TCP 처리를 구현한 것이다.

  • 웹 서버는 HTTP 프로토콜을 구현하고, 웹 리소스를 관리하고, 웹 서버 관리 기능을 제공한다.

웹 서버 기능

완전한 기능을 갖춘 HTTP 서버를 만들고자 한다면 해야 할 일이 매우 많다.

  • 아파치 웹 서버의 코어는 50,000줄이 넘는 코드로 되어 있다.

그러나 최소한으로 기능하는 HTTP 서버라면 30줄 이하의 펄(Perl) 코드로도 만들 수 있다.




웹 서버가 하는 일

모든 웹 서버에서 공통적으로 몇가지 일들을 수행한다.

  1. 커넥션 맺기 - 클라이언트의 접속을 받아들인다.
  2. 요청 받기 - HTTP 요청 메세지를 읽어들인다.
  3. 요청 처리 - 요청 메세지를 해석하고 특정 행동을 취한다.
  4. 리소스 접근 - 메세지에서 지정한 리소스에 접근한다.
  5. 응답 생성 - HTTP 응답 메세지를 생성한다.
  6. 응답 전송 - 응답을 클라이언트에게 돌려준다.
  7. 트랜잭션 기록 - 로그 파일에 트랜잭션 완료에 대한 기록을 남긴다.



ident 프로토콜을 통해 사용자 알아내기

ident 프로토콜은 어떤 사용자가 HTTP 커넥션을 초기화했는지 찾아낼 수 있게 해준다.

  • 해당 프로토콜을 사용하기 위해선 클라이언트가 ident 프로토콜을 지원해야 한다.
  1. 사용자가 웹 서버에 대한 HTTP 커넥션을 초기화한다.
  2. 웹 서버는 자신의 커넥션을 클라이언트 방향(ident 서버 포트 113)으로 연다.
  3. 이후 해당 커넥션을 통해 사용자 이름을 묻는 간단한 요청을 보낸다.

ident 프로토콜은 조직 내부에서는 유용하게 사용될 수 있지만, 다음과 같은 이유로 공공 인터넷에서는 사용하기 힘들다.

  • 많은 클라이언트 PC가 ident 프로토콜을 지원하지 않는다.
  • 방화벽이 ident 트래픽을 막는 경우가 많다.
  • 프라이버시 노출 위험이 있다.



커넥션 입/출력 처리 아키텍쳐

웹 서버들은 언제라도 요청이 들어오면 처리할 수 있게 요청을 주시하고 있다.
하지만 처리하는 방식은 웹 서버 아키텍쳐에 따라 달라질 수 있다.


단일 스레드 웹 서버

  • 단일 스레드 웹 서버는 한 번에 하나씩 요청을 처리한다.
  • 처리 도중에 모든 다른 커넥션은 무시되므로 오직 로드가 적은 서버나 진단도구에서만 사용한다.

멀티스레드 웹 서버

  • 멀티스레드 웹 서버는 여러 요청을 동시에 처리한다.
  • 해당 구조는 커넥션마다 스레드/프로세스를 할당한다. 하지만 너무 많은 스레드가 생성이 될 수 있으므로 최대 개수에 제한을 둔다.

다중 I/O 웹 서버

  • 많은 웹 서버가 대량의 커넥션을 지원하기 해당 구조를 채택했다.
  • 다중 I/O 웹 서버는 모든 커넥션의 활동을 감시한다.
  • 그 중 처리가 필요한 커넥션이 생기면 리소스를 할당하여 처리한다.
  • 이러한 방식의 장점은 스레드와 프로세스같은 리소스가 커넥션에 매여 기다리는 것이 아닌 필요할 때 사용되므로 더 효율적이다.



동적 콘텐츠 리소스 매핑

웹 서버는 URI를 동적 리소스에 매핑할 수도 있다.
즉, 요청에 맞게 콘텐츠를 생성하는 프로그램에 URI를 매핑한다.



서버사이드 인클루드

  • 많은 웹 서버가 서버사이드 인클루드를 지원한다.
  • 특정 리소스가 서버사이드 인클루드를 포함하고 있다면 서버는 리소스를 보내기 전에 내부적으로 처리한다.
  • 해당 방법은 동적 콘텐츠를 만드는 쉬운 방법이다.



응답(Response)

서버가 HTTP 요청 메세지를 받고 내부적으로 처리를 한다.
그 이후에 서버는 클라이언트에게 올바른 응답을 보내준다.


응답 엔티티

  • 응답 상태 코드
  • 응답 헤더
  • 응답 본문


리다이렉션
웹 서버는 응답 메세지 대신 리다이렉션을 응답으로 반환할 수 있다.
즉, 요청을 처리 결과 클라이언트에게 다른 곳으로 갈 수 있도록 응답 메세지를 보내는 것이다.


리다이렉션이 이루어지는 이유는 다음과 같은 이유들이 있다.

  • 영구히 리소스가 옮겨진 경우
  • 임시로 리소스가 옮겨진 경우
  • URL 증강
  • 부하 균형
  • 친밀한 다른 서버 존재
profile
Just Do it!

0개의 댓글