본문 바로가기

RDBMS/SQL Server

SQL Server의 통신 프로토콜, TDS

SQL 서버의 데이터베이스 엔진과 응용 어플리케이션(=SQL 네이티브 드라이버, OLEDB 드라이버 등)이 서로 통신할 때에는 TDS(Tabular Data Stream)라는 통신 형식을 사용합니다. 프로토콜이라고 할 수도 있고, 아닐 수도 있는데, TCP/IP와 같은 프로토콜 내에 캡슐화되어 내장되는 형식이므로 predefine된 메시지라고 보는 것이 좀 더 정확할 수 있겠습니다. 어쨌든, TCP/IP 혹은 Named Pipe(명명된 파이프)와 같은 방법으로 SQL 서버에 연결했을 때, 쿼리문 등의 처리가 이 TDS 형식으로 전달됩니다. 서버에는 TDS Endpoint(listening port와 비슷한 개념으로 생각하시면 되겠네요)가 생성되고, 서버/클라이언트의 Net-Library를 통해 서로 통신을 하게 됩니다. Endpoint의 종류는 다음과 같습니다 :

용도 엔드포인트 이름

공유 메모리

TSQL LocalMachine

명명된 파이프

TSQL 명명된 파이프

TCP/IP

TSQL 기본 TCP

VIA

TSQL 기본 VIA

DAC

관리자 전용 연결




TDS는 마이크로소프트의 독점적인 기술이기 때문에(당연하죠!) 윈도우 외의 환경에서는 TDS를 사용할 수 없습니다. 하지만, 이 TDS에 대해서 리버스 엔지니어링을 통해 TDS를 분석하고, 그 분석 결과와 기타 라이브러리를 공개하고 있는 프로젝트가 있습니다. freetds가 이 프로젝트의 이름입니다 : http://www.freetds.org/ 현재는 C, JAVA로 된 라이브러리와 기타 결과들이 공개되어 있습니다.



또한, MSDN Blog에 SQL 서버에서 쓰이는 프로토콜과 관련된 논의가 올라오는 곳이 있습니다 :
SQL Protocols http://blogs.msdn.com/sql_protocols/default.aspx
SQL 서버의 네트워크 프로토콜에 관심이 있다면 살펴볼만한 가치가 있습니다.