728x90
아래의 내용은 ASP웹 응용 프로그램의 성능을 높이기 위한 팁을 설명한 것이다.

[추가 정보]

1. 가급적 Session 변수를 사용하지 않는다.

Session 변수는 클라이언트 사이드에서 쿠키에 의해 유지되기 때문에, 웹 사용자가 브라우저상에서 쿠키의 사용을 Off했다면 Session변수는 작동되지 않을 것이다. 또한 Session변수는 오랜 시간 동안 유지된다.(새로운 사용자가 웹 서버를 들어왔을 때 생성되어 사용자의 세션이 유지되는 동안 살아있다.) 그러므로 만약 Session변수에 많고 복잡한 개체를 저장한다면 성능 저하를 초래할 것이다.(특히 사용자가 많아지면 많아질 수록) 꼭 필요 시에만 Session변수를 사용하고 사이즈가 큰 Dynamic Array나 ADO 개체, Business개체를 Session변수로 사용하지 않도록 한다.

2.DataBase 성능을 높이기 위해서 ASP에서 SQL 쿼리문을 직접 사용하기 보다는 Stored Procedure를 이용한다.

ASP 내에서 사용된 Database와 관련된 작업들의 성능을 높이기 위한 좋은 방법은 ASP 레벨에서 SQL 쿼리문을 실행하지 않고 저장 프로시저(Stored Procedure)를 사용하는 것이다. 3-Tier 응용프로그램에서 가장 좋은 접근 방법은 ASP에서 저장 프로시저를 호출하는 비즈니스 개체의 메서드를 호출하는 것이다.
이 경우 Middle-Tier인 MTS Component에서는 코드의 유지보수가 훨씬 쉬워지고, DataBase-Tier에서는 SQL 저장 프로시저가 한번 실행되면 SQL서버의 메모리에 캐쉬되기 때문에 다음 번에 실행될 때 훨씬 속도가 빨라지는 장점을 가진다.

3. Connection Pooling을 On한다.

대 부분의 ASP 웹 응용프로그램이 데이터베이스 작업과 연관되어 있기 때문에 데이터베이스 작업의 성능을 높이는 것은 전체 ASP웹 응용프로그램의 성능과 관련이 깊다. 데이터베이스에 연결하기 위해 드는 시간과 리소스는 큰 비중을 차지한다. 그러므로 데이터 연결이 필요한 매 페이지마다 새로운 데이터베이스 연결을 하고 페이지가 실행을 마친 다음에 연결이 삭제되는 것은 특히 웹 서버에 동시 사용자가 많은 경우 성능은 매우 떨어질 것이다. Connection Pooling은 특정 페이지에서 사용된 Connection을 Pool에 가지고 있다가, 이 것이 필요할 때 재 사용할 수 있게 하는 것이다.
ASP 웹 응용프로그램이 Connection Pooling을 사용하게 하려면 레지스트리에서 설정을 확인해야 한다.
IIS 3.0인 경우에는 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC\ASP\Parameters 에서 StartConnectionPool 엔트리의 값을 1로 설정해야 한다. IIS 4.0에서는 디폴트로 Connection Pooling이 On 되어 있다.

또한 SQL 서버를 사용하는 경우에는 Network Library를 TCP/IP Socket로 설치해야 한다.

4.Option Explicit를 사용한다.

Option Explicit 옵션을 사용하게 되면, 선언되지 않은 변수는 에러를 발생한다. 선언되지 않은 로컬 변수는 선언된 변수보다 2배 정도 속도가 느리다. 이 옵션을 On함으로써 속도 뿐만 아니라 코드상에서 Mis-Spelling으로 인한 에러를 쉽게 발견할 수도 있다.

5.생성된 개체를 Close하고 파괴하라.

생성한 개체를 쓰고 난 후에는 꼭 그 개체를 Close하고 메모리에서 개체에 대한 인스턴스를 내려야 한다. 특히 ADO 개체인 경우 Connection Pooling이 사용되면 가능한 한 빨리 ADO Connection 개체를 Pool로 되돌려 주는 것이 좋기 때문에 명시적으로 Close와 Set 변수명 = Nothing을 사용해야 한다. 만약 ADO Connection개체를 Close하지 않고 Nothing만 하면 Connection Pooling이 적용되지 않으므로 Close와 Nothing을 모두 명시해야 한다.

6. ADO의 Getstring을 사용하라.

데 이터베이스의 쿼리를 실행하여 웹 페이지에 표시하는 작업은 레코드 수가 많아질 때 ASP의 스크립트 프로세싱 타임을 느리게 하는 원인이 된다. 예를 들어 테이블에 데이터를 나타낼 때 레코드셋의 EOF를 확인하여 DO…LOOP을 돌려 데이터를 테이블에 표시했다. 하지만 ADO 2.0에서 제공하는 GetString을 이용하면 loop이나 Eof의 Check없이 단 한번의 Response.write로 데이터를 테이블에 표시할 수 있게 된다.

7. Collection의 값을 로컬 변수로 복사한다.

사 용자가 ASP Collection의 값을 반복적으로 사용할 필요가 있다면 그 값들을 로컬 변수로 저장한다. 이렇게 함으로써 사용자가 Collection의 값을 사용할 때마다 서버가 Collection에서 값을 찾아오는 작업에 대한 시간을 적게 줄임으로써 스크립트 실행속도를 향상시킨다. 예를 들어 사용자는 다음과 같이 코딩할 수 있을 것이다.
If Request.QueryString("Name") = "Frank" Then
...
End If

If Request.QueryString("Name") = "Steve" Then
...
End If

Response.Write("Your name is " & Request.QueryString("Name"))

하지만 위의 코드에서 사용자가 Request개체를 사용할 때마다 ASP는 Querystring변수명을 읽어들여야 한다. 사용자는 다음과 같이 코드를 수정하므로써 Querystring으로부터 값을 한번만 읽어오게 할 수 있다.
Dim strName
strName = Request.QueryString("Name")

If strName = "Frank" Then
...
End If

If strName = "Steve" Then
...
End If

Response.Write("Your name is " & strName)

8. 데이터베이스 연결에 대해서 include파일을 이용하라.

많 은 ASP개발자가 반복작업을 피하기 위해서 데이터베이스에 연결하는 ADO코드를 Session변수를 이용하는 경우가 있다. 하지만 위에서 언급한 바와 같이 Session변수에 ADO 개체를 할당하는 것은 권장되지 않는다. 이를 위한 가장 간단한 방법은 매 페이지마다 반복되는 데이베이스 연결 코드를 include파일에 작성하여 이 코드가 필요한 페이지마다 Include파일을 명시해주는 것이다.
예를 들어 다음은 코드를 가진 scripts/dbconn.asp라는 페이지를 만든다.
<%
Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString = "DSN=Blah"
objConn.Open
%>
그 다음 데이터베이스 연결이 필요한 매 페이지에 다음의 한 라인을 추가해주면 된다.



9. <%@ ENABLESESSIONSTATE = False %>

ASP웹 페이지의 성능을 높이는 방법중의 하나는 @ENABLESESSIONSTATE 를 False로 설정하는 것이다. 만약 ASP페이지가 Session변수를 사용하지 않는다면 ASP 페이지의 가장 윗부분에 꼭 다음을 명시한다.
<%@ ENABLESESSIONSTATE = False %>

10.ADO 상수 사용 시 Numeric 상수 대신에 Named 상수를 사용한다.

ADOVBS.INC를 Include하여 ADO의 Named 상수를 사용하는 것이 성능 향상에 도움이 된다.

11. 클라이언트-사이드 폼 Validation을 사용한다.

사 용자가 폼에 데이터를 입력하였을 때, 유효한 데이터가 입력되었는지 확인하기 위해서 클라이언트-사이드 스크립트를 사용하거나 ASP의 서버-사이드 스크립트에서 각 필드의 값을 확인할 수 있다. 서버 사이드 스크립트를 사용하는 경우 유효하지 않은 데이터가 입력된 경우 다시 ASP파일로 Redirection이 일어난다, 이 작업은 서버에 Round Trip을 발생시키기 때문에 성능에 좋지 않다. 클라이언트-사이드 Validation을 이용하여 폼이 Submit될 때 동시에 데이터 Validation이 일어나게 하는 것이 좋다.

--------------------------------------------------------------------------------

(주)마이크로소프트 KNOWLEDGE BASE내에서 제공되는 정보는 어떤 종류의 보증도 하지 아니하고 "있는 그대로"
제공됩니다.(주)마이크로소프트는 시장성에 대한 보증 및 특정한 목적을 위한 적합성에 대한 보증을 포함하여
모든 명시적, 또는 묵시적 보증을 배제합니다.(주)마이크로소프트 또는 그 공급자들은 직접적 손해, 간접적 손해, 부수적 손해,
결과적 손해, 영업이익의 상실 또는 특별한 손해에 대하여 (주)마이크로소프트 또는 그 공급자들이 그 손해의 가능성을
통지받은 경우에도 아무런 책임을 지지 않습니다.경우에 따라서는 결과적 손해 또는 부수적 손해의 배제 또는 책임의 제한을
인정하지 않으므로 위와 같은 제한이 적용되지 않을 수도 있습니다.

저작권 (주)마이크로소프트 1994 - 2000.
728x90

+ Recent posts