삽질의 현장/- .NET

#084_닷넷(.NET)_ ADO.NET - ADO.NET 개념 & Provider

shovelman 2015. 11. 16. 19:58


안녕하세요 삽잡이입니다.


이번시간에는 ADO.NET에 대해서

그리고, Provider라는 개념에 대해서 알아보려고합니다.



ADO.NET은 크게 세부분으로 나눌 수 있습니다.

이를 Three Face라고 부르는데,

'연결 계층', '비연결 계층', 'Entity Framework'로 나뉠 수 있게 됩니다.


Entity Framework는 가장 최근에 나온 최신 프레임워크이지요.

DB를 다룰 때 크게 이 세가지 방법으로 다룰 수 있습니다.

비연결 계층, Entity Framework는 MS 전용의 DB 다루는 방법이고,

연결 계층 만이 공용적으로 DB를 다루는 방법이지요.


어떤 OS이던 똑같이 사용할 수 있는 방식과,

MS 전용의 Library를 사용하는 방식이 있다 이겁니다.

이 MS 전용의 라이브러리라는 의미는

MS사 내에서 자기 자신의 Library를 개발하면서

DB에 관련되어 읽고 쓰기 쉽도록 나름대로 장점을 높이기 위해 만들어낸 개념입니다.


간략하게 설명을 하자면,

연결 계층은 어느 언어에서든 공용적으로 사용할 수 있는 개념입니다.

비연결 계층은 간략하게 DataSet을 사용하는 계층입니다.

Entity Framework는 비연결 계층을 강력한 타입을 기반으로 

독립적인 라이브러리를 사용할 수 있도록 하는 방법입니다.


연결 계층은 당연히 중요한 것입니다.

왜냐, 닷넷이 아니더라도 다른 DB Framework를 이해하기 용이해지지요.

비 연결 계층을 알게 되면

대부분 닷넷의 ADO.NET 사용은 비연결 계층을 사용하고 있기 때문에 유용합니다.


이 ADO.NET을 사용할 때에는 데이터 공급자(data provider)를 제공해줍니다.

공급자와 관련된 핵심 객체로써,

'Connection, Command, Parameter, Transaction' 등의 객체들이 있지요.




이와 같이 DB를 직접 가지고 노는 경우는 없습니다.

DB의 정의는 '규칙성 있는 데이터들의 집합'을 의미하지만,

DB는 단지 몇개 있다고 DB라고 일컷는게 아니지요.

최소한 수백만개의 데이터가 들어있다고 가정한다면,

DB에 직접 데이터를 대상으로 동작하지 않는다는 사실을 이해하실 수 있습니다.


DBMS가 어떤 것이든 상관없습니다.

데이터를 조작하기 위한 언어인 SQL이라는 것을 통해 DB에 이야기하는 것입니다.


따라서, DBMS는 Interface 관문을 제공해줘야합니다.

DBMS는 회사에서 만드는 것인데,

DBMS의 인터페이스도 제공해줘야한다 이겁니다.


따라서, 모든 DBMS를 설치하게 되는데 

이때 DBMS 드라이버도 설치하게 됩니다.

즉, DBMS가 설치되면서 

DBMS를 사용할 수 있는 라이브러리가 설치되게 되는 것입니다.


DBMS는 OS와 통신하기 위해서 약속한대로 동작하기 위한 

라이브러리를 설치하게 된다 이겁니다.


장치와 OS가 소통할 수 있도록 만든 인터페이스가 

디바이스 드라이버인데,

이와 같이 DBMS를 설치했을 때에도 

서로 이야기할 수 있는 소프트웨어를 제공해줘야합니다.

이를 DB 드라이버라고 부르구요.


그런데, 각각의 DBMS가 같은 방식으로 DB를 관리하게 될까요?

기능은 같더라도, 호출하고자하는 명명법이 다를 수도 있습니다.

왜냐, DBMS는 각기 다른 회사들에 의해서 개발되기 때문이지요.


그래서 드라이버를 설치하는 것입니다.

드라이버가 설치될 때 OS와 약속하는 것이지요.

어떤식으로 호출을 하고 동작을 할지에 대해서 말입니다.


결론적으로 말씀드리면,

DBMS를 설치할 때에 인터페이스 라이브러리는 DBMS와 같이 개발 되겠군요.


그런데, 잘 생각해보니까 

어플리케이션이 인터페이스가 누군지 알아야할 필요성이 있다는 사실을 알았습니다.

DB 드라이버를 설치한다고 해도 어플리케이션이 아는가? 이겁니다.

OS가 알겠지요... 약속은 OS와 하는것이니까 말입니다.


그런데 닷넷은 OS위에 또 CLR이 있지요...

아무튼... OS와 약속이 아닌 어플리케이션과도 약속이 필요하다 이겁니다.


예전에는 OS 수준의 DB 드라이버가 있었는데,

닷넷으로 넘어오면서 닷넷 수준의 DB 드라이버가 생겨났습니다.


그 DB 드라이버를 통한 약속이 인터페이스는 DBMS 회사가 만들었지만,

어떻게 호출할지 등의 약속은 'ADO.NET'이 가지고 있습니다.

따라서, ADO.NET을 provider 즉, 공급자라고 부르는 것이지요.


provider는 어플리케이션과 DBMS가 서로 통신하기 위한 인터페이스라고 부를 수 있습니다.

DB 드라이버라고 부를 수는 없습니다.

DB 드라이버는 DB 측에서 제공해주는 것이지요.


예를 들어 이겁니다.

DB가 'ADO.NET의 생성이라는 단어가 들어오면 Create를 호출하라!'

이렇게 인터페이스를 구현하게 됩니다.


ADO.NET은 MS에서 만들었지요.

DBMS 중에서도 MS_SQL은 MS가 만들었습니다.

그래서 기본적으로 MS_SQL과 통신할 수 있는 공급자는 

이미 ADO.NET에 들어가있습니다.


다른 DB의 공급자는 그럼 어떻게 합니까?

ADO.NET은 어디까지나 공용적인 부분까지는 제공을 해줄 것입니다.

MS가 만들 수 없지 않습니까?


따라서, 'Connection, Command, DataReader, 

DataAdapter, Parameter, Transaction'과 같은 

ADO.NET에서 제공하는 데이터 공급자의 핵심 객체들을 제공해줍니다.


연결하고 싶다면, Connection 객체를 사용할 터인데,

MS_SQL이면 MS_SQL에 맞는 Connection이 호출되고,

Oracle의 것이면 Oracle에 맞는 Connection이 호출되게 기능들을 제공해줍니다.

간단하게 가상 함수로 만들어져 있다고 생각하시면 됩니다.


아무튼...

공용 기능은 provider에 다 정의 되어있습니다.

하지만, MS가 아닌 다른 회사들의 DMBS에 대해서 

모든 기능들에 대한 공급자를 가지고 있지는 못합니다.


걱정할 것은 없습니다. 

당 업체에서 다운 받아오면 됩니다.

그런데, 중요한 것은 공용으로 가져다 쓸 수 있도록은 할 수 있다 이거지요.


그리고 만약, 언어가 다르다면

그 언어에 맞는 공급자를 다 설치해오면 됩니다.

이와 같은 모든 것들을 일컷는 용어를 ADO.NET이라고 부르는 것입니다.

ADO.NET 자체가 DB와 관련되어있는 형식들의 집합이니까 말입니다.


그런데 DB와 관련되는데, 

DBMS와 관련 없는 라이브러리가 있을 수도 있습니다.


DBMS는 DB가 아니기때문이지요.

DBMS를 위한 여러 형식들을 제공해주겠지만,

DB만을 위한 여러 형식들도 제공해줄 수있다 이겁니다.


아무튼... 이 또한 역시 모두 아울러서 ADO.NET이라고 부릅니다.

이 ADO.NET 안에는 

DBMS, DB 등을 위한 provider가 있다 이겁니다.



Oracle이 봤을 때 Oracle의 provider는 공용+a 일것입니다.

이를 Oracle Provider라고 부를 수 있을 것이지요.

MS역시 공용+a로써 MS Provider라고 부를 수 있습니다.


즉, Provider는 DBMS와 통신하기 위한

어플리케이션과 약속된 인터페이스 라이브러리 모음임을 알 수 있습니다.



정리해봅시다.

DBMS와 이야기 하기 위해서는 ADO.NET provider를 사용합니다.

닷넷에서 DBMS와 관련된 형식들의 집합이 ADO.NET에 있을 것인데,

이들 중에서 공용으로 사용되고, 전용으로 사용되는 것들로 나뉘어 있습니다.

그리고 이들을 모두 provider라고 부를 수 있지요.


모두 다 DB와 통신하기 위한 인터페이스 라이브러리입니다.


이번시간은 여기까지 하도록 하겠습니다.


이상 삽잡이였습니다!