개체 범위에 따라 해당 개체를 사용할 수 있는 스크립트가 결정됩니다. 기본적으로 개체 인스턴스를 만들면 개체에 페이지 범위가 포함됩니다. 같은 ASP 페이지에 있는 모든 스크립트 명령에서 페이지 범위 개체를 사용할 수 있습니다. 즉, .asp 파일이 요청 처리를 끝내면 개체가 해제됩니다. 대부분의 개체에 권장되는 범위는 페이지 범위입니다. 그러나 개체 범위를 다른 페이지의 스크립트에서 액세스할 수 있도록 바꿀 수 있습니다. 이 항목에서는 페이지 범위 개체로 작업하는 방법과 개체 범위를 바꾸는 방법에 대해 설명합니다.
ASP 페이지에서 Server.CreateObject나 HTML <OBJECT> 태그를 사용하여 만든 개체는 해당 페이지에서만 유효합니다. 이러한 개체는 해당 페이지의 모든 스크립트 명령에 액세스할 수 있으며 ASP가 페이지 처리를 완료할 때 해제됩니다. 그러므로 개체에는 페이지의 범위(또는 수명)가 있습니다.
일반적으로 루프 안에서는 개체를 만들지 말아야 합니다. 루프 안에서 개체를 만들어야 하는 경우에는 개체에서 사용하는 리소스를 직접 해제해야 합니다.
<%
Dim objAd
For i = 0 To 1000
Set objAd = Server.CreateObject("MSWC.AdRotator")
.
.
.
objAd.GetAdvertisement
.
.
.
Set objAd = Nothing
Next
%>
세션 범위 개체는 응용 프로그램에서 세션이 새로 시작될 때마다 만들어져서 세션이 끝날 때 해제됩니다. 그러므로 활성 세션마다 각각 하나의 개체가 있습니다. 세션 범위는 여러 스크립트에서 호출되지만 한 사용자 세션에 영향을 주는 개체에 사용됩니다. 필요한 경우에만 개체에 세션 범위를 지정해야 합니다. 스레딩 모델은 개체의 성능과 보안 컨텍스트에 영향을 주므로 세션 범위를 사용하는 경우에는 해당 개체를 제공하는 구성 요소의 스레딩 모델을 알아야 합니다. 자세한 내용은 이 항목의 고급 정보: 성능 문제를 참조하십시오.
개체에 세션 범위를 지정하려면 개체를 ASP Session 기본 제공 개체에 저장합니다. Global.asa 파일에서 HTML <OBJECT> 태그를 사용하거나 ASP 페이지에서 Server.CreateObject 메서드를 사용하여 세션 범위 개체의 인스턴스를 만들 수 있습니다.
Global.asa 파일에서 RUNAT 속성(Server로 설정) 및 SCOPE 속성(Session으로 설정)으로 확장된 <OBJECT> 태그를 사용할 수 있습니다. 다음 예제는 브라우저 기능 구성 요소의 Browser Type 개체에 대한 세션 범위 인스턴스를 만듭니다.
<OBJECT RUNAT=SERVER SCOPE=Session ID=MyBrowser PROGID="MSWC.BrowserType"> </OBJECT>
개체를 Session 개체에 저장하면 응용 프로그램의 모든 페이지에서 해당 개체를 액세스할 수 있습니다. 아래 명령문은 이전 예제의 <OBJECT> 태그에 의해 만들어진 개체 인스턴스를 사용합니다.
<%= If MyBrowser.browser = "IE" and MyBrowser.majorver >= 4 Then . . .%>
ASP 페이지에서 Server.CreateObject 메서드를 사용하여 개체를 Session 기본 제공 개체에 저장할 수 있습니다. 다음 예제는 Session 개체에 Browser Type 개체의 인스턴스를 저장합니다.
<% Set Session("MyBrowser") = Server.CreateObject("MSWC.BrowserType") %>
브라우저 정보를 다른 .asp 파일에 표시하려면 먼저 Session 개체에 저장된 BrowserType 개체의 인스턴스를 검색한 다음 Browser 메서드를 호출하여 브라우저 이름을 표시합니다.
<% Set MyBrowser = Session("MyBrowser") %>
<%= MyBrowser.browser %>
<OBJECT> 태그로 선언한 개체는 .asp 파일의 스크립트 명령에 의해 참조될 때까지 인스턴스가 만들어지지 않습니다. 그러나 Server.CreateObject 메서드는 즉시 그 개체의 인스턴스를 만듭니다. 그러므로 <OBJECT> 태그는 세션 영역 개체에 대해 Server.CreateObject 메서드보다 뛰어난 확장성을 제공합니다.
응용 프로그램 범위 개체는 응용 프로그램이 시작할 때 만들어지는 개체의 단일 인스턴스입니다. 이 개체는 모든 클라이언트 요청에 의해 공유됩니다. Page Counter 구성 요소의 개체와 같은 일부 유틸리티 개체는 응용 프로그램 영역에서 더 뛰어난 성능을 제공하지만, 일반적으로 다음 절에서 제안한 대안을 사용합니다. 또한 스레딩 모델은 개체의 성능 및 보안 컨텍스트에 영향을 줍니다. 이 항목의 고급 정보: 성능 문제를 참조하십시오.
개체에 응용 프로그램 범위를 지정하려면 그 개체를 ASP Application 기본 제공 개체에 저장합니다. Global.asa 파일의 <OBJECT> 태그를 사용하거나 ASP 페이지에서 Server.CreateObject 메서드를 사용하여 응용 프로그램 범위 개체 인스턴스를 만들 수 있습니다.
Global.asa 파일에서 RUNAT 속성(Server로 설정) 및 SCOPE 속성(Session으로 설정)으로 확장된 <OBJECT> 태그를 사용할 수 있습니다. 예를 들어, 다음 예제는 <OBJECT> 태그를 사용하여 Ad Rotator 개체의 응용 프로그램 범위 인스턴스를 만듭니다.
<OBJECT RUNAT=SERVER SCOPE=Application ID=MyAds PROGID="MSWC.AdRotator"> </OBJECT>
응용 프로그램 상태에 Ad Rotator 개체를 저장한 다음에는 응용 프로그램의 모든 페이지에서 다음과 같은 명령문을 통해 액세스할 수 있습니다.
<%=MyAds.GetAdvertisement("CustomerAds.txt") %>
또는 다음 예제에서와 같이 .asp 파일에서 Server.CreateObject를 사용하여 Application 기본 제공 개체에 개체 인스턴스를 저장할 수 있습니다.
<% Set Application("MyAds") = Server.CreateObject("MSWC.Adrotator")%>다음과 같이 응용 프로그램 상태에서 Ad Rotator 개체의 인스턴스를 검색하여 응용 프로그램의 .asp 파일에 광고를 표시할 수 있습니다.
<%Set MyAds = Application("MyAds") %> <%=MyAds.GetAdvertisement("CustomerAds.txt") %>일반적으로, 사전 개체나 레코드 집합처럼 초기화하는 데 오랜 시간이 걸리는 항목 또는 개체에 대해서는 주로 응용 프로그램이나 세션 상태를 사용하게 됩니다. 그러나 세션이나 응용 프로그램 상태의 개체가 메모리 또는 데이터베이스 연결 등 너무 많은 리소스를 요구하는 경우에는, 이러한 개체를 구현할 수 있는 다른 방법을 찾아야 합니다. 예를 들어, 구성 요소의 스레딩 모델은 사용자가 해당 구성 요소에서 만든 개체, 특히 세션이나 응용 프로그램 범위가 지정된 개체의 성능에 영향을 줍니다.
대부분의 경우, 응용 프로그램이나 세션 범위 개체를 만드는 것보다, 해당 페이지 수준에서 만들어진 개체로 정보를 전달하는 세션이나 응용 프로그램 범위 변수를 사용하는 것이 더 좋습니다. 예를 들어, ADO Connection 개체의 경우, 오랜 시간 동안 연결된 상태로 남아 있어 스크립트가 더 이상 연결 풀링을 이용할 수 없게 되므로 세션이나 응용 프로그램 범위를 지정하지 말아야 합니다. 그러나 Session 또는 Application 기본 제공 개체에 ODBC 또는 OLE DB 연결 문자열을 저장하고 해당 문자열에 액세스하여 페이지에서 만든 Connection 개체 인스턴스에 속성을 설정할 수 있습니다. 이러한 방법으로 자주 사용하는 정보를 세션이나 응용 프로그램 상태에 저장해 두고 필요한 경우에만 해당 정보를 사용하는 개체를 만들 수 있습니다. 변수 범위 지정에 관한 자세한 내용은 변수 및 상수 사용을 참조하십시오.
새 개체의 속성과 메서드를 만들고 초기화하는 생성자 기능을 정의하여 JScript 개체를 만들 수 있습니다. 개체 인스턴스는 스크립트가 new 연산자를 사용하여 생성자를 호출할 때 만들어집니다. 사용자 정의 JScript 개체는 ASP 서버쪽 스크립트에서 지원되며 페이지 범위를 지정하는 것이 좋습니다. 그러나 사용자 정의 개체에 응용 프로그램 범위는 지정할 수 없습니다. 또한 사용자 정의 JScript 개체에 세션 범위를 지정하면 개체의 기능에 영향을 줄 수 있습니다. 특히 개체에 세션 범위를 지정하면 다른 페이지의 스크립트에서 해당 개체의 속성을 액세스할 수는 있지만 그 메서드를 호출할 수는 없습니다. 또한 사용자 정의 JScript 개체에 세션 범위를 지정하면 웹 응용 프로그램 성능에도 영향을 줄 수 있습니다.
구성 요소의 스레딩 모델은 웹 사이트 성능에 영향을 줄 수 있습니다. 일반적으로 세션 및 응용 프로그램 상태에서 저장할 경우, .asp 파일에서 가장 사용하기 적합한 개체는 Both라고 표시된 개체입니다. 단일 스레드, 아파트, 빈 스레드 개체는 권장되지 않습니다.
사용하는 개체의 스레딩 모델을 제어할 수 없는 경우도 있으므로 다음 지침을 통해 최상의 성능을 얻으십시오.