[C# 강좌 - 38] ADO 데이터 베이스 - 3


Study/C#  2012. 10. 12. 09:00

안녕하세요 개발자 명월입니다.


이번 포스팅에서는 Reader,Adapter 의 차이에 대해서 알아보도록하겠습니다.

 

먼저 테이블를 만들어서 데이터를 넣어보도록 하겠습니다.

 

 

60만건을 입력해 보겠습니다.

(팁: 위에는 지금 60만건을 쿼리문으로 입력하여 넣었습니다만 시간은 꽤 걸릴 것입니다.

 

 

이런 식으로 여러 쓰레드로 밀어넣으면 DBMS에서는 최대 커넥션으로 작업을 하기 때문에 쿼리문에서 작업한 것 보다는 상당히 빨리 작업 할 수 있습니다. 다만 상용 디비에 이런식으로 Insert 하면 DB가 멈춰버릴 수 있으니깐 사용하지 않는 편이 좋습니다.)

 

자 이제 60만건을 넣은 것을 Reader 와 Adapter 로 조회해 보겠습니다.

 

Reader 측정

 

 

1초 걸렸습니다.

 

Adapter 측정

 

 

3초나 걸렸습니다. 무려 3배의 차이가 나오네요.

 

Reader가 춸씬 빠른 속도로 나옵니다. 그럼 Reader를 사용해야 하겠지 라고 생각하겠지만 Adapter 는 DataSet으로 받아오기 때문에 데이터를 아주 유용하게 사용할 수 있습니다. 그 위력은 Winform 에서 나오게 되지요.

다음 장 부터는 Winform 강좌이니 이 부분은 그 때 더 보충을 하겠습니다.

 

그럼 Reader 와 Adapter 의 용도가 잡힙니다. Web같은 데서는 데이터를 가져오면 수정이 없습니다. 정확히 이야기 하면 데이터를 가져와서 Web을 날리고 나면 커넥션이 종료된다는 의미입니다. 물론 데이터를 다시 요청해서 재 가공을 하여 수정을 하지만 가져온 데이터를 그대로 수정하진 않습니다.

 

물론 ASP.NET 객체, 즉 DataGrid, combobox 등은 DataSet으로 정보를 읽어 드리기는 하나 통상적인 이야기에는 Reader를 가장 많이 사용하게 되어있습니다.

 

그러나 winform 같은 경우는 이야기가 약간 다름니다. 데이터를 한번에 가져와서 수정하는 경우가 많이 있지요. (실시간 처럼 보여지기 위해) 그럴 때마다 insert , Select 커넥션을 일으킨다면 엄청난 커넥션이 일어날 지도 모릅니다.

그럴 때는 DataSet 에 데이타 베이스와 비슷한 형식으로 데이터를 가두고 사용하게 되면 사용자는 그 차이를 못 느낍니다.

 

마지막으로 Reader의 가장 큰 단점은 Connection 을 많이 일으킵니다. 즉 Connection 충돌이 일어나 에러를 만들어 낼 확율이 있습니다.(이 말은 과거 하드웨어 사양이 낮을 때 이야기 입니다. 제가 커넥션 충돌을 일으키려고 일부러 커넥션을 무리하게 해도 충돌이 안 일어나네요.. 즉 DBMS 도 많이 좋아 진 이유지만 결정적인건 하드웨어 성능이 좋아져서 커넥션 충돌은 없으리라 생각됩니다.)

 

솔직히 저도 포스팅을 하면서 많이 느낀게 많습니다. 저는 어딜가든 Adapter 객체를 권장합니다. 용도 면에 있어서 다목적이고 또 커넥션이 짧기 때문에 충돌이 적습니다. 그러나 Connection 의 문제가 없다고 한다면 어쩌면 Reader 가 Adpater 보다 더 나을 지도 모르겠습니다.(속도가 현저하게 빠르기 때문입니다. 프로그램에서의 1초 차이는 엄청난 겁니다.) 저도 이 부분은 조금 더 공부를 해야하겠습니다.

 

참고 소스 : Blog20121011.zip