jun-wiki

View My GitHub Profile

Posts (Latest 10 updated) :
Read all
Contents:
  1. 요구 사항
    1. 단계별 요구사항
      1. 1. Part I: 순차 프록시
      2. 2. Part II: 동시성
      3. 3. Part III: 캐싱

오늘 TIL


프록시 서버 만들란다

프록시가 뭔지부터 알아야 한다

프록시 서버

이걸 구현하라고 하는데…

흐음…

솔직히 모르겠다

그렇다고 안할 수는 없는 노릇이기에

만들어야 할 프록시 서버의 구현 사항을 살펴보자


요구 사항

  • HTTP/1.0 기반 웹 프록시

    • 클라이언트 요청을 받아 서버에 전달하고, 서버 응답을 다시 클라이언트로 전달
    • 이후 단계에서 동시성(멀티스레드)메모리 캐시 추가

단계별 요구사항

1. Part I: 순차 프록시

  • 지원: GET(필수), 나머지 메서드는 선택
  • 요청 파싱: URL에서 호스트·포트·경로 추출
  • 프록시가 서버로 보낼 헤더(핵심):

    • Host: <host> (반드시 포함)
    • User-Agent: <제공된 고정 문자열>(권장)
    • Connection: close
    • Proxy-Connection: close
  • 모든 요청은 HTTP/1.0으로 포워딩 (브라우저가 1.1로 보내도)

2. Part II: 동시성

  • 새 연결마다 스레드 생성(혹은 prethreaded)
  • detached 스레드 권장, 스레드 안전 함수 사용(getaddrinfo 기반)

3. Part III: 캐싱

  • 메모리 캐시: 서버 응답을 클라이언트 전송과 동시에 저장
  • 재요청 시 서버 재접속 없이 캐시로 응답
  • 제약:

    • MAX_CACHE_SIZE = 1 MiB
    • MAX_OBJECT_SIZE = 100 KiB (이보다 크면 캐시하지 않음)
  • LRU 근사로 제거(eviction)
  • 동기화: 여러 스레드 동시 읽기 허용, 쓰기는 단일 — 단일 큰 락 금지(리더-라이터 락 등 활용)




대충 이정도인데…

더 구체적으로 뭘할지 모르게 되었다

내일 이어 설명하겠다