[CSAPP 11장 완전 정복] 11.5~11.6(Part 1) 웹 서버의 세계로 한 걸음, Tiny는 왜 필요한가?

2025. 5. 3. 16:30·크래프톤 정글/컴퓨터구조(CSAPP)

웹 서버의 세계로 한 걸음, Tiny는 왜 필요한가?

이번 포스트에서는 CSAPP 11장 중 11.5절의 상단부 핵심을 중심으로 Tiny 웹 서버의 존재 이유와 구조에 대해 정리해 보겠습니다. 여기서 중요한 건 단순히 '웹 서버는 클라이언트의 요청을 받고 응답을 준다'의 개념을 넘어서, '왜 그렇게 동작하는가?'에 대한 철학적 구조를 파악하는 것이죠.

 

 

HTTP의 요청과 응답은 어떻게 구성되어 있을까?

웹 서버를 이해하려면 먼저 HTTP 프로토콜의 동작 방식을 알아야 합니다.

1. HTTP 요청 메시지 (Client → Server)

  • 요청 줄 (Request Line): METHOD URI VERSION (ex. GET /index.html HTTP/1.1)
  • 요청 헤더들: Host, User-Agent, 등
  • 빈 줄: 헤더의 끝을 표시
  • 선택적 본문 (Body): POST일 경우 포함

2. HTTP 응답 메시지 (Server → Client)

  • 상태 줄 (Status Line): VERSION STATUS-CODE STATUS-MESSAGE (ex. HTTP/1.1 200 OK)
  • 응답 헤더들: Content-Type, Content-Length 등
  • 빈 줄: 헤더 종료
  • 본문 (Body): 요청된 실제 데이터

여기서 중요한 건 HTTP는 '텍스트 기반'이라는 점입니다. 즉, 우리가 터미널로도 직접 쿼리를 보낼 수 있단 뜻이지요.

 

 

Tiny 웹 서버는 무엇을 위해 존재할까?

Tiny는 단순한 예제가 아닙니다. 그것은 웹 서버의 핵심 구조를 최소한으로 구현한, 실전 학습용 웹 서버입니다.

  • GET 메서드만 지원한다. (POST, PUT, DELETE 등은 무시)
  • 정적 콘텐츠 (HTML, 이미지 등)와 동적 콘텐츠 (CGI) 를 모두 처리한다.
  • 분기 로직(if (is_static) ... else ...)이 핵심이며, 이것이 어떻게 콘텐츠 유형에 따라 다른 동작을 이끌어내는지가 관건

 

정적 콘텐츠 vs 동적 콘텐츠

정적 콘텐츠

  • HTML, CSS, 이미지처럼 고정된 파일
  • serve_static() 함수에서 처리
  • mmap()으로 파일을 메모리에 매핑하여 성능을 끌어올림

 

동적 콘텐츠

  • adder.cgi 같은 CGI 프로그램의 실행 결과
  • fork() + execve()로 자식 프로세스를 생성하여 동작
  • QUERY_STRING 환경 변수로 클라이언트의 요청 값을 전달

 

URI는 어떻게 파일 경로로 변환될까?

Tiny는 parse_uri()를 통해 URI를 실제 파일 경로로 바꿉니다. 예시를 들면 아래와 같은데요.

(1) /home.html → ./home.html
(2) /images/pic.jpg → ./images/pic.jpg
(3) / → ./home.html

다만, 보안상의 이유로 ../ 같은 경로 우회는 반드시 막아야 하지만, Tiny에는 학습 목적 상 해당 로직이 생략되어 있습니다.

 

 

마치면서, 우리는 왜 Tiny를 배우는가?

책의 line-by-line 분석에 들어가기 전에, 우리가 하고 있는 게 '단순히 파일을 읽고 전송하는 게 아니라', 클라이언트의 요청을 분석해서 거기에 맞는 응답을 동적으로 구성하는 구조라는 걸 이해하는 것이 중요합니다.

 

Tiny는 단순함 속에 웹 서버의 본질을 담고 있는데요. 그 철학과 구조를 이해하면, 어떤 서버 코드도 쉽게 읽을 수 있을 것입니다. 다음 편에서는 Tiny의 doit(), serve_static(), serve_dynamic()을 자세히 파헤쳐보며, 실제 코드 흐름을 단계별로 분석해 보겠습니다. 감사합니다!

저작자표시 비영리 변경금지 (새창열림)

'크래프톤 정글 > 컴퓨터구조(CSAPP)' 카테고리의 다른 글

[CSAPP 11장 완전 정복] 11.5~11.6(Part3) Tiny 웹 서버 확장성과 실전 응용  (1) 2025.05.03
[CSAPP 11장 완전 정복] 11.5~11.6(Part 2) Tiny 웹 서버 구조 뜯어보기  (1) 2025.05.03
CSAPP 11.5~11.6 rawdata 공유 (전체 학습 목표, 학습 정리 자료)  (0) 2025.05.03
[CSAPP 11장 완전 정복] 11.4(Part 2) addrinfo, sockaddr 구조체부터 변환 함수까지 한 번에 정리하기  (0) 2025.05.02
[CSAPP 11장 완전 정복] 11.4(Part 1) 소켓 함수 흐름 완전정복, 클라이언트-서버 연결의 모든 것  (0) 2025.05.02
'크래프톤 정글/컴퓨터구조(CSAPP)' 카테고리의 다른 글
  • [CSAPP 11장 완전 정복] 11.5~11.6(Part3) Tiny 웹 서버 확장성과 실전 응용
  • [CSAPP 11장 완전 정복] 11.5~11.6(Part 2) Tiny 웹 서버 구조 뜯어보기
  • CSAPP 11.5~11.6 rawdata 공유 (전체 학습 목표, 학습 정리 자료)
  • [CSAPP 11장 완전 정복] 11.4(Part 2) addrinfo, sockaddr 구조체부터 변환 함수까지 한 번에 정리하기
그냥사람_
그냥사람_
IT 관련 포스팅을 합니다. 크래프톤 정글 8기 정경호
  • 그냥사람_
    그냥코딩
    그냥사람_
  • 전체
    오늘
    어제
    • 글 전체보기 N
      • 크래프톤 정글 N
        • 로드 투 정글(입학시험)
        • CS기초(키워드, 개념정리) N
        • 컴퓨터구조(CSAPP)
        • Code 정글(C언어) N
        • 마이 정글(WIL, 에세이)
      • 자료구조&알고리즘
        • 자료구조
        • 알고리즘
      • 일상
  • 블로그 메뉴

    • 홈
  • 링크

    • Github
  • hELLO· Designed By정상우.v4.10.3
그냥사람_
[CSAPP 11장 완전 정복] 11.5~11.6(Part 1) 웹 서버의 세계로 한 걸음, Tiny는 왜 필요한가?
상단으로

티스토리툴바