오늘 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)
- 동기화: 여러 스레드 동시 읽기 허용, 쓰기는 단일 — 단일 큰 락 금지(리더-라이터 락 등 활용)
대충 이정도인데…
더 구체적으로 뭘할지 모르게 되었다
내일 이어 설명하겠다