안규 공부방

ACTIVE SERVER PAGE > asp 성능 향상법

등록일 : 2017-07-04 18:26 조회수 : 94,143


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

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

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

  7.08.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로 설치해야 한다.

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

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

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

  7.08.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)


  7.08.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
	%>



그 다음 데이터베이스 연결이 필요한 매 페이지에 다음의 한 라인을 추가해주면 된다.
 
※ 혹시 도움이 되셨다면 댓글에 한마디 남겨주세요!
작성자   비밀번호
자동글 방지     (자동글 방지 기능입니다.)
내용   댓글달기 
이메일 문의 : cak0280@nate.com  
Copyright 2000 By ENTERSOFT.KR All Rights Reserved.