최근에 ASP 프로젝트를 진행하면서 가장 초창기에 생각했던 부분입니다.
타 프로그램과 달리, ASP는 하도 구식 기술인지라, 특정 프레임워크가 존재하는 것도 아니고.. 해서 요즘 웹 프로그램의 화두가 되고 있는 MVC 모델을 적용하기가 쉽지는 않지요.
스프링 프레임워크만 봐도 아주 훌륭하게 독립적인 모델이 존재하고 있지 않습니까? 그런데 ASP에서는 이건 뭐 가동되고 있는 객체가 없으니.. 전문가들이야 COM 객체를 활용해서 잘 사용하겠지만, 초보인 입장에서 그래도 ! MVC 비슷하게 구동하고 싶은게 욕심이긴 하더군요.
뭐 사실 MVC를 잘 모르는 입장에서 그냥 뭐랄까.. 효율적인 ASP 웹 프로그램의 설계라고 말하고 싶네요.
ASP를 설계하기 위해서는.. 음.. 우선, 웹 프로그램이 다 그렇듯이 대다수는 뭐 게시판과 같은 형태로 돌아가게 됩니다. 그럼 결국 모든 것들이 list / view / write 로 구분될 수 있지요. 수정 삭제요? write와 view로 구분될 수 있겠지요.
그럼 MVC와 같은 패턴을 적용하기 위해서는? 우선 각 사이트마다 고유의 기능을 처리할 수 있기 때문에 우리는 컨트롤을 생성해 주어야 합니다.
결국 컨트롤도 param값과 파일명으로 구분할 수 밖에 없는데요 예를 들면..
<% '클래스 생성 Set dFunc = NEW FUNC_FD_VIEW 'Param 정보 받기 Dim uno : uno = Request("uno") Dim status : status = Request("status") Dim comment Dim cuno Dim wtype If status = "view" Then '글보기 Call dFunc.GetFDView(uno,status) ElseIf status = "comment_write" Then ' 코멘트 쓰기 comment = Request("comment") wtype = Request("wtype") Call dFunc.CommentWrite(uno,comment,wtype) ElseIf status = "comment_modify" Then ' 코멘트 수정 comment = Request("modComment") wtype = Request("modWtype") cuno = Request("cuno") Call dFunc.CommentModify(uno,cuno,comment,wtype) ElseIf status = "comment_delete" Then ' 코멘트 삭제 cuno = Request("cuno") Call dFunc.CommentDelete(uno,cuno) ElseIf status = "delete" Then ' 글 삭제 Call dFunc.DelFD(uno) Else response.write "”
End if
%>
뭐 이런식으로 구분할 수 밖에 없다는 것입니다.
(사실은 저게 Controller의 맞는 표현일 수도 있어요.)
그다음에 우리는 list / view / write 에 해당되는 클래스들을 만듭니다.
참고로, ASP의 클래스는 c++의 클래스를 생각하시면 오산입니다. 프로그램 실행과 동시에 각 클래스의 객체가 움직이는 것이 아니라, 각 페이지마다 초기값 세팅부터 해서 처음부터 전 과정을 거쳐야만 클래스가 다시 작동할 수 있습니다.
말그대로 저 클래스는 함수의 뭉퉁구리 일 뿐입니다! 그 이외에 c++과 같은 기능은 절때로 없다는 것입니다.
하나의 게시판을 예로 들면
List 에서는
– Search
– Listing
– Paging
View 에서는
– Viewing
– Hitting
– Deleting
– Comment View
– Comment Write
– Comment Modify
Write 에서는
– Write
– Modify
– Reply Write
– Attach File
이러한 기능들을 한다고 치면, 이에 해당되는 기능들을 함수로 구현해서 각각의 list/view/write 클래스에 넣고 우리는 메뉴 구분 / 파일 구분 / DB구분 등으로 다양한 게시판들을 처리할 수 있다는 것입니다.
그리고, 웹 프로그램인 만큼, input hidden 값으로 param값들을 각 페이지마다 공통된 것들은 가지고 있어야 겠지요. 아니면, ASP의 Common에서 직접 생성을 해주던가, 이런 식으로 처리하는 것이 좋습니다.
이렇게 처리되면 최종적으로는 파일/폴더 구조가 대충 이렇게 됩니다.
Depth-1 | Depth-2 | File | 설명 |
admin | 관리자 페이지 폴더 | ||
css | |||
default.css | 스타일 시트 파일 | ||
flash | 플래쉬 파일 모음 | ||
images | 이미지 폴더 | ||
board | 게시판용 이미지 | ||
common | 공통 이미지 | ||
js | 각종 스크립트 파일 | ||
include | |||
function | |||
func_board.asp | 게시판 관련 함수 모음 | ||
func_common.asp | 공통 인클루드 파일 | ||
classes | 클래스 인클루드 파일 모음 | ||
class.list.asp | LIST 용 클래스 | ||
class.view.asp | VIEW 용 클래스 | ||
class.write.asp | WRITE 용 클래스 | ||
structure | 구조체 인클루드 파일 모음 | ||
data.asp | 데이터 구조 클래스 | ||
각종 서비스 페이지 폴더 | |||
index.asp | 메인 화면 |
따지고 보면 별 것 아니지만.. ASP를 설계할 떄 참조가 되었으면 좋겠네요 🙂