HTTP 요청을 보내기 위해서는 아래와 같은 순서를 거쳐야 한다.
1. 클라이언트가 서버 IP와 포트로 연결 요청( TCP 3-way handshake)
2. 연결이 맺어짐 (커넥션 생성)
3. 데이터를 주고 받음
4. 작업이 끝나면 커넥션을 끊음 ( 커넥션 종료 )
이 때 만들어지는 연결을 TCP Connection이라고 부른다.
문제 | 커넥션 풀 도입 후 |
---|---|
매 요청마다 커넥션 생성 → 성능 저하 | 기존 커넥션 재사용해서 빠름 |
너무 많은 커넥션 생성 → 서버 과부하 | 제한된 개수로 연결 관리 |
요청 폭주 시 예외 발생 | 대기큐 등으로 안정성 확보 |
<aside> 💡
Connection이 재사용된다는 건 무슨 의미일까?
HTTP 요청을 보낼 때 다음과 같은 연결 정보가 생긴다.
클라이언트 IP:포트 ---- 연결 ----> 서버 IP:포트
192.168.0.2:50312 ----> [api.example.com:443](<http://api.example.com:443/>)
이 연결이 맺어지면 커넥션이 생성된 것이고, 이것을 끊지않고 유지해두면 같은 서버(IP+포트)로 보낼 요청에 대해 새로 연결하지 않고 재사용할 수 있다.
</aside>
프로젝트에서…..외부 API Rate Limiting 대응에도 유리하다.
pendingAcquireTimeout
으로 요청 조절 가능