여러분들은 프로그램을 구현할 때 이렇게 짤 수도 있고 저렇게 짤 수 도 있습니다. 하지만, 같은 기능을 구현하더라도 소스코드를 보면 한 사람은 굉장히 간결하게 되어 있고, 다른 한 사람은 복잡하게 되어있습니다. 복잡하게 되어 있다는 것은 그 사람은 나름대로 열심히 했지만, 별루 좋지 않은 것이죠. 마치 프로그램을 짤 때 요령이 있는 사람과 그렇지 않은 사람의 차이라고 할 수 있죠. 또, 모든 프로그램이 다 그렇듯이 같은 구현된 결과가 같다고 하더라도 소스코드를 살펴보면 제각기 다르다는 것을 알 수 있습니다. 일종의 프로그래머의 개성이라고나 할까? 하옇튼, 같은 프로그램이라고 해도 성능이나 기능이 더 뛰어나도록 최적화시켜 구현하는 것이 또하나의 프로그램을 평가하는 중요한 관점입니다. 이런 말을 왜 하냐구요? 왜냐면, 우리는 잘 몰라서 혹은 생각이 거기에 미치지 못해서 평소에 프로그래밍시 쉽게 구현할 수 있는 것을 어렵게 짜는 경향이 있기 때문입니다. 여기서는 우리는 이러한 점을 감안해서 가장 기본적인 것부터 새로운 마음으로 ASP 프로그램의 팁과 테크닉을 키워봅시다.

성능향상을 위한 알아두면 좋을 ASP 프로그램 Tips

여기서 설명하는 내용은 MSDN이나 다른 여러 사이트의 게시판에서도 여기에 대한 내용을 많이 올려 놓아 있습니다. 참고하시구요. 저는 초보자를 위한 것이기에 좀더 쉬운 내용에 해당하는 몇가지 간단한 것들에 대해 쉽게 나름대로 정리해 보겠습니다.

1. Session변수를 꼭 필요할 때만 사용합시다.

세션(Session)변수는 클라이언트 즉, 사용자 한명과 서버를 일대일로 연결되어 있는 전역변수입니다. 즉, 그 사용자가 웹서버에 접근했을 때 생성되어, 브라우저를 종료할때까지 살아있습니다. 물론, 서버측에서 강제로 종료시킬 수도 있지만, 보통은 그렇죠. 만약, 많은 사용자들이 서버에 접근한다면, 세션변수에 의한 서버의 부하는 엄청 늘어나게 됩니다. 이를 대비하여 되도록 세션변수의 사용은 피하되 가급적 간단한 값을 저장하라는 것입니다. 예를 들어 ADO 개체같은 것은 다음과 같이 사용하지 마라는 것입니다.

<%

set Conn = Server.CreateObject("ADODB.Connection")

Conn.Open "test", "", ""

set Session("qna_db") = Conn

%>

2. 생성된 개체는 반드시 해제 시켜야 합니다.

우리는 Server.CreateObject와 같은 방법을 이용해서 개체를 생성하고 이를 사용했습니다. ADO개체나 서버컴포넌트와 같은 개체가 그 예입니다. 지난 호에서도 설명했듯이, 개체를 쓰고 난 뒤에는 반드시 Close, set 변수=Nothing을 사용해서 해제시켜 주어야 합니다. 그래야만 서버가 힘들어하지 않으니깐요.

<%

set Conn = Server.CreateObject("ADODB.Connection")

...

Conn.Close

set Conn=Nothing

%>

3. SSI는 자주 반복되는 경우에만 사용합시다.

SSI (Server Side Include)는 보통 <!--#include file="test.inc"-->과 같은 방식으로 사용되며, 반복적인 작업이 있을 경우 사용됩니다. 특히, DB를 연결시에 해당되는 코드는 항상 반복되는 작업이므로 위와같이 인클루딩을 통해서 처리하곤 합니다. 그러나, 이러한 SSI는 아주 필요한 곳 이외는 가급적 사용하지 말아야 합니다. ASP는 IIS에서 컴파일하기 때문에 ASP의 파일 크기가 커지면 컴파일하는데 속도가 느려지게 됩니다. 예를들어, 하나의 ASP파일 안에 여러개의 SSI가 있으면 당연히 속도가 느려지겠죠?

4. 변수를 꼭 정의합시다.

ASP는 변수를 정의하지 않고 바로 사용할 수 있습니다. 아무런 문제가 없죠. 하지만, 되도록 Dim문을 이용해서 변수를 정의해서 사용하는 게 좋다고 합니다.

5. 문자열 경로를 사용합시다.

Server.MapPath를 사용하여 서버의 물리적 경로를 알아내곤 했습니다. 이것도 역시 꼭 필요할 때 사용해야겠네요. 왜냐면, IIS는 경로를 알아내기 위해서 엄청난 고생을 하게 되기 때문이죠.

6. 서버변수의 사용을 줄입시다.

서버변수를 이용할때는 필요한 변수만 액세스하는 것이 아니라 모든 서버변수를 가져오기 때문에 성능 저하가 일어납니다. 즉, 처음 호출시에는 이러한 일이 일어나죠. 다음 번부터 호출할 때에는 이러한 성능저하가 없다고 합니다.

7. 반복적으로 사용하는 Request의 Collection은 변수를 이용합시다.

아래 예제와 같이 여러번 반복적으로 Collection값을 사용할 필요가 있을 경우에는 option=Request.Form("Option")과 같은 방법으로 변수에 저장하여 사용하면 속도의 향상을 가져올 수 있습니다. 여러번 서버에 요청해서 가져오는 것보다 한번 요청하는 것이 훨씬 빠르겠죠?

<%

If Request.Form("Option")="1" Then

...

End If

...

If Request.Form("NAME")="10" Then

...

End If

%>

8. 되도록 Option Explicit을 씁시다.

ASP는 원래 변수를 선언하지 않고 사용할 수 있습니다. 하지만, 이는 속도저하를 초래합니다. 그래서 습관적으로 <%Option Explicit%>라고 써 주고, 변수를 Dim으로 선언하는 것이 좋습니다. Option Explicit는 변수를 선언하지 않으면 에러를 발생시킵니다.

9. 가능하면 클라이언트 사이드 스크립트로 처리합시다.

서버사이드 스크립트는 ASP와 같이 서버에서 실행되는 스크립트 언어이고, 자바스크립트나 VB스크립트는 클라이언트에서 실행되므로 클라이언트 사이드 스크립트라고 합니다. 우리가 지금 ASP를 배우고 있기는 하지만, 굳이 ASP로 처리하지 않아도 되는 기능들이 있습니다. 예를 들어, 아이디와 패스워드를 입력 받을때 빈 문자열을 검사하여 사용자의 입력이 제대로 되었는지를 체크할 때, 혹은 브라우저가 IE인지 Netscape인지를 체크할 때, 우리는 자바스크립트나 VB스크립트를 이용함으로써, 서버에서 실행되는 불필요한 코드들을 생략함으로써 성능을 향상시킬 수 있습니다.

10. 항상 테스트합시다.

프로그램의 코드를 수정했다면 꼭 테스트 해 보는 습관이 중요합니다. 코드의 변경에 따라 성능의 차이를 알아보고, 다시 고쳐나가는 것이 좋습니다. 저의 경험으로 똑같은 결과를 나타내는 코드를 다른 방식으로 바꾸었을 때 엄청난 속도차이가 나는 것을 알 수 있었습니다. 이렇게 테스트해 봄으로써 좀더 좋은 성능을 가지게 할 수 있을 것입니다.

알아두면 유용한 ASP 활용 Tip&Tech

ASP 프로그래밍 시에 알아두면 프로그래밍이 쉬워지는 팁과 테크닉을 알아보죠. 여러분들이 평소에 궁금했던 내용들이 모두 이 안에 있었으면 하네요.

SSI(Server Side Include) 이용

위에서 SSI는 필요할때만 사용하라고 했습니다. 이것에 대해 좀더 자세히 알아봅시다. DB에 연결시켜주는 코드나 또는 자주 사용하는 함수를 파일에 저장해두고 이것을 필요할 때 가져와 사용하면 훨씬 코드도 간단해지고, 성능도 개선되겠죠? 다음을 살펴봅시다.

다음과 같은 DB연결 코드를 입력하고 Dbconn.inc라는 이름으로 저장합니다.

<%

set Conn = Server.CreateObject("ADODB.Connection")

Conn.Open("Maso")

%>

위의 코드가 필요한 곳에다가 다음과 같이 <!--#include file="Dbconn.inc"-->를 적어주면 됩니다.

<!--#inclued file="Dbconn.inc"-->

<%

Set rs=Conn.Execute("Select * From board")

...

%>

자주 사용하는 함수도 마찬가지로 하면 됩니다. 여기서 뒤의 확장자는 굳이 inc로 할 필요는 없습니다. txt나 다른 확장자를 사용해도 되지만, 왠만하면 많이 사용하지 않는 확장자의 형태를 취하는 것이 속도면에서 좋습니다. 왜냐하면, 컴파일시에 빨리 인식하기 때문이죠.

Replace로 문자 바꾸기

보통 게시판을 만들 때, 특정 문자를 변환할 필요가 있습니다. 이 경우, 이 함수를 사용하면 쉽게 해결 할 수 있습니다. 게시판에서 만약, content라는 변수에 글의 내용이 저장되어 있고, 이를 DB에 저장할 경우, '''나 '|'는 에러를 일으킬 수 있습니다. 그렇기 때문에, 이 두 문자는 Replace문을 이용하여 다음과 같이 변환 시켜 저장합니다.

<%

content=Replace(content, "'", "''")

content=Replace(content, "|", "|")

%>

이렇게 하고 난 뒤 DB에서 가져와 보여줄때는 그냥 그대로 가져오면 됩니다. 왜냐하면, 저장될 때에는 원래 그대로 저장되기 때문입니다. 그냥 레코드에서 읽어와서 <%=rs("Content")%>하시면 원래대로 출력됩니다. 이것은 이미 지난호의 Q&A게시판 예제소스를 보시면 될 것입니다.

게시판의 글을 올릴때, HTML태그를 이용해서 글을 쓰면 그대로 먹혀 나타나게 됩니다. 그래서 만약 HTML이 먹히지 않게 하고 싶다면 다음과 같이 하면 됩니다. 이 코드를 DB에 저장할 때 또는 불러올 때 어느 한 경우에 사용하면 나타나는 결과는 같습니다.

<%

content=Replace(content, "<", "<")

content=Replace(content, ">", ">")

%>

다음과 같이 HTMLEncode를 사용해도 같은 결과가 나타납니다.

<%content = Server.HTMLEncode(content)%>

게시판에서 줄바꾸기

게시판에서 글보기를 했을 때, 모든 글이 한줄로 붙어버리는 경우가 있습니다. 이를 방지하기 위해서는 엔터를 인식하게하여 줄바꾸기를 해 주어야합니다. 물론, Replace문을 사용하면 되겠죠. 여기서 Chr(13)&Chr(10)은 엔터를 의미합니다. 주의할 점은, 글 수정시에 다시 원래대로 바꿔주어야 한다는 것입니다.

<%content= Replace(Request("content"), Chr(13)&Chr(10), "<br>")%>

하이퍼링크로 특수 문자 보내기

저에게 어떤 분이 이렇게 질문하셨더군요. "temp.asp?code=aaaa에서 aaaa라는 값을 넘겨 줄때 +, - 기호가 있으니까 이상하게 변합니다. 연산자는 넘겨 줄 수 없는건지 아님 다른 방법이 있는 겁니까? 예를 들면 넘겨줄 값이 "aa-aa" 라면은 처리가 이상하게 됩니다."라구요. 물론, 해답은 간단히, Server.URLEncode를 사용하시면 됩니다. 물론, 다른 방법도 있지만, 이게 제일 간단하고 쉬운 방법입니다.

<a href="test.asp?test=<%=Server.URLEncode("100-100+90")%>">test</a><BR>

ODBC없이 DB연결하기

지난 호에서 MS-Access로 ODBC를 연결하여 DB에 접근하는 방법을 공부했습니다. ODBC를 연결해 줄려니 귀찮기 짝이 없었겠지요. 그래서 바로 연결하는 방법이 있습니다.

<%

MyDB = "C:\Inetpub\wwwroot\Maso.mdb"

DbConn = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MyDB

Set Conn = Server.CreateObject("ADODB.Connection")

Conn.Open(DbConn)

%>

왜 Refresh가 안될까?

ASP 프로그램을 하다보면 브라우저로 직접보고 수정을 해야합니다. 디버깅이 좀 불편하죠. 안 그래도 원하는 대로 결과가 안나와서 짜증나는데, 계속 예전에 불러졌던 화면이 브라우저에 나타날때는 정말 미칠지경까지 갈 겁니다. 이것은 브라우저의 캐시기능 때문입니다. 브라우저는 기본적으로 캐시기능이 설정되어 있어서 한번 불러온 웹페이지는 다음에 접근했을 때, 임시디렉토리에 저장되어있던 예전의 것을 가져와 보여주기 때문입니다. 물론, HTML에서 Meta 태그로 캐시기능을 제어하는 게 있지만, 그렇게 잘 듣지 않는 걸로 알고 있습니다. 그러나, ASP에서는 이것도 쉽게 제어가 가능하지요. <%Response.Expires="0"%>를 <HTML>을 포함한 모든 코드의 맨 위에다가 두면 됩니다. 이것은 디버깅할 때나 자주 업데이트되는 사이트에서 사용하면 좋지만, 그렇지 않은 경우에는 필요가 없습니다.

문자열 Split으로 나누기

만약, 계산기를 만들 때, 연산기호를 빼내고 숫자만 가져올려면면 어떻게 해야 할까요? 일단은 텍스트 박스로 입력을 받고 난뒤에 Replace문으로 연산기호들은 특정문자(여기서는 "|"로 구분)로 대체하고 Split 함수로 나누면 됩니다. 다음과 같이 하면, val은 배열변수로 바뀌며 val(0)=1, val(1)=2, val(2)=33, val(3)=21으로 저장됩니다. 이것을 주민등록번호 앞자리와 뒷자리 구분과 같이 다른 곳에서도 응용할 수 있습니다.

<%

val="1+2*33/21"

val=Replace(val, "+", "|")

val=Replace(val, "-", "|")

val=Replace(val, "*", "|")

val=Replace(val, "/", "|")

val=split(val,"|")

%>

특정 시간 내에 있는 게시물 보여주기

DB에있는 시간과 현재의 시간을 비교하여 DB에 있는 시간이 현재의 시간보다 24시간 이내일 경우 해당 DB내용을 WEB에 Display할려고 하면 어떻게 해야 할까요? 다음 예제를 봅시다.

<%

i=1

Do until rs.EOF or i>rs.pagesize

If Datediff("h",rs("datetime"), now()) < 24 then

%>

게시물 출력

<%

rs.MoveNext

i=i+1

end if

loop

%>

DateDiff문은 두 날짜 사이의 간격을 되돌려 주는 함수입니다. 첫 번째 인자 'h'는 시간을 나타냅니다. 두 번째 인자(rs("datetime"))과 세 번째 인자 현재시간(now())의 차이를 시간으로 되돌려줍니다. 물론, 'h' 대신 'n'을 쓰면 분을 나타내고 's'를 쓰면 초를 나타냅니다. 이 함수에 대한 자세한 설명은 지난호 이달의 디스켓에 첨부된 VB스크립트 도움말을 참조하십시오.

Redirect에서 여러 값을 한꺼번에 넘기기

Redirect는 단지 특정 URL로 이동시켜주는 역할을 합니다. 여기에 값을 같이 넘겨줄려면 보통 하이퍼링크에서처럼 값을 넘겨주면 되죠. 그런데, 여러 개의 값을 넘겨줄려면 어떻게 해야 할까요? 다음과 같이 &만 잘 써주면 됩니다.

<%

id=request("id")

pwd=request("pwd")

Response.Redirect "check.asp?id="&id&"&pwd="&pwd

%>

Redirect로는 Target이 없다.

물론입니다. Redirect는 Target을 설정할 수 없습니다. 대신 자바스크립트나 VB스크립트를 써야 합니다.

<script language="javascript">

window.open("test.asp", "NewWindow");

</script>

VB스크립트나 자바스크립트에서의 ASP 변수값 넘기기.

ASP프로그래밍시에 자바스크립트나 VB스크립트안에서 ASP의 변수값이 필요가 있을 때가 있습니다. 이럴 때는 다음과 같이 하면 됩니다.

<%

url="test.asp"

target="NewWindow"

%>

<script language="javascript">

window.open("<%=url%>","<%=target%>");

</script>

아직도 Y2K 버그?

게시판의 날짜를 보니깐 00-09-01로 나온다면, 이것은 Y2K버그입니다. 하하, 농담이구요. 이것은 쉽게 수정할 수 있습니다. 일단, 제어판을 선택하고 국가별 설정이라는 것을 클릭하면 여러가지 탭 메뉴가 나오는데 거기서 날짜 탭을 선택하고 yyyy-MM-dd의 형태로 바꾸어 주시면 됩니다.

쿠키 확인하기.

클라이언트의 쿠키가 사용 가능한지 확인하는 방법이 있습니다. 일반적으로 세션이 지원되면, 쿠키도 가능합니다.

<%

session("check") = "IsCookie" '세션변수에 아무 값이나 넣는다.

if IsEmpty(session("check")) then '세션값이 없다면 쿠키사용안함

%>

<script language="javascript">

alert!("쿠키를 사용하지 않는 군요. 제발 쿠키 좀 사용해주세요!");

window.close();

</script>

<%end if%>

세션 배열 사용하기.

세션으로 배열을 저장할 수 있습니다. 다음과 같이하면 배열변수에 저장되어 있는 모든 배열값들이 세션에 저장됩니다. 다시 불러올때는 배열변수에서 값을 불러오는 방법과 마찬가지로 불러오면 됩니다.

<%

Dim temp(3)

temp(0)="사과"

temp(1)="복숭아"

temp(2)="배"

Session("Fruit")=temp

%>

<%For i=0 To UBound(Session("Fruit"))%>

<%=Session("Fruit")(i)%><BR>

<%Next%>

SiteGalaxy 업로드 서버 컴포넌트 이용하기.

예전에 Q&A 게시판에서 파일을 업로드하기위해 Fileman.dll이라는 서버 컴포넌트를 사용했었습니다. 이번에는 그것보다는 훨씬 설치하기가 쉽고 사용하기 편리한 사이트 갤럭시 서버 컴포넌트의 이용법을 알아보겠습니다. 사이트 갤럭시 컴포넌트는 setup.exe를 실행시키면 자동적으로 설치가 되기 때문에 Regsvr32로 등록절차를 생략하셔도 됩니다. Default로 설치하면, c:\program files\sitegalaxy\sample에 업로드 예제 ASP파일이 있습니다. 그걸 참고하셔도 좋구요. 다음은 사이트 갤럭시를 이용하여 이미지 파일을 업로드하는 예제입니다. 사이트 갤럭시 컴포넌트는 이달의 디스켓을 참고하십시오.

<!--Imageupload.asp-->

<FORM ACTION="Upload.asp" ENCTYPE="MULTIPART/FORM-DATA" METHOD="POST">

<font color="#000040" size=-1>Image Name:</FONT>

<INPUT TYPE="File" NAME="ImageFile" Value="*.bmp&*.gif&*.jpg&*.png">

<INPUT TYPE="SUBMIT" NAME="SUB1" VALUE="Upload File">

</FORM>

<!--Upload.asp-->

<%

'SiteGalaxy Upload 콤포넌트 세팅

set UploadForm = Server.CreateObject("SiteGalaxyUpload.Form")

'Check that the form has correct type

if UploadForm.ContentDisposition <> "form-data" then

Response.Write("당신의 사용하시는 브라우져가 옛날 버전이거나 파일 uploading을 지원하지 않습니다.")

Response.End

end if

strDirectory = "G:\IMG\" '저장할 디렉토리

if UploadForm("ImageFile").Count <> 1 then %>

<font color="red">파일이름이 없습니다. 다시 해 주세요.</font>

<%Else

'파일크기를 제한

if UploadForm("ImageFile").Size > 10*1024 then

Response.Write("Image size is limited to 10K")

Response.End

end if

'파일 이름을 세팅

attach_file = UploadForm("ImageFile").FilePath

filename = Mid(attach_file, InstrRev(attach_file, "\") + 1)

'올리는 파일이름만 뽑아냄.

strFile2 = Mid(filename ,1, Instr(filename , ".")-1)

'파일 확장자를 제거한 파일 이름을 구함.

strExt = Mid(filename ,Instr(filename , ".")+1)

'확장자를 구함.

'파일시스템 객체 생성

Set fso = CreateObject("Scripting.FileSystemObject")

bExist = True

'만약 파일이 존재하면

strFileNameTemp = strDirectory & filename

'저장할 파일의 완전한 이름을 만듦

countfilename = 0

'파일이 존재할 경우, 이름 뒤에 붙이 숫자를 세팅함.

While bExist = True ' 우선 있다고 생각함.

If (fso.FileExists(strFileNameTemp )) Then '파일이 있다면

'Response.Write strFileNameTemp & "이(가) 있습니다.<br>"

'파일 이름에 숫자를 붙인 새로운 파일 이름 생성(파일명 중복 방지)

countfilename = countfilename + 1

strFileNameTemp = strDirectory & strFile2 & countfilename & "." &

strExt

else '파일이 없다면

'Response.Write strFileNameTemp & "이(가) 없습니다.<br>"

strFile2 = strFile2 & countfilename

bExist = False '파일이 존재하지 않으므로 False.

End If

Wend

Set fso = nothing ' Scripting.FileSystemObject를 닫아줌.

strFileName = strFileNameTemp '위에서 구한 이름을 저장할때 사용하기 위해

%>

<%

'저장할 파일이름을 만듦.

on error resume next

'파일을 저장한다.

nLen = UploadForm("ImageFile").Size

UploadForm("ImageFile").SaveAs strFileName

%>

<CENTER><FONT SIZE="-1">

<TABLE WIDTH="80%" BORDER="0" CELLSPACING="2" CELLPADDING="0" HEIGHT="206">

<TR>

<TD bgColor=#C0C0FF HEIGHT="30" COLSPAN="2" Align="center"><Font color=#FFFFFF><b>Upload File 정보</b></Font></TD></TR>

<TR><TD bgColor=#FFFFFF WIDTH="30%" HEIGHT="27" ALIGN="Center"><font size=-1 face="돋움" color=#8F8FCF>사용자의 파일이름</font></TD>

<TD bgColor=#FFFFFF WIDTH="70%" ALIGN="Center"><font size=-1 face="돋움" color=#8F8FCF><%=attach_file%></TD>

</TR>

<TR>

<TD bgColor=#EEEAEA WIDTH="30%" HEIGHT="27" ALIGN="Center"><font size=-1 face="돋움" color=#8F8FCF>서버의 파일이름</TD>

<TD bgColor=#EEEAEA WIDTH="70%" ALIGN="Center"><font size=-1 face="돋움" color=#8F8FCF><%=strFileName%></TD>

</TR>

<TR>

<TD bgColor=#FFFFFF WIDTH="30%" HEIGHT="27" ALIGN="Center"><font size=-1 face="돋움" color=#8F8FCF>파일 크기(bytes)</TD>

<TD bgColor=#FFFFFF WIDTH="70%" ALIGN="Center"><font size=-1 face="돋움" color=#8F8FCF><%=nLen%></TD>

</TR>

<TR>

<TD bgColor=#EEEAEA WIDTH="30%" HEIGHT="27" ALIGN="Center"><font size=-1 face="돋움" color=#8F8FCF>파일 Type</TD>

<TD bgColor=#EEEAEA WIDTH="70%" ALIGN="Center"><font size=-1 face="돋움" color=#8F8FCF><%=UploadForm("ImageFile").MimeType%></TD>

</TR>

</TABLE>

</FONT></CENTER>

<%

set uploadform = Nothing

End If %>

</BODY>

</HTML>

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

박스기사:ASP 칼럼

ASP에 왠 포토샵?

홈페이지 작업에는 ASP와 같은 프로그램적인 요소도 필요하지만, 이미지 구성이나 처리와 같은 디자인 작업 또한 필요합니다. 그래서 여러분의 PC에 페인트샵이나 포토샵이 깔려 있을 경우가 있습니다. 여기서 포토샵이 문제가 되는데요. 포토샵을 설치하고 ASP파일을 클릭하게되면 이상하게도 포토샵 화면이 뜨게 됩니다. 정말 짜증나지요. 이럴 때 해결하는 방법이 있습니다. 저도 인터넷 어느 사이트에서 이 방법을 찾아 냈습니다. 바로 레지스트리를 건드리는 방법입니다.

1)시작을 클릭하고 실행을 선택하고 regedit를 실행시킵니다.

2)HKEY_CLASSES_ROOT아래에 .asp라는 이름의 키를 찾습니다. 이 키의 기본값은 "photoshop.Sep TablesFile"로 되어 있습니다.

3).asp의 기본값을 "ASPfile"이라고 바꾸고, 같은 이름의 키를 하나 추가합니다. 만들어진 키를 찾아가서 기본값을 "Active Server Page"로 고치면 이 이름이 윈도우상에서 통하는 확장자의 명칭이 됩니다.

4)EditFlags라는 이름의 [이진값]을 등록하여 값을 "00 00 01 00"으로 기입합니다. 이렇게 해주면 폴더옵션에 이 확장자가 나타나게 됩니다.

5)탐색기를 띄우고 폴더옵션에서 "Active Server Page"를 찾아 아이콘 이미지과 실행방법을 선택하면 됩니다.

ASP Error는 가라!

ASP 프로그래밍을 하다가 에러가 나면 쉽게 디버깅이 가능한 경우, 즉 문법적인 에러인 것도 있지만, 그렇지 않은 경우도 많습니다. 특히 자기가 짠 코드가 틀린게 없다고 생각하는데도 이상하게 제대로 실행이 되지 않는 경우가 허다합니다. 여러분들이 자주 만나거나 부딪히게될 이런저런 에러에 관해서 제 경험과 여러 가지 자료를 바탕으로 살펴보겠습니다. 굉장히 많은 에러가 있지만, 여기서는 몇가지만 살펴보고 나머지는 다음 사이트를 참고 하십시오.(참고사이트 : http://www.ultimateasp.com/reference/error.asp)

클라이언트 브라우저에 HTTP 헤더가 이미 쓰여 있습니다.

'HTTP 헤더가 이미 쓰여 있습니다. HTTP 헤더는 페이지 내용을 쓰기 전에만 수정해야 합니다.'라는 에러는 주로 Response.Redirect, Write구문의 잘못된 사용으로 나타납니다. 이 에러를 그대로 생각하시면 됩니다. 즉, HTTP헤더에 뭔가가 쓰여졌기때문에, 구문을 실행할 수 없다는 뜻이죠. 그러니까, Redirect 문의 경우 <HTML>이나 HTML코드의 앞에 놓여져야지 된다는 것입니다. Redirect나 Write는 헤더에 쓰기 때문이지요. Write가 Redirect보다 앞에 있어도 이런 에러가 납니다. 만약 소스코드를 바꾸기가 굳이 어렵다면, 책을 찾아서 response.buffer이나 response.flush을 찾아보세요. 그럼 도움이 될 겁니다.

외부 개체 트랩오류가 발생했습니다.

이 경우는 주로 자신이 만든 ASP 서버 컴포넌트를 이용했을 때, 발생합니다. 저도 이같은 경우를 가끔 당했지요. 이건 간단히 DLL을 서버에 등록시켜주기만 하면 됩니다. 만약, 그래도 안되는 경우는 자신이 만든 서버 컴포넌트 자체에 버그나 동작이 제대로 되지 않을 경우도 있습니다.

ODBC 드라이버는 요청한 등록 정보를 지원할 수 없습니다.

이 에러는 SQL문법에 어긋났을 경우에 일어나는게 대부분입니다. 아니면, DB의 테이블 이름이나 필드명을 잘못 써서 에러가 날 수도 있습니다. 한마디로 SQL이 실행되는 문장에 에러가 있다는 것이죠. 잘 살펴보면 해결할 수 있습니다.

[Microsoft][ODBC Microsoft Access 97 Driver] .... 문(절)의 구문 오류입니다.

이 경우는 ...문(절)을 잘 살펴보면 해결방안이 나타납니다. 보통 에러는 잘못된 구문의 행을 가르쳐주니깐 그 행을 자세히 살펴보면 되겠죠. 이것도 또한 SQL문법오류이거나 지원하지 않는 함수를 사용하였을 때 발생합니다.

BOF나 EOF가 참이거나. 현재 레코드가 삭제되었습니다. 요청하신 작업은 현재 레코드를 필요로 합니다.

레코드의 유무를 판별하는 <%If Not rs.EOF%>나 <%While Not rs.EOF%>를 이용하여 에러를 잡을 수 있습니다.

ASP 가능한 Web Site

많은 분들이 ASP를 공부해서 자신의 홈페이지를 꾸밀려고 하고 있습니다. 하지만, 개인적으로 웹서버를 운영하는 것은 참으로 어려운 일입니다. 국내 여건상 서버사이드 스크립트인 ASP를 지원해주는 사이트는 없는 걸로 알고 있습니다. 그러나 너무 실망하지 마십시오. 외국에는 있으니깐요. 무료홈페이지계정에 ASP를 지원하는 사이트 두가지 입니다.

원본 링크 : http://www.dayweb.co.kr/category/Day%27s%20WebDev%20Tips/[Asp]
                  DayWeb님

split를 이용하여

  Dim src           ' 경로  
  Dim tmpFileArr ' 경로가 .으로  잘라져서 저장될 배열
  Dim fileType    ' 파일의 타입이 저장될 변수
 
  src = request.QueryString("src")
  tmpFileArr = split(src, ".")
  fileType = tmpFileArr(ubound(tmpFileArr))  '배열의 마지막 값(확장자)를 fileType에 저장한다.

ubound(배열이름) 
배열의 마지막 Index를 반환한다..

크기가 아니였군.. (비슷한 개념이겠지만..ㅜ)


예제 코드
<%
 Dim src
 Dim tmpFileArr
 Dim i
 
 src = "임의의
URL주소"
 tmpFileArr =split(src, ".")

 for i=0 to ubound(tmpFileArr)
  response.write (i) & "번째 : " & tmpFileArr(i) & " <br>"
 next

 response.write "ubound의 반환값 : " & ubound(tmpFileArr)

%>




<%

strPath = "" <- 경로가 들어갈 변수

Call GetFolderList(strPath)  
'호출!!


 Sub GetFolderList(strPath)

  Dim FSO, Folder, Sub_folder
  
  Set FSO = Server.CreateObject( "Scripting.FileSystemObject" )
  Set Folder = FSO.GetFolder(strPath)
  Set Sub_folder = Folder.Subfolders

  For Each folder In Sub_folder 

   if folder.Name <> "" then 
    GetFolderList(strPath&"\"&folder.Name)
    '시작 경로에서 하위 폴더를 붙이면서 검색한다.
    Response.Write "<hr><font color=blue>"
    Response.Write strPath & "\" & folder.name & "\<br>"
    '폴더명을 출력한다.
    Response.Write "</font>"
    Call GetFileList(strPath & "\" & folder.name) '
    하위 폴더에 있는 파일을 검색한다.    
    end if   
  Next

  Set Sub_folder = Nothing
  Set Folder = Nothing
  Set FSO = Nothing
' 개채를 비운다.  
 End Sub

 Sub GetFileList(strPath)
  Dim FSO, Folder, Files, FilePath
  Set FSO = Server.CreateObject( "Scripting.FileSystemObject" )
  Set Folder = FSO.GetFolder(strPath) 
  '하위 폴더명을 붙이면서 Folder개채를 생성한다.
  Set Files = Folder.Files
  'Folder개채로 File개채를 생성한다.
  For Each file In Files  
     FilePath = strPath&"\"&File.Name
     Response.write FilePath & "<br>" 
     'File개채들을 출력한다.
  Next
  Set Files = Nothing
  Set Folder = Nothing
  Set FSO = Nothing
 End Sub

%>
 
라임색으로 된 코드를 수정하면 바로 링크가 가능한 경로로 출력을 할수 있다. (물론에 서버에 있다는 가정하에.)
(replace 함수로 변환 시키면 url로 출력하면 끝)
이것을 Xml로 해서 mfc와 연동하면서 했던 것인데.

XML 역시 짜증나는 녀석이다.
많이 써보지 않으니 이 에러가 무슨 에러 인지 당최 알수 가 없는 경우..

  Set Files = Folder.File <- 이부분이 잘 못 되었네요 ㅇㅅㅇ; Folder.Files 였네요 ㅎㅎ;;



'공부방 > ASP' 카테고리의 다른 글

[ASP] 성능향상을 위한 ASP Tips  (2) 2009.09.05
[ASP] URL에서 파일 확장자 알기  (0) 2009.09.04
[ASP] FileSystemObject  (0) 2009.08.10
[ASP] 오류코드  (0) 2009.08.04

+ Recent posts