브라우저가 웹 서버에 접속하여 받아온 정적 컨텐츠(html, 이미지, js 등)를 메모리 또는 디스크에 저장해 놓는 것을 말한다. 이후 HTTP요청을 할 경우 해당 리소스가 캐시에 있는지 확인하고 이를 재사용함으로써 응답시간과 네트워크 대역폭을 줄일 수 있다
클라이언트가 서버에게 문서를 요청할 때, 서버는 해당 문서를 클라이언트에게 전송하게 된다. 재차 똑같은 문서를 요청할 경우 똑같이 전송하게 된다.
캐시를 이용하면, 첫번째 응답은 브라우저 캐시에 보관되고, 클라이언트가 똑같은 문서를 요청할 경우 캐시된 사본이 이에 대한 응답으로 사용될 수 있기 때문에 중복해서 트래픽을 주고받는 네트워크 통신을 줄일 수 있다.
많은 네트워크가 원격 서버보다 로컬 네트워크에 더 넓은 대역폭을 제공한다. WAN보다 LAN이 구성이 더 쉽고 거리도 가까우며, 비용이 적게 들기 때문이다. 만약 클라이언트가 빠른 LAN에 있는 캐시로부터 사본을 가져온다면, 캐싱 성능을 대폭 개선할 수도 있다.
예를 들어 샌프란시스코 지사에 있는 사용자는 애틀랜타 본사로부터 문서를 받는 데 30초가 걸릴 수 있다. 만약 이 문서가 샌프란시스코의 사무실에 캐시되어 있다면, 로컬 사용자는 같은 문서를 이더넷 접속, 즉 LAN을 통해 1초 미만으로 가져올 수 있을 것이다.
대역폭이 문제가 되지 않더라도, 거리가 문제될 수 있다. 캐시는 이러한 거리를 수천 킬로미터에서 수십 미터로 줄일 수 있다.
원 서버로의 요청을 줄이기때문에 갑작스런 요청 쇄도 (Flash Crowds) 에 대처할 수 있다.
cache hit, cache miss
캐시에 요청이 도착했을 때, 그에 대응하는 사본이 있다면 이를 요청해 처리할 수 있다. 이를 캐시 적중(cache hit)라고 하고, 대응되는 사본이 없다면 원 서버로 요청이 전달된다. 이를 캐시 부적중(cache miss)라고 한다
캐시는 한 명의 사용자에게만 할당될 수 있고, 수천 명의 사용자에게 공유될 수도 있다. 한명에게만 할당된 캐시를 전용 캐시, private cache라고 하고, 여러 사용자가 공유하는 캐시는 공용캐시, public cache라고 한다.
private cache의 대표적인 예는 브라우저 캐시이다. 웹 브라우저는 개인 전용 캐시를 내장하고 있으며, 컴퓨터의 디스크 및 메모리에 캐시해놓고 사용한다.

public cache의 대표적인 예는 프록시 서버이다. 각각 다른 사용자들의 요청에 대해 공유된 사본을 제공할 수 있어 private cache보다 네트워크 트래픽을 줄일 수 있다


프록시 서버는 클라이언트와 서버 사이에 중간자 역할을 하는 서버이다. 클라이언트가 요청을 프록시 서버에 보내면, 프록시 서버는 이를 다시 받아서 실제 서버로 전달하고, 응답을 다시 클라이언트로 반환한다.
쉽게 말해, 클라이언트와 서버 간의 대리자 역할을 수행하는 서버이다.

클라이언트 호스트들과 접근 하고자 하는 원격 리소스 사이에 위치시킨다. 즉, 사용자가 naver.com에 연결하려고 하면 사용자가 직접 pc에 연결하는 것이 아니라 forward 프록시 서버가 요청을 받아 naver.com에 연결하여 그 결과를 사용자에게 전달해준다.
L7 로드 밸런서는 OSI 7계층 중 애플리케이션 게층에서 작동하는 로드밸런서이다. 즉, HTTP, HTTPS, FTP 등과 같은 애플리케이션 레벨의 프로토콜을 이해하고, 이를 기반으로 트래픽을 분산한다
L7 로드밸런서는 요청의 헤더, 쿠키, URI, HTTP 메서드 등 애플리케이션 계층 데이터를 분석하여 더 세부적인 트래픽 제어를 수행한다. 이 방식은 컨텐츠 기반 로드 밸런싱(Content-Based Load Balancing)이라고도 부른다
/image요청은 이미지 서버로, /api요청은 API 서버로 라우팅kr.example.com, 미국 사용자는 us.example.com으로 분산정의
클라이언트가 서버와 연결을 설정하는 데 걸리는 최대 시간을 의미합니다.
TCP 연결을 맺기 위한 시도(Connection Establishment) 단계에서 타임아웃이 발생하면 연결이 실패합니다.
동작 시점
클라이언트가 서버에 요청을 보내기 위해 TCP 3-way handshake를 시도할 때 발생.
주요 원인
서버가 응답하지 않거나 다운된 경우.
네트워크 연결 상태가 불안정하거나 손실된 경우.
방화벽이 TCP 연결 요청을 차단하는 경우.
설정 목적
너무 긴 대기 시간을 방지하고, 빠르게 재시도를 유도하여 시스템 자원을 효율적으로 사용하기 위함.
사용 사례
대기 시간이 긴 서버와의 연결 시도 시 적절한 값을 설정해 클라이언트가 불필요하게 대기하지 않도록 함.
정의
클라이언트가 서버로부터 응답 데이터를 읽는 데 걸리는 최대 시간을 의미합니다.
연결이 성공적으로 맺어진 후, 서버에서 응답 데이터를 읽는 도중 지정된 시간 내에 데이터가 수신되지 않으면 타임아웃이 발생합니다.
동작 시점
서버가 데이터를 전송하는 단계에서 클라이언트가 데이터를 읽는 동안 발생.
주요 원인
서버가 작업을 완료하는 데 시간이 오래 걸리는 경우.
(예: 복잡한 데이터 처리 또는 백엔드 지연)
네트워크 속도가 느리거나 손실이 발생한 경우.
설정 목적
서버의 응답 지연이 있을 때 클라이언트가 무한히 기다리지 않도록 제한하고, 더 나은 사용자 경험을 제공.
사용 사례
REST API 호출이나 파일 다운로드 같은 작업에서, 서버 응답이 지연될 때 이를 감지하고 대기 시간을 제한.
| 항목 | 커넥션 타임아웃 | 리드 타임아웃 |
|---|---|---|
| 정의 | 연결 설정에 걸리는 최대 시간 | 응답 데이터를 읽는 데 걸리는 최대 시간 |
| 동작 시점 | TCP 3-way handshake 단계 | 연결 후 데이터 읽기 단계 |
| 주요 원인 | 서버 다운, 네트워크 장애 | 서버 응답 지연, 네트워크 속도 저하 |
| 설정 목적 | 연결 시도의 대기 시간을 제한 | 데이터 수신 대기 시간을 제한 |
| 타임아웃 발생 시 결과 | 연결 시도가 중단 | 연결은 유지되지만 응답 처리가 중단 |
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// 커넥션 타임아웃 설정 (5초)
connection.setConnectTimeout(5000);
// 리드 타임아웃 설정 (10초)
connection.setReadTimeout(10000);
// 요청 실행
connection.connect();
출처 : https://tlatmsrud.tistory.com/119,
https://velog.io/@jangwonyoon/Proxy-Server%ED%94%84%EB%A1%9D%EC%8B%9C-%EC%84%9C%EB%B2%84%EB%9E%80