GetRows 메서드란 무엇이며 사용해야 하는 이유는 무엇인가? GetRows 메서드란 레코드셋을 하나의 배열로 변환시키는 메서드를 말한다. 즉 GetRows 메서드를 통해 우리는 레코드셋을 하나의 변수에 배열로 반환시킬 수 있다는 뜻이다. 그렇다면, 왜 우리는 이 메서드를 굳이 사용해야 하는 것일까?
게시판을 예로 들어보자. 필자가 보아온 대부분의 게시판들은 게시물 List를 생성할 때 ADO객체를 사용하여 레코드셋을 생성한 후 루프문을 통해 리스트를 생성하는 방식을 취하고 있다.
아래 샘플 코드를 보자.
<%
strTempSql = "SELECT * FROM [테이블]"
SET objRs = Server.CreateObject("ADODB.RECORDSET")
objRs.Open strTempSql, [커넥션스트링], adOpenForwardOnly, adLockReadOnly, adCmdText
If objRs.Eof Then
Do Until objRs.EOF
'==리스트 생성==
objRs.MoveNext
Loop
End If
objRs.Close : Set objRs = Nothing
%> |
위 코드를 보고 무엇이 잘못되었나 하고 의아해 하는 독자들도 있을 것이다. 위 코드는 가장 대중적인 방법으로 많은 ASP책에서 예로 사용하고 있는 기법이며, 많은 개발자들이 위 형식을 취하고 있다.
그렇다면, 위 코드의 단점은 무엇일까? 바로 리스트를 생성하는 동안 레코드셋 객체를 계속 참조해야 한다는 것이다. 위와 같은 코드가 여러 곳에 배치되어 있는 페이지를 생각해 보라. 동시접속자가 많아 질수록 성능은 극도로 나빠질 것이다. 이를 해결하기 위한 방법으로 GetRows 메서드의 사용을 고려해 보아야 한다.
위 샘플코드에 GetRows 메서드를 사용해 보자.
<%
strTempSql = "SELECT * FROM [테이블]"
SET objRs = Server.CreateObject("ADODB.RECORDSET")
objRs.Open strTempSql, [커넥션스트링], adOpenForwardOnly, adLockReadOnly, adCmdText
If objRs.Eof Then
arrRows = objRs.GetRows()
End If
'GetRows 메서드 사용 후 객체를 바로 해제시킨다.
objRs.Close : Set objRs = Nothing
'GetRows를 이용하여 배열로 반환이 되었다면 리스트를 생성한다.
If IsArray(arrRows) Then
'Ubound를 사용하여 크기를 알아내자
For intI = 0 To Ubound(arrRows, 2)
'== 리스트를 생성한다.
Next
End If
%> |
GetRows 메서드를 사용하여, 레코드셋 객체에 대한 참조를 바로 해제 시키는 것을 볼 수 있다.
GetRows 메서드를 사용하여 배열로 반환 후 배열의 특성을 사용하여 리스트를 생성함으로써, 웹 서버의 자원 낭비를 감소시키게 되었다. 이로 인해 웹사이트는 더욱 빠른 성능을 사용자에게 제공할 수 있을 것이다. 객체가 차지하는 리소스를 얼마나 빨리 반환해 주느냐에 따라 페이지의 성능은 크게 좌우된다는 것을 알 것이다.
프로그래밍을 하면서 끊임없이 고민해야 할 점은 “어떻게 하면 최소의 비용으로 최대의 성능을 낼 수 있을까?” 라는 부분이다.
|