C 기반 리눅스 환경에서 다중 프로세스와 세마포어를 활용해 구현한 HTTP Proxy Server입니다.
실제 브라우저 요청을 중계하며, 캐시 시스템과 로그 기록, 시그널 및 동기화 처리까지 포함합니다.
-
🔌 소켓 통신 기반 Proxy Server
- 클라이언트의 HTTP 요청 수신 및 웹 서버로 전송
- 서버 응답을 클라이언트로 전달
-
📁 캐시 디렉토리 구조 및 SHA1 해싱
- URL을 SHA1으로 해싱하여 캐시 디렉토리 생성
- HIT 시 캐시 파일 전송, MISS 시 웹 요청 후 캐시 저장
-
📝 로그 시스템
- 요청 URL, 시각, 캐시 HIT/MISS 여부 등을 로그 파일에 기록
- 형식:
[Miss]www.example.com-[2025/05/01, 13:40:10]
-
👥 다중 프로세스 처리 (
fork())- 클라이언트마다 자식 프로세스 생성 및 요청 병렬 처리
SIGCHLD시그널로 좀비 프로세스 방지
-
⏱️ 시그널 및 타임아웃 처리
alarm()+SIGALRM을 활용한 10초 타임아웃 기능
-
🛡️ 세마포어를 이용한 동기화
- 캐시 및 로그 접근 시 임계 구역 보호
- OS: Ubuntu 20.04 LTS (64-bit)
- Language: C
- Tools: GCC, Makefile, SHA1, vi/vim