본문 바로가기
C언어/Tiny 웹 서버

Tiny 웹 서버 개요

by lacuca9 2024. 9. 17.

Tiny 웹 서버는 네트워크 프로그래밍의 핵심 개념을 통합하여

실제 웹 서버의 기본적인 기능을 구현한 간단한 서버이다.

 

  1. 목적 :
    • 웹 서버 구현의 핵심 개념을 보여주기 위해 설계.
    • 프로세스 제어, 유닉스 I/O 작업, 소켓 사용, HTTP 요청 처리 개념
  2. 핵심 구성 요소 :
    • 프로세스 제어 : 들어오는 연결을 처리하기 위해 새로운 프로세스 생성하며,
      기본적인 프로세스 생성 및 관리
    • 유닉스 I/O : 데이터 읽기 및 쓰기
    • 소켓 인터페이스 : 네트워크 연결 관리하기 위해 구현
    • HTTP 프로토콜 : HTTP 요청을 파싱하고 응답을 처리하여 정적 컨텐츠와
      동적 CGI 요청을 모두 처리

 

주요 함수 및 개념

  1. Open_listenfd :
    • 리스닝 소켓을 생성하고 지정된 포트에 바인딩. 서버가 들어오는 연결을 수락할 준비
  2. Accept :
    • 클라이언트의 연결 요청을 수락하여 클라이언트-서버 통신을 위한 소켓 생성
  3. read_requesthdrs :
    • 클라이언트로부터 HTTP 요청 헤드를 읽음. 헤더를 처리하여 요청 처리를 준비
  4. parse_uri :
    • URI를 분석하여 요청이 정적 컨텐츠를 위한 것인지, 동적 CGI 스크립트에 대한 것인지 결정.
      요청을 적절한 처리기로 라우팅하는 데 사용
  5. serve_static :
    • 정적 컨텐츠(HTML파일, 이미지) 제공. 요청된 파일을 디스크에서 읽어 클라에게 전송.
  6. serve_dynamic :
    • CGI 스크립트를 실행하여 동적 컨텐츠를 제공. 환경 변수를 설정하고 execve를 사용하여
      스크립트를 실행하며, 스크립트의 출력을 클라에게 전송
  7. clienterr :
    • 요청에 문제가 있을 경우 클라에게 오류 응답을 보냅니다
      파일을 찾을 수 없거나 지원하지 않는 메소드에 대한 응답 처리

 

웹 서버의 동작 방식

  1. 서버 시작 :
    • 서버는 사용자가 지정한 포트에 바인딩된 리스닝 소켓을 생성하여 초기화
  2. 연결 수락 :
    • 무한 루프에 들어가서 클라이언트로부터 오는 연결 요청을 계속 수락
  3. 요청 처리 :
    • 수락된 연결에 대해 HTTP 요청을 읽고, URI를 파싱하여 요청된 콘텐츠 유형(정/동적)
      에 따라 적절한 처리 함수를 호출
  4. 컨텐츠 제공 :
    • 정적 컨텐츠는 파일 시스템에서 읽어 클라에게 전송
    • 동적 컨텐츠는 CGI 스크립트를 실행하여 그 출력을 클라에게 전송
  5. 연결 종료 :
    • 요청 처리가 끝난 후, 서버는 클라와의 연결을 종료하고 새로운 연결 기다림

예제 코드 요약

  1. main 함수 : 서버 설정, 연결 수락, 요청 처리하는 루프 실행
  2. doit 함수 : 각 요청을 처리하여 요청 라인을 읽고 URI를 파싱하며, 정/동적 컨텐츠 제공
  3. serve_static, serve_dynamic : 정적 및 동적 컨텐츠 제공 처리
  4. clienterror : 요청을 처리할 수 없는 경우 오류 응답을 클라에게 보냄

'C언어 > Tiny 웹 서버' 카테고리의 다른 글

Tiny 구현  (2) 2024.09.18
network 개요  (2) 2024.09.16