DB와 WAS 서버 간의 통신을 위한 TCP 통신 과정
DB 드라이버를 통해 TCP/IP 커넥션을 연결 후 ID ,PW 등을 DB 서버로 보내 내부 인증을 완료하면
생성된 커넥션 객체를 응답받을 수 있다.
초기 TCP/IP 연결 과정
(DB 커넥션 풀이 필요한 이유)
초기에 TCP/IP 로 연결하는 과정에서 3 way handshake 로 초기 연결을 하는 과정에서 시간이 많이 걸린다.때문에 DB 호출시 커넥션을 맺게되면 쿼리하는 비용보다 커넥션을 맺는 비용이 더 클수 있다.때문에 TCP/IP 로 DB 와 WAS 서버가 연결된 커넥션들을 커넥션 풀에 미리 생성을 해놓고 애플리케이션 로직은 언제든지 커넥션 풀에 이미 생성되어있는 커넥션 객체 참조를 가져다 쓴다.
TCP 커넥션을 맺는 비용은 왜 비쌀까?
연결 초기 설정에서 발생하는 여러 네트워크 지연, 혼잡 제어 및 흐름 제어로 인해 효율성이 떨어진다.네트워크 환경에 따라 이러한 비용이 커질 수 있다.
흐름제어란?
수신측이 송신측보다 데이터 처리속도가 빠르면 문제가 없지만 , 송신측의 속도가 빠를 경우 문제가 생긴다.
수신측에서 제한된 저장용량을 초과한 이후에 도착하는 데이터는 손실될 수 있으며, 만약 손실된다면 불필요하게 응답과 데이터 전송이 송/수신측 간에 빈번히 발생한다.
이러한 위험을 줄이기 위해 송신 측의 데이터 전송량을 수신측에 따라 조절해야한다.
해결방법
Stop and Wait : 매번 전송한 패킷에 대해 확인 응답을 받아야만 그 다음 패킷을 전송하는 방법
Sliding Window (Go Back N ARQ)
- 수신측에서 설정한 윈도우 크기만큼 송신측에서 확인응답없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어기법
- 동작방식 : 먼저 윈도우에 포함되는 모든 패킷을 전송하고, 그 패킷들의 전달이 확인되는대로 이 윈도우를 옆으로 옮김으로써 그 다음 패킷들을 전송
- Window : TCP/IP를 사용하는 모든 호스트들은 송신하기 위한 것과 수신하기 위한 2개의 Window를 가지고 있다. 호스트들은 실제 데이터를 보내기 전에 '3 way handshaking'을 통해 수신 호스트의 receive window size에 자신의 send window size를 맞추게 된다.
혼잡제어란?
송신측의 데이터는 지역망이나 인터넷으로 연결된 대형 네트워크를 통해 전달된다. 만약 한 라우터에 데이터가 몰릴경우, 자신에게 온 데이터를 모두 처리할 수 없게 된다. 이런 경우 호스트들은 또 다시 재전송을 하게되고, 결국 혼잡만 가중시켜 오버플로우나 데이터 손실을 발생시키게된다. 따라서 이러한 네트워크의 혼잡을 피하기 위해 송신측에서 보내는 데이터 전송 속도를 강제로 줄이게 되는데 , 이러한 작업을 혼잡제어라 한다.
또한 네트워크 내에 패킷의 수가 과도하게 증가하는 현상을 혼잡이라 하며, 혼잡 현상을 방지하거나 제거하는 기능을 혼잡제어라 한다.
흐름제어가 송신측과 수신측 사이의 전송속도를 다루는데 반해 , 혼잡제어는 호스트와 라우터를 포함한 보다 넓은 관점에서 전송문제를 다루게 된다.
3-Way Handshake 초기 연결 설정
TCP 연결을 설정하기 위해서는 3-way handshake 과정을 거쳐야한다.
초기 혼잡 제어 : Slow Start 알고리즘에 따라 처음에 작은 왼도우 크기로 시작하며 점진적으로 전송 속도를 늘려간다.
이 과정에서 데이터 전송 속도가 천천히 증가하지만, 네트워크 혼잡상태를 고려하여 안정적인 속도를 유지하려고 한다.
네트워크 지연 : 연결을 설정하는 동안 요청과 응답패킷이 오가면서 지연이 발생한다.
연결 수립후 혼잡 제어 안정화 : 연결이 수립되고 난 후 ,TCP 혼잡 제어 알고리즘을 통해 안정적인 속도로 데이터를 전송하게 된다.초기 Slow Start 이후, Congestion Avoidance 상태로 전환되며 데이터 흐름이 안정적으로 효율적으로 이루어진다.
패킷 전송: 네트워크 상태가 안정되면, 데이터를 빠르게 전송할 수 있으며, 재전송이 필요하지 않거나 발생하더라도 Retransmit 과 같은 기법으로 빠르게 복구된다.
즉, 초기 설정 후에는 혼잡제어에 의한 속도제한이 있지만, 이 이후에는 안정적으로 데이터 전송이 이루어진다.
'CS' 카테고리의 다른 글
Blocking Non-Blocking, Sync ASync (0) | 2024.12.13 |
---|---|
컴파일러와 인터프리터의 차이 (0) | 2024.11.22 |
Tree 자료구조 (0) | 2024.11.22 |