인프런 커뮤니티 질문&답변

jihun4178님의 프로필 이미지

작성한 질문수

스프링 DB 1편 - 데이터 접근 핵심 원리

TCP커넥션과 커넥션 풀의 커넥션

작성

·

1.2K

3

안녕하세요 커넥션 풀 강의 부분을 듣고 질문사항이 생겼습니다.

 

일반적으로 TCP커넥션이라 함은, 소켓(src ip, src port, dst ip, dst port 조합으로 구분)을 통하게 되는데 결국 클라이언트와 서버 1대1 관계에서 TCP 커넥션이 하나 생기지 않습니까? (src ip, src port, dst ip, dst port가 모두 같을 경우에 해당)

 

하지만 커넥션 풀 개념에서는 커넥션 풀에 여러개의 커넥션이 존재하게 됩니다. 여기서 다음과 같이 의문점이 생겼습니다.

 

  1. DB커넥션과 TCP커넥션은 다른 개념으로 생각해야 할 게 맞는건지(TCP커넥션 하나에 여러개의 DB커넥션이 포함되는 느낌?)

  2. 위 질문이 맞다면 DBMS 단에서 커넥션 풀의 여러 커넥션들을 구분하는 기준은 소켓이 아니라 세션ID같은 정보일 것으로 확인되는데 맞을까요?

  3. 트랜잭션 개념에 의하면 같은 커넥션(세션)으로 일련의 쿼리들을 전송해야 하는데, 커넥션과 세션은 1대1로 매핑되는 개념으로 알고 있습니다. 세션은 DBMS단에서 세션ID로 식별을 한다고 생각하면 커넥션 풀의 커넥션은 어떤 세션과 매핑이 될지에 대한 정보를 어떻게 표현되어지고 있는지 궁금합니다. 커넥션 풀 구현체(히카리 등)에서 정의한 커넥션 객체에 세션ID라는 필드가 있는 건지...

 

추가질문

  1. JDBC 기반으로 메시지를 보낼 때 프로토콜이 JDBC인 것으로 알고있는데 wireshark같은 네트워크 패킷 프로그램으로 확인해본 결과 JDBC나 mysql이라는 프로토콜은 필터링되지 않고 TCP로 필터링되어 확인됩니다. 결국 JDBC나 mysql 같은 프로토콜은 TCP의 payload부분을 커스터마이징하여 구현된 프로토콜인것으로 예측이 되는데(사실 payload 부분이 암호회되어 확인할 수 없음) 맞는 사실일까요?

  2. 위 질문이 맞다면 DB접근에 대한 프로토콜은 애플리케이션 레벨 프로토콜을 사용하지 않고 TCP로만 데이터를 보내는 것으로 해석이 되는데 맞을까요? (JDBC나 mysql 같은 프로토콜이 L7 프로토콜인 것으로 생각했었습니다...)

 

감사합니다!

답변 1

3

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. jihun4178님

한대의 클라이언트와 서버 사이에서도 여러 TCP/IP 커넥션 연결을 만들 수 있습니다.

DB 드라이버의 구현에 따라서 다르겠지만, 10개의 커넥션 연결을 만들어서 풀에 관리한다면, 실제 10개의 TCP/IP 커넥션 연결이 만들어집니다.

그리고 이 연결당 각각 하나의 세션이 만들어집니다.

감사합니다.

jihun4178님의 프로필 이미지
jihun4178
질문자

답변 감사합니다.

 

실제로 확인해본 결과 단일 TCP 커넥션 구분은 src ip, src port, dst ip, dst port 조합으로 구분하는게 맞지만 실제로 커넥션 풀에 커넥션을 만들 때, source port를 변경해감으로써 단일 클라이언트-서버 간에 TCP 커넥션을 구분하고 있는 것을 확인했습니다.

 

좋은하루 되세요