강좌 전 태오의 잡담> 이번 강좌는 판희완님(판유걸의 형? 설마~~)이 제공해 주시는 강좌입니다. 많은 도움이 되시길....
강좌 시작> 안녕하세요....앞으로 몇회에 걸쳐 이 강좌의 진향을 맡게된 판희완입니다.... 먼저 강좌를 진행하기 전에 이 강좌의 주제와 앞으로 진행해나갈 내용들에 대해 간단한 소개를 하도록 하겠습니다. 제가 생각하기에 이 강좌는 어느정도 ASP를 해오신 분이 보시면 아주 좋을 거라고 생각합니다. 그런 분들이라면 이해하시기에 그리 어려움이 없으실 거라고 생각합니다. ◈ 이 강좌의 주제 이 강좌의 주제는 미리 말씀드렸듯이 '중급규모 이상의 사이트 제작시 ASP 코딩 & Stored procedure 사용법' 입니다.. 자...그럼 왜 이런 제목을 붙여놓았을까요...^^ 뭐 이거 꼭 알아야 할까요? 결론부터 말씀드리자면 안들으셔도 별 무리 없습니다. 엇..그럼 왜 이런 강좌를 하냐구여? 소규모 사이트라면 문제가 없겠지만 사이트 규모가 커지면 작업속도를 빠르게 하기위해서 참여하는 개발자의 인원이 많아집니다... 또 ASP의 특성상 HTML과 스크립트가 혼합되어서 사용되게 되지요.. 그런데 개발자마다 자기 방식대로 코딩을 하고 있기 때문에 가뜩이나 어지로운 소스가 더 어지러워집니다. -_-;; 남이 짠 소스를 보기가 부담스러워지죠... 그런 문제점들을 해결해보고자 하는것이 이 강좌의 목적입니다. 사실 이 강좌에서 새로운 기술이나 기법은 전혀 없습니다. 단지 종합판이라고나 할까요... ◈ 앞으로의 강좌 진행 앞으로 강좌의 진행은 아래의 순서를 따르겠습니다. 1. ASP 페이지 구조 -- 함수화와 모듈화 2. Stored Procedure 의 구조화 자...간단하죠? 별로 어렵지 않겠죠? 네 ...별로 어렵지 않습니다. ^^ 1. ASP 페이지의 구조 자..백문이 불여일견이라고 먼저 소스를 볼까요? <%@ EnableSessionState=False%> <%option explicit%>
<% '*----------------------------------------------------------------------------* '* #100 변수 선언부 '*----------------------------------------------------------------------------* dim objRs dim i,j dim recordcount1 dim AllRec,cols,rows1
' call Page_Load() call get_Table1() call set_Table1() call Page_UnLoad() '*----------------------------------------------------------------------------* '* Function '*----------------------------------------------------------------------------* sub Page_Load() end sub '*----------------------------------------------------------------------------* sub Page_UnLoad() end sub '*----------------------------------------------------------------------------* sub get_Table1() set objRs = objCon.Execute("{Call SPCOMMON('pro00lst','','','','','','')}") end sub '*----------------------------------------------------------------------------* sub set_Table1() if not (objRs.EOF or objRs.BOF) then AllRec = objRs.GetString(2) rows1 = split(AllRec,chr(13)) recordcount1 = ubound(rows1) end if end sub '*----------------------------------------------------------------------------* %> <HTML> <BODY> </BODY> </HTML> |
이 소스를 보시면 아시겠지만 스크립트쪽과 HTML 쪽이 완전히 분리되어 있습니다. 아주 보기 쉽게 되어 있죠? 자 그럼 하나하나 설명을 해 볼까요? ########################################## '*------------------------------------------------------------------------* '* #100 변수 선언부 '*------------------------------------------------------------------------* dim objRs dim i,j dim recordcount1 dim AllRec,cols,rows1
' call Page_Load() call get_Table1() call set_Table1() call Page_UnLoad() ######################################### |
이 부분은 이 페이지 내에서 전역으로 쓰일 변수와 함수를 콜하는 부분입니다. 함수 이름만 보셔도 아시겠죠? Page_Load는 처음 페이지를 Load하면서 처리할 일들을 기술하는 함수이고요. get_Table1은 DB 에서 데이타를 가져오는 함수, set_Table1은 가져온 데이타를 변수에 setting 하는 함수, Page_UnLoad는 페이지를 서버와 연결이 끊어질때 해야할일을 기술하는 함수입니다. 그럼 데이타를 가져오는 부분과 셋팅하는 부분인 get_Table1과 set_Table1을 볼까요? '*----------------------------------------------------------------------------* sub get_Table1() set objRs = objCon.Execute("{Call SPCOMMON('pro00lst','','','','','','')}") end sub '*----------------------------------------------------------------------------* sub set_Table1() if not (objRs.EOF or objRs.BOF) then AllRec = objRs.GetString(2) rows1 = split(AllRec,chr(13)) recordcount1 = ubound(rows1) end if > end sub '*----------------------------------------------------------------------------* |
get_Table1은 Stored Procedure 를 이용해 데이타를 가져와서 objRs 변수에 할당합니다. 그리고 set_Table1은 가져온 데이타를 모두 배열에 넣습니다. AllRec = objRs.GetString(2) 에서 보시면 GetString 메소드를 이용해서 컬럼은 Tab키(chr(9))로 로우는 캐리지리턴(chr(13)) 으로 구분해서 (GetString 메소드에 대한 자세한 설명은 Taeyo님의 ASP & Database에 있습니다.) AllRec 변수에다 문자열로 저장합니다. 그리고 rows1 에 row 별로 배열로 저장하구여, rows1배열의 크기를 구해서 가져온 레코드의 총 갯수를 알아냅니다. 어라..지금 무슨 일이 일어난거죠? 네...현재 rows1배열에 DB에서 가져온 레코드들이 전부 저장이 되었습니다. 그럼 rows1 배열만 만지작 거리면 값들이 나오겠죠? 그러면 실제로 사용예를 볼까요? <%@ EnableSessionState=False%> <%option explicit%> <!--#INCLUDE FILE="lib/const.asp" --> <!--#INCLUDE FILE="lib/connect.asp" -->
<% '*----------------------------------------------------------------------------* '* #100 변수 선언부 '*----------------------------------------------------------------------------* dim objRs dim i,j dim recordcount1 dim AllRec,cols,rows1
' call Page_Load() call get_Table1() call set_Table1() call Page_UnLoad() '*----------------------------------------------------------------------------* '* Function '*----------------------------------------------------------------------------* sub Page_Load() end sub '*----------------------------------------------------------------------------* sub Page_UnLoad() set objRs = nothing objCon.close() set objCon= nothing end sub '*----------------------------------------------------------------------------* sub get_Table1() set objRs = objCon.Execute("{Call SPCOMMON('pro00lst','','','','','','')}") end sub '*----------------------------------------------------------------------------* sub set_Table1() if not (objRs.EOF or objRs.BOF) then AllRec = objRs.GetString(2) rows1 = split(AllRec,chr(13)) recordcount1 = ubound(rows1) end if end sub '*----------------------------------------------------------------------------* function print_List() for i = 0 to recordcount1 - 1 cols = split(rows1(i),chr(9)) %> <tr><td>cols(0)</td><td>cols(1)</td></tr> <% next end function '*----------------------------------------------------------------------------*
%> <HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> <table><%=print_List()%></table> </BODY> </HTML> |
새로운 함수가 추가되었네요? print_List ? 이건 뭐지? ^^ 이건 실제로 HTML부분에 찍어줄때 함수화를 하기 위해서 만들어준겁니다. '*----------------------------------------------------------------------------* function print_List() for i = 0 to recordcount1 - 1 cols = split(rows1(i),chr(9)) %> <tr><td>cols(0)</td><td>cols(1)</td></tr> <% next end function '*----------------------------------------------------------------------------* |
소스를 보시면 가져온 수만큼 for 문들 돌면서 row별로 컬럼을 cols 배열에 저장한후 처리하죠? 자...이해되셨나요? 그럼 잠깐 생각을 해볼까요? 이런 방식이 어떤 점에서 좋을까요? 네..일단 소스 보기가 편해집니다..남이 짠 소스라도 금방 이해할수 있고요.. 그 말은 곧 디버깅이 편해진다는 말과도 통해겠죠? 아무것도 아닌것 같지만 공동작업에 있어서는 굉장히 편해진답니다.
그럼 다음에는 Stored Procedure 의 구조화로 만나겠습니다.~~~ 안녕~~ 좋은 하루 되세요.. Back |