ActiveConenction 이란 무엇인가? ActiveConnection이란 데이터베이스에 대한 활성화된 연결을 뜻한다. 이는 연결 문자열이 될 수도 있고, Connection 객체가 될 수도 있다. 이 속성을 통해 해당 객체는 ActiveConnection이 가리키는 데이터베이스에 대해 접근이 가능하게 된다. 해당 속성에 두 가지의 설정방법이 존재함에 따라 속성의 원리를 알아보자.
1. 연결 문자열을 사용하는 경우
많은 웹소스(특히 예전에 작성된 소스)들이 연결문자열을 통한 접근을 하고 있다. 필자 또한 다양한 페이지들에서 연결문자열을 사용한다. 연결 문자열을 쓰는 경우 웹소스가 간결해 지며, 스크립트 상에서 객체 관리가 쉬워지기 때문이다. 하지만, 연결문자열의 사용을 피해야 하는 경우가 반드시 있다. 객체에 연결문자열을 통해 ActiveConnection을 지정하는 소스를 살펴보고, 어떤 페이지에서 사용하는 것이 좋은지 알아보자.
| '연결문자열 생성 strConnectionString = "Provider=SQLOLEDB.1; Data Source=127.0.0.1; Initial Catalog=Northwind; User Id=sa; Password=dnpqwps;Network=dbmssocnt" '' Command 객체를 이용하는 경우 Set adoCmd = Server.CreateObject("ADODB.COMMAND") adoCmd.ActiveConnection = strConnectionString '' 중략 '' adoCmd.Execute Set adoCmd = Nothing '' RecordSet 객체를 이용하는 경우 Set adoRs = Server.CreateObject("ADODB.RECORDSET") '1) 첫번째 방법 adoRs.Open "실행명령문", strConnectionString, "커서타입", "락타입", "옵션" '' 중략 "" '2) 두번째 방법 adoRs.ActiveConnection = strConnectionString adoRs.CursorType = "커서타입" adoRs.LockType = "락타입" adoRs.Open "실행명령문" ''중략 ~~ adoRs.Close : Set adoRs = Nothing |
연결문자열을 통해 데이터베이스에 대한 연결을 활성화 시킨 것을 볼 수 있다. 이와 같은 방식으로 처리하는 경우 내부적으로는 어떤 일이 발생할까? 바로 Connection 객체의 생성과 해제 이다. 내부적으로 Connection 객체가 생성이 되며 데이터 처리 후(예를 들어 레코드셋 반환 후) 내부적으로 생성된 Connection 객체가 해제 되게 된다. 이러한 이유로 연결문자열을 사용하는 경우 주의해야 할 점이 발생하게 된다.
레코드셋을 생성하는 경우를 예로 들어 보자. 보통 웹페이지에서 하나의 레코드셋을 생성하게 된다. 이러한 경우에는 연결문자열을 통해 내부적으로 Conenction 객체를 생성한 후 레코드셋의 반환과 함께 바로 해제하게 된다. 이를 통해 소스는 간결해 지며, 따로 Connection 객체 관리가 필요하지 않게 된다. 하지만, 만약 한 페이지에서 2개 이상의 레코드셋이 필요한 경우는 어떻게 될까? 연결문자열을 이용하는 경우 필요한 레코드셋 만큼 내부적으로 Conection 객체가 2개가 생성되고 해제 되게 된다.
이처럼, 페이지 내에서 Command나 RecoredSet 객체를 사용하는 만큼 그때마다 Connection 객체가 생성, 해제가 반복된다. 이러한 경우 연결문자열의 사용을 피해야 한다. 필자의 경우 한 페이지에서 ActiveConnection 지정이 하나만 필요한 경우에만 대부분 연결문자열을 사용하고 있다. 물론 하나만 필요한 경우가 많기 때문에 연결문자열의 사용이 빈번한 것도 사실이다.
데이터베이스에 대한 연결이 2개 이상이 필요한 경우 Connection 객체를 통해 어떤 식으로 처리하는 것이 좋은 방법인지 예를 들어 보자.
2. Connection 객체를 사용하는 경우
| ''레코드셋 생성 함수 생성 Sub sbDataProcess(adoCon) Dim adoRs '객체 생성 Set adoRs = Server.CreateObject("ADODB.RECORDSET") adoRs.Open "실행명령문1", adoCon ''중략'' aodRs.Close adoRs.Open "실행명령문2", adoCon ''중략'' adoRs.Close : Set adoRs = Nothing End Sub ''커넥션 객체 생성 Set adoCon = Server.CreateObject("ADODB.CONNECTION") adoCon.Open "데이터베이스연결문자열(ConnectionString)" ''레코드셋 생성함수 호출 Call sbDataProcess(adoCon) ''커넥션 객체 해제 adoCon.Close : Set adoCon = Nothing |
페이지 상단에 2개의 레코드셋을 반환받는 함수를 생성하였다. 함수를 호출하기 전에 Connection 객체를 생성한다. 함수를 호출하면서 커넥션 객체를 Parameter로 전달한다. 함수내에서 해당 레코드셋을 반환 받은 후 함수는 종료 되며 그 후에 바로 Connection객체를 해제하여 불필요한 리소스 낭비를 없앤다. 이와 같이 사용하는 경우 Connection 객체는 하나만 생성되게 된다. 또한 함수 생성을 통해 소스를 구조화 하여 ADO 객체의 생성과 해제를 쉽게 컨트롤 할 수 있게 하였다. 이처럼 2군데 이상의 연결이 필요한 경우 Connection객체를 생성하여 처리하는 것이 좋은 방법이다.
페이지에서 데이터베이스와의 연결이 필요한 경우 필요한 개수와 해당 로직을 기반으로 적절한 방법을 통해 ActiveConnection 속성을 지정하여 불필요한 리소스 낭비를 막는 효율적인 페이지 구현을 하길 바란다.
출처 : [심의준의 개발노트]
'WEB > ASP / DotNet' 카테고리의 다른 글
| ASP의 디비연결객체 풀링에 대해서 (0) | 2007/06/07 |
|---|---|
| 이전 URL로 부터 검색어를 추출하기 (0) | 2007/06/07 |
| ActiveConnection 속성에 대한 이해 (0) | 2007/06/07 |
| IsClientConnected를 이용한 자원 관리 (0) | 2007/06/07 |
| Microsoft.XMLHTTP : ASP 에서 XML 문서를 보내자 (0) | 2007/06/07 |
| OLEDB 연결계정 설정 방법 (0) | 2007/06/07 |
TAG ActiveConnection
0 Trackback,
0 Comment,
:




최근에 달린 댓글
링크
최근에 받은 트랙백
태그목록