태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
페이지를 읽고 있습니다. ( 아쿠아바다's Blog )
분류 전체보기 (769)
쉐어포인트 (24)
Exchange (12)
SQL (121)
XML (36)
WEB (294)
O / S (97)
삶의향기 (162)
기획 (19)
RSS 피드(IE 7.0부터 기본 지원됩니다. 이전 버전 사용자는 접합한 툴을 사용하세요!!)

ActiveConnection 속성에 대한 이해

WEB/ASP / DotNet 2007/06/07 17:49 by 아쿠아바다
Command와 Recordset 객체를 이용하여 데이터베이스를 처리 할 때 ActiveConnection속성을 반드시 이용하게 된다. 이때 사용되는 Command객체와 RecordSet객체의 ActiveConnection속성의 개념과 성능에 대해 소개하고자 한다.

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 속성을 지정하여 불필요한 리소스 낭비를 막는 효율적인 페이지 구현을 하길 바란다.



출처 : [심의준의 개발노트]

좀더 흥미로운 내용이 많이 있습니다.. HOME > WEB/ASP / DotNet를 확인하세요
0 Trackback, 0 Comment, :
1  ... 291 292 293 294 295 296 297 298 299  ... 769 
Statistics Graph
Total : 557,403 Today : 33