-
Database Driver 알아보기Database 2023. 11. 4. 07:47728x90반응형
- 목차
소개.
Database 의 Driver 에 대해서 알아보도록 하겠습니다.
Driver 는 Application 과 Database 를 잇는 중간다리 역할을 합니다.
Application 과 Database 가 소통을 하기 위해서 필요한 기능들을 수행하는데요.
예를 들어, Connection, Serialization/Deserialization 등이 있습니다.
Application 과 Database 는 보통 물리적으로 떨어져 있을 겁니다. 서로 다른 서버인 것이죠.
그래서 이들은 네트워크적으로 연결이 되어있어야하고,
Application 과 Database 가 서로 통신할 수 있도록 Connection 이 관리됩니다.
그리고 이들은 서로 데이터를 주고 받습니다.
Application 은 Database 에게 데이터를 조회하거나 생성할 것이며,
Database 는 Application 의 DML, DDL, DCL 들의 요청을 처리해야합니다.
(DML, DDL, DCL 은 우리가 흔히 하는 create, insert ,update 등의 쿼리를 의미합니다. )
Driver 는 Application, Database 사이에 놓여서 이들을 중계합니다.
서로 다른 프로그래밍 언어, 서로 다른 위치에 놓인 이 서비스들의 소통을 책임집니다.
Database Connector API.
DBMS 의 Connector API 라는 것들이 있습니다.
아래 예시는 MySQL 의 Connector API 들의 목록을 제가 복사해 온것인데요.
각 런타임 환경에 맞는 Connector 들이 존재합니다.
JDBC, ODBC, Python, Javascript 등등 대체로 프로그래밍 언어에 따라 존재합니다.
< https://dev.mysql.com/doc/index-connectors.html >
Java Language Title HTML Online PDF English Connector/J Developer Guide View US Ltr | A4 Python Language Title Version HTML Online PDF English Connector/Python Developer Guide View US Ltr | A4 English MySQL Shell Python API Reference 8.2 View JavaScript Language Title Version HTML Online PDF English Connector/Node.js Release Notes View US Ltr | A4 English MySQL Shell JavaScript API Reference 8.2 View C++ Language Title Version HTML Online PDF English Connector/C++ Developer Guide 8.2 View US Ltr | A4 English Connector/C++ X DevAPI Reference View C# Language Title Version HTML Online PDF English Connector/NET API Reference 8.2 View C API Language Title Version HTML Online PDF English C API Developer Guide 8.2 View US Ltr | A4 PHP Language Title HTML Online PDF English PHP API View US Ltr | A4 Other Language Title Version HTML Online PDF English Connector/ODBC Developer Guide View US Ltr | A4 English Connector/ODBC Release Notes View US Ltr | A4
그럼 Connector API 는 무엇일까요 ?
Connector API 는 DBMS 에 가장 앞단에서 클라이언트와 소통하는 영역입니다.
대략적으로 아래의 구조로 소통이 발생합니다.
Client 인 Application 이 Driver 를 가지구요.
Database 내부의 Connector 가 Driver 와 소통합니다.
위에서 언급했듯이, Connector 또한 종류가 많습니다.
프로그래밍 언어와 런타임 환경의 갯수가 많기 때문에 MySQL 만 하더라도,
Java, JavaScript, PHP, Python, Golang, C/C++ 등을 지원합니다.
그래서 이들을 위한 Connector 가 MySQL 내부에 내장되어있고,
Connector 와 상응하는 Driver 또한 존재하죠.
그래서 NodeJS 서버와 MySQL 을 사용한다면,
MySQL 의 Javascript 관련 Connector 와 Driver 를 사용해야합니다.
그리고 Java 와 MySQL 의 조합이라면, JDBC Driver 와 Connector 를 사용해야죠.
이때, 적절한 Driver 를 선택하면 Connector 와의 연결을 알아서 수행합니다.
< java 예시 코드 >
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class JDBCMysqlExample { public static void main(String[] args) { // JDBC URL for the MySQL database String jdbcUrl = "jdbc:mysql://localhost:3306/your_database"; String username = "your_username"; String password = "your_password"; Connection connection = null; try { // Establish a connection to the MySQL database connection = DriverManager.getConnection(jdbcUrl, username, password); if (connection != null) { System.out.println("Connected to MySQL database"); // Perform database operations here } else { System.out.println("Failed to connect to the database"); } } catch (SQLException e) { System.err.println("Database connection error: " + e.getMessage()); } finally { try { if (connection != null) { connection.close(); System.out.println("MySQL connection is closed"); } } catch (SQLException e) { System.err.println("Error closing the database connection: " + e.getMessage()); } } } }
Connections.
저희는 Application 과 Database 의 연결이 사실상 Driver 와 Connector 의 연결임을 알게되었습니다.
그리고 이러한 연결이 필요한 이유는 Application 과 Database 는 물리적으로 떨어져있기 때문이죠.
그래서 네트워크적인 연결이 필요합니다.
Driver 와 Connector 들이 수행하는 역할 중의 하나가 바로 Connection 입니다.
보통 MySQL 같은 경우에는 3306 포트를 리스닝하고 있습니다.
그래서 Application 은 MySQL 과 통신을 하기 위해서 MySQL 의 3306 포트에 연결합니다.
예를 들어, Application 과 MySQL 모두 localhost 에 위치한다고 가정하겠습니다.
이때, Application 는 MySQL 과 소통하기 위해서 localhost:3306 로 연결을 시도할 수 있습니다.
이 과정에서 TCP 방식으로 작성하게 된다면,
아래 예시처럼
1. Socket 을 생성하고,
2. port 에 바인딩하고,
3. Database 와 통신할 버퍼를 생성하고,
4.쓰고,
5.읽기
6. Read, Write 를 위한 Thread 관리도 해야하고,
등등 해야할 일들이 너무 많아집니다.
이러한 Connection 과 관련된 복잡한 작업들을 Driver 가 모두 수행해줍니다.
즉, Connection 과 관련된 모든 작업들이 추상화되어 제공되는 것이죠.
< TCP 통신을 위한 Code 예시 >
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class TCPClient { public static void main(String[] args) { String serverHost = "localhost"; // Replace with the server's hostname or IP address int serverPort = 12345; // Replace with the server's port number try (Socket socket = new Socket(serverHost, serverPort); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in)) ) { System.out.println("Connected to the server. You can start sending messages."); String userInputString; while ((userInputString = userInput.readLine()) != null) { out.println(userInputString); // Send user input to the server String serverResponse = in.readLine(); // Receive a response from the server System.out.println("Server says: " + serverResponse); } } catch (IOException e) { System.err.println("Error: " + e.getMessage()); } } }
Serialization.
Driver 와 Connector 가 통신을 할 때,
서로 약속된 Serialization 방식이 없다면, 프로그래밍 언어나 런타임 환경에 맞는 방식으로 Serialization/Deserization 을 시도합니다.
Python 환경에서 Python Driver 와 Python Connector 가 서로 연결이 되며,
이때 사용할 Serialization/Deserization 이 결정되죠.
따라서 Driver 와 Connector 의 매칭이 Serialization 관점에서도 중요합니다.
Native Driver & Middleware Driver.
Driver 와 Connector 에 대해서 살펴보면 Native Driver 에 대한 언급을 볼 수 있습니다.
그리고 Native Driver 에 반대되는 Driver 가 Middleware Driver 입니다.
우리들이 흔히 사용하는 대부분의 Driver 들이 바로 Middleware Driver 입니다.
반면 Native Driver 는 데이터베이스에서 사용하는 프로그래밍 언어와 Serialization 방식을 공통적으로 사용하는 Driver 로써,
C/C++ 로 작성된 MySQL 인 경우에는 Native Driver 또한 같은 프로그래밍 언어와 Serialization 방식을 사용합니다.
이러한 Native Driver 의 장점은 Converting 에 사용되는 낭비를 최소화할 수 있습니다.
예를 들어, JDBC Driver 로 전달받은 데이터들은 MySQL 이 이해하기 위해서는 C/C++ 데이터로 변환이 되어야하죠.
이러한 관점에서 Native Driver 는 조금 더 효율적이라고 할 수 있습니다.
하지만, 현실의 세계에선 데이터베이스의 Native Driver 를 사용하기 위해서 개발 환경을 결정할 순 없겠죠.
그래서 Middleware Driver 를 많이 사용합니다.
반응형'Database' 카테고리의 다른 글
[MySQL] Master Slave 구성해보기 ( Replication , Replica ) (0) 2024.02.16 MySQL User, Grant 생성하기. (0) 2023.12.15 MySQL Index 알아보기 (0) 2023.10.30 MySQL Page 알아보기 (0) 2023.10.30 MySQL Buffer Pool 알아보기 (0) 2023.10.30