[WebProxy] 캐시 기능이 추가된 동시성 프록시 서버 단계별 구현 및 테스트하기
·
크래프톤 정글/Code 정글(C언어)
캐시 기능이 추가된 동시성 프록시 서버 단계별 구현 및 테스트하기동시성 프록시 서버 구현을 마쳤다면, 이제 대망의 캐시 기능을 넣어볼 차례입니다. 주변에서 캐시 구현이 그렇게 어렵다는 소리를 듣고 겁을 먹으신 분도 계실 것 같은데요. 하지만 이제껏 해왔던 것처럼 한 단계씩 나아가다 보면 어느새 캐시라는 목적지에 다다를 수 있을 겁니다. 이번 글에서는 스레드 풀 기반 프록시 서버에 Lazy LRU 기반 캐시 기능을 결합하는 과정을 단계별로 소개해봅니다. 캐시 구조 설계부터 캐시 검색, 삽입/삭제, 실제 통합까지 4단계로 나눠 설명합니다. 캐시 기능이 추가된 동시성 프록시 서버 단계별로 구현하기0단계: 목표 정리하기동시성 프록시 서버에 캐시 기능 추가하기곧, 중복된 URI 요청에 대해 응답을 재사용할 수 ..
[VSCode] 내가 쓰는 VSCode 유용한 단축키 모음
·
크래프톤 정글/Code 정글(C언어)
내가 쓰는 VSCode 유용한 단축키 모음 (Windows 기준)한 라인 전체 선택 (Ctrl + L)한 줄을 전체 선택할 수 있다. 삭제하기도 편하고 복사할 때에도 편하다. 실행 터미널 숨기기/펼치기 (Ctrl + J)아래쪽의 실행 터미널을 숨겼다 펼쳤다 할 수 있다. 숨기면 코드 공간이 늘어나서 쾌적해진다. 탐색기 숨기기/펼치기 (Ctrl + B)마찬가지로 왼쪽 탐색기도 숨겼다 펼쳤다 할 수 있다. 코드 공간을 극한으로 늘리고 싶을 때 같이 시도해보면 좋다. 새 터미널 실행하기 (Ctrl + Shift + ` )새 터미널을 실행하는 단축키. 터미널을 여러 개 띄워야 할 때 쓸만한 것 같다.
[WebProxy] 동시성 프록시 서버 단계별 구현 및 테스트하기
·
크래프톤 정글/Code 정글(C언어)
동시성 프록시 서버 단계별 구현 및 테스트하기이번 글에서는 반복형 프록시 서버 구현의 다음 단계로, 스레드 풀(Thread Pool)을 이용해 여러 클라이언트 요청을 동시에 처리하는 멀티스레드 기반 동시성 프록시 서버를 구현해 볼 건데요. 이전 글에서는 단계마다 대략적인 방향을 제시하고 마지막에 전체 코드를 제시하는 형태로 구성했었는데요. 난이도가 올라감에 따라 초심자도 쉽게 따라올 수 있도록 한 단계씩, 주석이 가득한 코드로 설명할 예정이니 안심하고 따라오셨으면 좋겠습니다. 동시성 프록시 서버 단계별로 구현하기0단계: 목표 정리하기클라이언트 요청을 받고 이를 스레드 풀에 있는 워커 스레드가 처리하는 멀티스레드 기반 동시성 프록시 서버 완성하기서버 시작 시 고정된 N개의 워커 스레드 생성 (스레드 풀)..
[WebProxy] 반복형 프록시 서버 단계별 구현 및 테스트하기
·
크래프톤 정글/Code 정글(C언어)
반복형 프록시 서버 단계별 구현 및 테스트하기이번 글에서는 클라이언트의 HTTP 요청을 받아 원래 서버로 전달하고, 응답을 그대로 중계하는 반복형(Iterative) 프록시를 구현해보려고 하는데요. 아래 단계는 proxy.c 전체 구현 (본문 하단 참조)과 tiny 서버(정적 컨텐츠 서버)를 기반으로 하고 있습니다. 한 번에 다 구현하려 하기보다는, 한 단계씩 흐름을 따라가면서 단계마다 요구되는 출력을 성공적으로 확인한 뒤 구현해 나가는 것을 추천드립니다. 사전 준비: 단계별 출력 확인 방법(1) 프록시 서버 실행하기 (필요 시 Tiny 서버도 실행)# 필요 시 새 터미널을 열고, .proxy 디렉터리에서 ./tiny 8000./proxy 4500(2) 새 터미널을 열어 telnet을 통해 프록시 서버..
[WebProxy] Proxy & Tiny 서버 자동 실행 스크립트: run_proxy.sh
·
크래프톤 정글/Code 정글(C언어)
Proxy & Tiny 서버 자동 실행 스크립트: run_proxy.shCS:APP WebProxy-Lab을 진행하다 보면, 매번 수동으로 Tiny 서버를 띄우고, 프록시를 포트에 맞게 실행하며 로그를 확인하는 작업이 굉장히 번거로운데요. 이를 해결하기 위해, 두 서버를 자동으로 실행하고 로그 관리까지 담당하는 run_proxy.sh 스크립트를 만들게 되었습니다. 제공 기능 요약Tiny 서버 자동 실행 (지정된 포트(8000)로 백그라운드 실행. 빌드 지원 x)프록시 서버 자동 빌드 및 실행 (free-port.sh를 통한 포트 자동 할당)프록시 실시간 로그 출력 (터미널에 표시)Tiny 로그는 tiny.log에 저장, 매 실행 시 초기화Ctrl+C 입력 시 모든 서버 자동 종료 처리프로젝트 디렉토리 ..
[WebProxy] Bash 스크립트 "cannot execute: required file not found" 에러 해결 방법
·
크래프톤 정글/Code 정글(C언어)
Bash 스크립트 "cannot execute: required file not found" 에러 해결 방법리눅스 환경에서 .free-port.sh 같은 스크립트를 실행하려고 할 때, 아래와 같은 모호한 오류를 만날 수 있습니다.bash: ./free-port.sh: cannot execute: required file not found 분명 파일도 존재하고 실행 권한도 주었는데, 실행되지 않습니다. 문제 원인: 줄바꿈(CRLF) 문제이런 현상은 대부분 Windows 환경에서 작성된 스크립트 파일이 CRLF(\r\n) 줄바꿈을 가지고 있을 때 발생하는데요. 리눅스 쉘은 줄 끝의 \r 문자를 인식하지 못하고, #!/bin/bash 줄조차 제대로 해석하지 못하게 됩니다. 해결 방법: dos2unix로 줄..
[WebProxy] 프록시 서버 제대로 알고 시작하기
·
크래프톤 정글/Code 정글(C언어)
프록시 서버 제대로 알고 구현하기Tiny 서버 숙제를 마쳤다면 다음 목표는 대망의 WebProxy 서버를 구현할 차례입니다. 하지만 '프록시 서버 = 동시성 서버'라고 막연히 생각하고 시작하면 구현 방향이 흐려질 수 있는데요. 이 글에서는 프록시 서버가 무엇인지를 먼저 이해하고, 구현 로드맵을 단계별로 정리해 봅니다. 프록시 서버란 무엇인가?프록시 서버는 클라이언트와 원 서버(origin server) 사이에서 요청과 응답을 중계하는 중간 서버입니다. 즉, 클라이언트의 요청을 대신 서버에 전달하고, 서버의 응답을 받아 다시 클라이언트에게 전달해주는 역할을 하지요. 이러한 구조 덕분에 프록시 서버는 단순 중계 이상의 기능을 수행할 수 있습니다. 예를 들어, 자주 요청되는 데이터를 캐싱해 서버의 부하를 줄..
[WebProxy] Tiny 서버 숙제 문제 분석 및 해결하기
·
크래프톤 정글/Code 정글(C언어)
Tiny 서버 숙제 문제 분석 및 해결하기Tiny 서버의 기본 구현을 완료한 뒤에는, 몇 가지 추가적인 숙제들을 해결해야 하는데요. 이번 글에서는 이 숙제들이 구체적으로 무엇을 요구하는지, 또 이를 만든 사람들이 학생들이 직접 해결하면서 어떤 개념이나 경험을 얻기를 바라는지 하나씩 분석해보겠습니다. 다만 깊이 있는 학습 경험을 위해 각 숙제에 대해 곧바로 학습 목표나 해결 방법을 확인하기보다는, 우선 문제 설명만 읽은 뒤 직접 해결 방안을 고민하고 적용해보는 과정을 거친 후, 이를 검토하거나 보완하는 용도로 학습 목표나 해결 방법을 활용하시는 것을 추천드립니다. 숙제 11.6C"TINY의 출력을 조사해서 사용하는 브라우저의 HTTP 버전 결정하기" 문제 설명Tiny 서버의 터미널 출력을 통해, 브라우저가..