login register Sysop! about ME  
qrcode
    최초 작성일 :    2002년 02월 06일
  최종 수정일 :    2002년 02월 06일
  작성자 :    깜찍이 (박수인)
  편집자 :    Taeyo (김 태영)
  읽음수 :    29,007

강좌 목록으로 돌아가기

필자의 잡담~

역시 박수인님은 ADO.NET 책도 준비를 하셨던 것이군요... 흠.. .NET 에서 가장 재미있을 부분으로 예상되는 ADO.NET.. 기대하시라.. 짜잔... 태오도 드뎌 3월부터는 집필(!)에 들어간답니다.... ^^ ASP.NET 초심자용 서적을 말이지요. 인브레인 프레스 출간예정이랍니다. 히~~

안녕하세요.

제가 첫 강좌를 올린지가 벌써 1년이 지났네요..그동안 강좌를 올려야지 올려야지 하면서도 올리지 않은 것은 바로 .NET이라는 넘 때문이었어요..NET을 빨리 공부해서 많은 분들에게 도움을 드릴 수 있게 하기 위해서 아직은 부족하지만 제가 알고 있는 것만이라도 여러분과 공유하기 위해서 새로운 강좌를 시작합니다.이름하여 [깜찍아, ADO.NET??? ADO.NET!!!] 강좌의 제목을 이렇게 정한 것은 머 별 의미 없습니다. 그냥 생각나길래 한번 써본거죠.. ^^;;

제가 이 강좌를 진행하면서 데이터베이스와 연동하는 부분은 거의 스토어드 프로시저를 사용할 것입니다. 만일 스토어드 프로시저에 대해서 아직 익숙하지 않으신 분은 [깜찍이의 Stored Procedure & ASP] 강좌를 참고해 주세요...

자 그럼 시작해 볼까~~요???

ADO.NET은 무엇일까요? ADO.NET은 진짜 어려운 넘일까요? 진짜 성능이 월등히 좋은 넘일까요? 진짜 개발자에게는 편한 넘일까요?이런 질문에 대한 답은 물론 여러분이 사용해 보셔야 알 수가 있지요. 제가 너무 좋다, 빠르다.. 머 그런 얘기했다가 그렇지 않으면... 흠.. 스타일 구겨지겠죠? ^^;;

본론으로 들어가서 ADO.NET은 두 가지로 나뉘어질 수 있습니다.첫번째는 데이터베이스와의 연결을 유지한 상태에서 역할을 수행하는 .NET Data Provider이고 또 하나는 그 반대의 경우로 비연결 지향적인 DataSet입니다. 이 구조를 간단하게 도식적으로 표현하면 다음 그림과 같습니다.

많이 본 그림인가요? 오호~~ 많이 본 그림이라면 벌써 ADO.NET을 보기 위해서 MSDN을 찾아보셨군요~~ 멋쟁이~~~^^

위 그림에서 보면 알 수 있듯이 왼쪽에 있는 것은 .NET Data Provider로 실제로 데이터베이스와 연결을 유지한 채로 모든 일을 수행합니다.이 .NET Data Provider에는 Connection, Command, DataReader 그리고 DataAdapter 클래스가 있습니다. 이 들 각각의 클래스는 이전에 사용되었던 ADO 에서의 클래스들과 매우 유사한 기능을 가지고 있습니다.그럼 .NET Data Provider에 대해서 간략하게나마 알아보도록 하겠습니다.

오호~~ 이거 책 한번 썼다고 말이 엄청 딱딱해지는 것 같네요 ^^;; 2월 말을 기대해 주세요, 깜찍이가 쓴 ADO.NET 책이 나온답니다. ^^


.NET Data Provider

위에서 .NET Data Provider는 데이터베이스와의 연결을 유지하면서 모든 일을 하는 것이라고 했습니다. 따라서 .NET Data Provider는 데이터베이스가 무엇이냐는 것이 중요하다고 할 수 있습니다. 이런 데이터베이스의 종류에 따라서 Sql 서버용과 OLE DB 데이터 용, 그리고 ODBC를 이용할 수 있는 세 개의 네임스페이스를 제공하고 있습니다. 이 네임스페이스들은 System.Data 네임스페이스에 속해 있고, 이 네임스페이스들을 사용하려면 System.Data 하부의 각각의 네임스페이스를 사용해야 합니다. ( 예, using System.Data.SqlClient ) .NET Data Provider는 위 그림에서 볼 수 있듯이 다음의 4개의 클래스로 이루어져 있습니다.

* Connection

Connection 클래스는 데이터베이스와 클라이언트를 연결해준다는 의미에서 기존의 ADO의 Connection 클래스와 매우 유사합니다. 이 클래스의 역할은 ConnectionString에 의해서 데이터베이스에 접근해서 데이터베이스와의 연결을 열고, 닫는 메서드를 제공합니다. 또한 데이터베이스를 사용 중에 데이터베이스를 변경할 수도 있는 메서드를 제공하는 등 기존의 Connection보다는 안정적이고 다양한 메서드를 제공하고 있습니다. 자세한 내용은 차후에 다루도록 하겠습니다.

* Command

Command 클래스 역시 쿼리문을 실행한다는 점에서 ADO의 Command 클래스와 유사합니다. 이 클래스의 역할은 연결되어있는 Connection 클래스 안에서 Insert, Update, Delete와 같은 레코드를 변경하는 일과 DataReader 클래스에 레코드를 반환하는 일들로 요약될 수 있습니다. 또한 Parameters 컬렉션과 함께 사용되어서 저장 프로시저나 매개변수를 필요로 하는 쿼리문을 실행할 수 있는 환경을 제공합니다.

* DataReader

DataReader 클래스는 읽기 전용( read-only )과 전진 전용( forward-only )만 제공하는 ADO의 RecordSet 클래스와 유사합니다. 따라서 DataReader는 레코드를 읽다가 이전 혹은 제일 처음의 레코드로 갈 수 없으며, 데이터를 변경하는 일 또한 할 수 없습니다. 하지만 읽기 전용( read-only )과 전진 전용( forward-only )을 사용함으로써 가장 빠르게 데이터에 접근할 수 있다는 것이 DataReader의 가장 큰 강점이라고 할 수 있습니다. 이것은 데이터를 가져올 수 있는 속도가 비교적 느린 웹 환경에 알맞게 설계된 클래스라고 할 수 있습니다.

* DataAdapter

위 그림에서 보면 .NET Data Provider의 나머지 세 개의 클래스와는 다르게 DataAdapter 클래스는 DataSet 클래스와 연결되어 있는 것을 볼 수 있습니다. DataSet 클래스는 비연결 지향적인 클래스이므로 데이터 원본과는 전혀 상관없이 역할을 수행합니다. 따라서 이 DataSet 클래스와 데이터 원본과의 다리 역할을 해서 클라이언트가 수행한 데이터베이스의 변경작업을 이 DataAdapter 클래스가 맡아서 합니다. 또한 그림에서 보면 SelectCommand, InsertCommand, UpdateCommand, DeleteCommand 가 있는데 이것들은 DataAdapter 클래스에 있는 프로퍼티입니다. 이 프로퍼티들은 Command 형이고 각각의 쿼리문마다 적절한 프로퍼티를 설정해 주어야 합니다.


DataSet

DataSet은 앞에서 간략하게 언급했듯이 비연결 지향적인 데이터 클래스입니다. 데이터베이스에서 레코드를 가져온다는 점은 기존의 ADO의 RecordSet과 비슷하지만 레코드를 가져온 후에 데이터베이스와의 연결을 끊어버린다는 점이 다릅니다. 사실 더 정확히 말하자면 DataAdapter 클래스가 레코드를 가져와서 DataSet에 레코드를 전달해 주고 연결을 끊어버린다는 것입니다. 또 이렇게 가져온 레코드는 XML 문서 형식으로 클라이언트의 메모리에 담아두고 처리하는데, 이런 이유에서 DataSet은 데이터 원본이 무엇인지 모르며 알 이유도 없는 것입니다.

이는 다시 말하자면 .NET Data Provider는 데이터베이스와 연결된 상태에서 모든 일을 하기 때문에 데이터베이스의 종류에 따라서 네임스페이스가 다르지만 DataSet의 경우는 데이터베이스가 무엇인지 전혀 상관없으므로 유일한 DataSet 클래스 하나로만 일을 수행합니다. 또, XML 문서 형식으로 처리하므로 데이터베이스가 아닌 것( 웹 서비스상에서 넘어온 XML 문서 )도 데이터베이스의 테이블을 처리하듯이 XML 문서를 처리할 수 있는 것입니다.

위의 그림에서 보면 DataSet 에는 DataTable이 있고 그 안에는 DataRow, DataColumn, Constraint가 있습니다. 또, 각각의 DataTable간의 관계를 정해주는 DataRelation이 있습니다. 자세히 들여다보면 데이터베이스의 구조와 비슷하다는 것을 알 수 있습니다. 기존의 ADO를 사용하던 개발자의 경우는 무엇인가 좀 다르다는 것을 느낄 것입니다. 바로 테이블이 여러 개 존재할 수 있습니다.

항상 느끼는 것이지만 이론적인 부분을 하면 왜 이리 졸리고 머리가 지끈거리는지... 여러분도 그러시나요? "야, 야~~~ 잔소리 좀 그만하고 진짜 소스 좀 보여줘 !!" 라고 하시는 분이 조~~기 계시는데.. 쫌만 기둘려 줘요..천리길도 한걸음 부터.. 기본을 알고 넘어가야죠.

오늘은 여기까지 하도록 하겠습니다. 다음 강좌에서는 실제로 위의 클래스들을 이용해서 스토어드 프로시저와 다시 한번 만나보도록 하겠습니다.여러분 이제 봄이 오는 것 같네요.. 모두 건강하세요 ~~

Writed By 깜찍이
HomePage : http://www.cuteguy.pe.kr


authored by


 
 
.NET과 Java 동영상 기반의 교육사이트

로딩 중입니다...

서버 프레임워크 지원 : NeoDEEX
based on ASP.NET 3.5
Creative Commons License
{5}
{2} 읽음   :{3} ({4})