<html> <head> </head> <body> 코딩은 언제나 목마르다. 두 라인 부족할때.. </body> </html> |
정확하게 저장이 되었나요? 그렇다면 이제 웹브라우저(익스플로러)를 실행시켜보겠습니다.
실행이 되었다면 주소창에 'http://localhost/test.asp' 라고 입력한 후 이동해 보세요.
자. 어떻습니까. 방금 전에 우리가 만든 파일이 '짜안~' 하고 나타나는 장면을 보실 수가 있을것입니다.
볼품이 없다고요?저 간단한 소스로 무엇을 바라셨다는 말씀이십니까.. -_-a
혹시 '페이지를 찾을 수 없다' 또는 '페이지를 표시할 수 없다 ' 는 오류 메시지가 나오는 분들이 계신가요? 그런 분들께서는 ' 여기'를 클릭해 주시기 바랍니다. |
하지만 여기서 중요한 것은 test.asp의 내용이 아닙니다.
'웹서버를 통해 asp 파일을 동작시켰다는 점'이중요하다는 말씀입니다.
그렇다면 과연.. asp 파일을 일반 파일 다루듯이 더블 클릭으로 실행할 수는 없는 것일까요?
좋습니다.백설(百說)이 불여일행(不如一行).. 이번에도 직접 테스트 해보도록 하시지요.
탐색기를 여시고 'C:\Inetpub\wwwroot\' 으로 이동해 주십시오.
그 곳에서 'test.asp'파일을 찾아낸 후 힘차게(!) 더블 클릭 을 해 주십시오.
어떤 결과가 발생하는지요?
아마도여러분 컴퓨터에 설정되어 있는 편집기 프로그램이 실행될 것입니다.
아마도.. 라는 애매한 표현을쓴이유는 여러분들의 프로그램 설치 환경에 따라 결과가 다르기 때문입니다.
연결된 프로그램이 없는 경우 '연결할 프로그램 설정' 화면이 뜰테고요. 어떤 프로그램을 설치했느냐에
따라각각 다른 프로그램이 실행될 것이기 때문입니다. (제 경우에는 '포토샵'이 떠 버리더군요. -_-a)
확실한 것은아까 웹서버를 통해 실행시켰던 깔끔한 결과는 결코 나오지 않는다는 것입니다.
그렇다면 어떤 분들께서는 이런 생각을 하실지도 모르겠습니다.
'어차피 asp 파일도 웹브라우저 상에서보여지는거잖아.. 그럼 브라우저(익스플로러)에서 실행하면될 것
같은걸? '이라는 깜찍한 생각 말입니다.. 호오. 정말 그럴듯 하지요??
그렇다면 이 경우도 한번 테스트 해보도록 하지요.
아까 열었던 탐색기를 그대로 두시고따로 익스플로러를 실행합니다.
그리고는 방금실행한 익스플로러에 탐색기에 있는 test.asp 파일을 드래그 앤 드롭(끌어당겨놓기) 합니다.
다음 그림과 같이 말이지요.
<그림 1>
그러면 백발백중 다음과 같은 화면이 뜰 것입니다.
<그림 2>
여기서 '현재 위치에서 이 파일 열기'를 선택하시면 여러분들의 편집기 프로그램이 실행되고요.
'이 파일을 디스크에 저장'을 선택하시면 말 그대로 여러분의 하드 디스크에 저장을 하셔야 합니다.
즉, 이 방법으로도 asp 파일을 제대로동작시킬 수 없다 는 결론이지요.
여기서 정리하고 넘어가겠습니다.
'ASP 라는파일은 웹서버를 통해서만이 동작된다' 는사실을 반드시 숙지하시기 바랍니다.
또한 기본 웹서버의 위치는 'C:\Inetpub\wwwroot\' 라는 사실도 기억하셔야 하고요.
그렇다면 탐색기에서 'C:\Inetpub\wwwroot\' 밑에다 'test' 라는 새 폴더를 만들고 그 안에'test2.asp' 를
만들면어떻게 될까요? 이러한 경우웹브라우저에 'http://localhost/test/test2.asp' 라고입력하신후
실행시키면 test2.asp가 제대로 동작하는 것을 보실 수 있습니다.어떻습니까? 이제 조금 감이 잡히십니까?
'그렇다면 웹서버는 어디서 관리하는 것일까?' 라는 의문을 가지신 분 혹시 계십니까?
(없으시다고요. 음... 그렇다면 제가의문을 가졌다고 치겠습니다.)
아~ 정말 예리한 분이시군요. 상당한 센스의 소유자임에 틀림없으십니다..(-_-a)
웹서버의 관리는 우리가 지난 시간에 열심히 설치해 본 '인터넷 서비스 관리자(IIS)'에서 관리합니다.
다같이 IIS를실행해 보도록 하지요. ('시작 -> 프로그램 -> 관리도구 -> 인터넷 서비스 관리자 ' 입니다)
그렇다면 다음과 같은 화면이 뜰 것입니다.(저는 전람회를 좋아해서 컴퓨터 이름이 '전람회'입니다..)
<그림 3>
자 이제 컴퓨터 이름을 클릭하고 다음과 같이 '기본 웹 사이트 '를펼쳐 보도록 하겠습니다.
<그림 4>
어떻습니까? '기본 웹 사이트' 안에서 test.asp 를 찾아볼 수가 있지요?
또한 방금전 만들었던 test 폴더도 볼 수가 있을 것입니다.
그렇습니다. 이곳이 바로 기본 웹서버인 'C:\Inetpub\wwwroot\' 의 위치입니다.
그렇기 때문에이 곳에서 우리는 test.asp를 찾을 수가 있었던 것이지요.
'우띠.. 귀찮다. 꼭탐색기를 열고 여기까지 들어와야 이걸 할 수 있다는 말인가.. 지겹다' 는 분들이
계실 것이라 생각합니다.그런 분들을 위해(?) '가상 디렉터리'에 대해 설명드리겠습니다.
가상 디렉터리라.. 앞에 '가상 '이 붙는 것으로 미루어 보아 무언가 가짜의 분위기가 나지 않습니까?
조금 전 우리는탐색기로 일부러 'C:\Inetpub\wwwroot' 를 찾아 들어가서 그 안에 'test.asp' 와 'test' 라는
폴더를생성해 보았습니다. 그리고 실행해 보았었지요. 그곳이 웹서버이기 때문입니다.
하지만 '가상 디렉터리'는 '다른 곳에서 폴더를 만들고서 마치 웹서버에 위치한 것처럼 동작' 시켜 줍니다.
웬지 마음에 드는 이름이라고요? 좋습니다.그럼 이제 '가상 디렉터리'를 하나 만들어 보도록 하지요.
여러분들께서 좋아하시는 장소에 '새 폴더' 를 하나 만들어 주세요. 장소는어느 곳이든 상관없지만 되도록
나중에 여러분들께서 찾기 편한 곳으로 만드시는게 좋겠습니다.(참고로 저는D 드라이브에 만들었습니다)
폴더의 이름은마음 내키시는대로 정하시면 됩니다. 저는'Taiji'라는 이름으로 주었습니다.
그리고.. 폴더 이름은 가급적 영어로 지어주시기를 부탁드립니다.
<그림 5>
'새 폴더'의 이름을 정해주세요.. 라고했더니 '독수리', '제비' 이렇게 하시는 분들 꼭 계신데요.
그러지 마시고되도록 'eagle', 'swallow' 이렇게 하시라는 말씀입니다. (하..하..하.. -_-a)
'쯧쯧.. 그걸 개그라고 하냐?' 하시는 분들.그래도 이 개그.. 한때 잘 나갔던 개그랍니다. ^^
지금까지는그냥 폴더 하나 만드는 것과 아무 차이가 없지요?하지만 진짜는 이제부터입니다.
새로 만드신 폴더에서 '마우스 오른쪽 버튼'을 클릭하시고 '등록정보 '를선택해 주십시오.
<그림 6>
그림에서 마우스의 위치를 유심히 보시면 '웹 공유'탭 위에 있다는 것을 확인하실 수 있습니다.
'웹 공유 '를 선택해 주십시오.
중간에'이 폴더를 공유함' 과 '이 폴더를공유하지 않음' 이 나오게 되는데 이때'공유함 '에 체크해 주세요.
그러면 다음 그림과 같은 화면이 뜨게 됩니다.내용을 확인하시고 '확인 ' 버튼을 눌러주세요.
<그림 7>
그러면 다음 그림처럼 별칭에 'Taiji'가 등록되어 있는 것을 보실 수 있는데요.
<그림 8>
이렇게 되면 가상 디렉터리의 생성은 모두 완료됩니다.
'허어~.상당히 까다로울 것 같았는데 의외로 쉽군. 진짜 된거야?' 싶으신 분들 계시죠?안봐도 비디오입니다.
좋습니다. 그렇다면과연 웹서버 에 지금 만들어 놓은 'Taiji'라는 폴더가 있는지 확인해 볼까요?
아까 실행했던IIS를 다시 실행해주십시오. ('시작' -> '프로그램' -> '관리도구' -> '인터넷 서비스 관리자' )
그리고 '기본 웹 사이트 ' 안으로 들어가보면 다음 그림처럼 'Taiji' 목록이 추가된 것을 볼 수가 있습니다.
<그림 9>
'어라? 그런데 일반적인 폴더가 아니라.. 무언가 이상한 모양으로 생겼는걸?' 이라는 의문을 제기하시는
분들이 있을지도 모르겠습니다.이것의 이름은 사실 '가상 디렉터리' 가 아닌 '가상 애플리케이션 '입니다.
하지만 이번 강좌를 진행함에 있어서 이둘의 차이는 고려하지 않아도무방한 것이기에일단
'가상 디렉터리 ' 라는 이름으로 이름을 고정하고 사용하도록 하겠습니다.
(사실 저는 이런식으로 얼렁뚱땅 넘어가는 것을 좋아하지 않습니다. 진짜로요.. 하지만'가상 디렉터리' 와
'가상 애플리케이션'의 차이는 초보자의 수준을 넘어선다는 판단하에 일단 넘기고 계속 진행하겠습니다)
자아~. 그렇다면 이 'Taiji ' 라는 가상 디렉터리로는 어떻게 접근해야 할까요..
우선Taiji 폴더(저는 D 드라이브에 있지요) 안에다 아까 만들었던 'test.asp' 파일을 이동시키겠습니다.
그리고 웹브라우저에서 'http://localhost/taiji/test.asp' 를 입력하고 실행해 보십시오.
아주 잘~ 실행되는 것을 보실 수 있을 것입니다. (제대로 따라오신 분이라면..)
이제 가상 디렉터리의 사용법과 기능을이해하시겠지요?
기본 웹서버의 위치인 'C:\Inetpub\wwwroot\'까지 굳이 이동하지 않더라도,여러분께서 원하는 위치에서
폴더 하나를 생성하는 것만으로ASP 파일을 동작시키는 이 '가상 디렉터리'는
상당히 매력적인 친구일 것입니다. 그렇지 않습니까?
이 친구는 앞으로도 상당히 유용하게 사용되므로 사용법을 잘 기억해 두시기를 부탁드립니다.
막상 가상 디렉터리 생성법을 살펴보고 나니까.. 아까 탐색기로 열심히wwwroot를 찾아 들어갔던게
후회되십니까? 넘 복잡하고 쓸모도 없을것 같아서..?아까운 시간만 허비한것같아서?
하지만 그만큼 귀찮고 어려웠던 과정이하나하나 쌓여 저와 여러분에게 든든한 기초가 될 것입니다.
다같이 경건한 마음으로 조용히 "화이팅!!"을 한번 외치고.. 계속 진행하도록 하겠습니다. ^^
자, 참으로 길었던 준비 과정을 모두 마치고 그럼 이제 정말로 코딩에 들어가겠습니다.
방금 만들었던 가상 디렉터리인 Taiji 라는 폴더를 그대로 사용하도록 하겠습니다.
우선.. 아까 테스트 해 보았던 test.asp 파일을 사정없이 지워 주십시오.
그리고Taiji 폴더 안에 다시 'regist' 라는 이름의 폴더를하나 만들겠습니다. (글쓰기 페이지 전용 폴더)
그리고 생성된 폴더 안에 'regist.asp' 라는 파일을 하나만들어서 다음소스를 입력해 주십시오.
(편집기나 에디터에서 직접 치셔도 좋고, 복사해서 붙이는 것도 좋겠습니다. 하지만 정말 초보시라면
직접 손으로 입력해 보시는 것이 얻는바가 더많을 것이라고 감히 말씀드리고 싶습니다.)
<regist.asp>
01<html> 02 <head> 03<title>태지의 게시판 - 글쓰기 폼</title> 04 </head> 05 <body> 06 <form name="registForm" method= "post" action="regist_ok.asp"> 07 <table border cellspacing="0" width="500"> 08 <tr> 09 <td colspan="2" align="center"><b>글을 적어주세요</b></td> 10</tr> 11 <tr> 12 <td align="center">이름</td> 13 <td><input type="text" name="userName" size="15"></td> 14 </tr> 15 <tr> 16 <td align="center">비밀번호</td> 17 <td><input type="password" name="userPwd" size="15"></td> 18 </tr> 19 <tr> 20 <td align="center">Email</td> 21 <td><input type="text" name="userEmail" size="50"></td> 22 </tr> 23 <tr> 24 <td align="center">제목</td> 25 <td><input type="text" name="subject" size="50"></td> 26 </tr> 27 <tr> 28 <td align="center">내용</td> 29 <td><textarea name="content" cols="50" rows="10"></textarea></td> 30 </tr> 31 <tr> 32 <td align="center">HTML</td> 33 <td> 34<input type="radio" name="tag" value="T" checked>적용 35<input type="radio" name="tag" value= "F">비적용 36 </td> 37 </tr> 38 <tr> 39 <td colspan="2" align="center"> 40 <input type="submit" value="작성 완료"> 41 <input type="reset" value="다시 작성"> 42 </td> 43</tr> 44 </table> 45 </form> 46 </body> 47 </html> |
이 강좌는 여러분들께서 기본적인 html 문서 정도는만들 수 있다는 전제 하에진행됩니다.
그러므로 위의 regist.asp의 내용이 도대체 무슨 내용이며 어떤 의미를 담고 있는지 전혀 모르시겠다면..
애석하지만 이 강좌 안에서는 저로서도 더 이상 도와드릴 방법이 없습니다.
(우선 html을 먼저 공부하실 것을 권해드리고 싶습니다. 어느 정도만이라도 말입니다...)
우선 regist.asp 는 글을 등록하는 폼이므로 html 태그가 주를 이룹니다.
사실 이 폼은 'regist.asp' 가 아닌 'regist.htm ' 으로 작성한다 하더라도 그다지 문제되지 않을 페이지입니다.
이 페이지는전부 기본적인 html로만 이루어져 있기 때문입니다.
(이 말은 문서 이름을 regist.htm이라 해도 무방하다는 뜻입니다)
사실 IIS 4.0 (Windows NT)까지는 이렇게 html로만 이루어진 페이지라면성능과 효율 측면에서
asp 보다는 htm 확장자를사용할 것을추천했습니다만,IIS 5.0 (Windows 2000)부터는 굳이 htm으로
쓰지 않고 asp로 써도 성능 저하가 일어나지 않는다고 하네요. 그래서 asp 확장자를 붙여보았습니다.
(이 말은 역으로 말하자면 지금Windows NT로 이 강좌를 따라하시는 분이시라면 'regist.htm' 으로
따라하시는 것이속도와 성능면에서 유리하다는 말씀이 되겠습니다. 물론 미세하긴 하겠지만요...)
위의 내용을 간단히 요약드리면..
이름 - userName
비밀번호 - userPwd
E-mail - userEmail
제목 -subject
내용- content
HTML - tag
라는 이름으로 값을 전달하게 됩니다.
이렇게'regist.asp' 문서를 저장을 하고, 웹 브라우저를 통해서이 문서를 실행해 보도록 하겠습니다.
웹 브라우저(익스플로러)를 여시고, '
01 <% Option Explicit 02 03 Dim objDBConn 04 Dim strSQL 05 Dim strName, strPassword, strEmail, strSubject, strContent, blnTag, strUserIP 06 07 strName= Request.Form("userName") 08 strPassword = Request.Form("userPwd") 09 strEmail = Request.Form("userEmail") 10strSubject = Request.Form("subject") 11 strContent= Request.Form("content") 12 blnTag = Request.Form("tag") 13strUserIP = Request.ServerVariables("REMOTE_ADDR") 14 15 strSQL = "Insert into board (" 16 strSQL = strSQL & " strName" 17 strSQL = strSQL & ",strEmail" 18 strSQL = strSQL & ",strPassword" 19 strSQL = strSQL & ",strSubject" 20 strSQL = strSQL & ",strContent" 21 strSQL = strSQL & ",blnTag" 22 strSQL = strSQL & ",intCount" 23 strSQL = strSQL & ",strUserIP" 24 strSQL = strSQL & ",dtmReg_Date" 25 strSQL = strSQL & ") Values (" 26 strSQL = strSQL & "'"&strName& "'," 27 strSQL = strSQL & "'" & strEmail & "'," 28 strSQL = strSQL & "'" & strPassword & "'," 29 strSQL = strSQL & "'" & strSubject & "'," 30 strSQL = strSQL & "'" & strContent & "'," 31strSQL = strSQL & "'" & blnTag& "'," 32 strSQL = strSQL& "0," 33 strSQL = strSQL & "'" & strUserIP & "'," 34 strSQL = strSQL & "getDate())" 35 36Set objDBConn = Server.CreateObject("ADODB.Connection") 37 38objDBConn.Open "test", "sa", "" 39 40 objDBConn.Execute strSQL 41 42 objDBConn.Close 43 Set objDBConn = nothing 44%> 45 <script language="javascript"> 46 <!-- 47 alert("등록되었습니다"); 48 location.href="../list.asp"; 49 //--> 50 </script> |
'regist_ok.asp' 페이지에서는 'regist.asp' 와는 대조적으로 html이 하나도 보이지를 않지요?
그렇다면.. 아마도 이 페이지는 사용자에게 보여지는 부분이 없게 될 것 같지 않나요?
맞습니다. 이 페이지에서 하는 일은 정보를 받아와서, DB에 등록하고,등록이 완료되면
글의 목록을 보여주는 페이지인'list.asp' 로이동시켜주는 역할만을 합니다.
이 'regist_ok.asp' 페이지는 크게 4부분으로 분류할 수 있습니다.
첫번째(1~13줄)는 변수 선언 및사용자가입력한 정보들을 변수에 저장 하는 부분입니다.
두번째(15~34줄)는 지난 시간에 우리가 만들었던 'board' 테이블 속으로 사용자가 입력한 정보들을 넣기
위해서,DB가 알아볼 수 있는 '쿼리(query)문' 을 작성하는 부분 입니다.
세번째(36~43줄)는ASP 내장 컴포넌트인 ADO(ActiveX Data Objects) 컴포넌트를 사용하여 DB와 연결
하고,조금전에 작성한 쿼리문을 이용하여 DB에 정보를 저장 하는 부분입니다.
네번째(45~50줄 )는저장을마친 후,글의 목록을 보여주는 'list.asp' 라는 페이지로 이동 시키는 부분입니다.
ASP 의 문장들은 '<%' 으로 시작해서 '% >' 으로 마쳐야 합니다.
그 안에 있는 부분들만이 서버에서 동작합니다.
1줄 맨 처음에 나오는 문장은 'Option Explicit ' 입니다.
이것은 '이 페이지에서 사용되는 모든 변수들은 반드시 선언되어진 이후에 사용 될 수 있다' 는약속입니다.
왜 이 기능을 사용했을까요?
ASP는 기본적으로 '변수 선언' 없이 변수를 사용하더라도 에러가 발생하지 않습니다.
이것은 참으로 편리한 기능이지만 부작용도 만만치 않습니다.예를 들어보겠습니다.
strTaiji = "서태지" 라는 값을 저장하고선, 나중에오타(실수)로 strTaeji 를 출력한다고 상상해 보시지요.
이런 경우 ASP는 에러를 발생시키지 않습니다.
전혀 다른 두개의 변수(strTaiji, strTaeji)가 있는 것 뿐이지요.
그렇다면 사용자가 아무리 strTaiji 에 값을 바꾸어 집어넣고 테스트를 해도, 그 값은 절대 출력되지 않습니다.
사용자는 변수명이 바뀌었다는 사실을 깨닫기 전까지는 전혀 이상없는 다른 소스를 붙잡고 고민해야 한다는
말이지요.(실제로 저도 예전에 'Option Explicit' 를 사용하지 않았을 때,반나절을 고생했던기억이.. T.T)
그래서 'Option Explicit' 라는 명령어는 꼭 사용해 주는 것이 좋습니다.
물론 변수마다 'Dim ' 이라는 명령어로 선언을 해 주어야 한다는 불편함과 귀찮음이 있을 수 있지만
잘 정리되어 있는 변수 선언은그 페이지의 특성을 한눈에 알아보게 할 수 있게 해 준다는 장점도 있습니다.
(솔직히.. 변수 선언은 C나 Java 같은 다른 언어에서는 기본중의 기본입니다. 귀찮다 생각하지 마시어요 ^^)
3~5줄 까지는 변수 선언 부분입니다.
그리고 7~13줄 까지는 regist.asp 에서 넘긴 사용자 정보를, 선언한 변수들 안으로 저장하는 작업을 합니다.
strName 이라는 변수에는 'regist.asp' 에서userName이라는 이름으로 넘긴 값을 저장하게 됩니다.
Request.Form 이라는 부분이 낯설게 느껴지실 것입니다.
Request는 ASP 내부에 자체적으로 내장된 개체 입니다.
문자 그대로 해석하면 '요청하다, 요구하다'는 뜻이 되지요.
이름에서 알 수 있듯이 Request 개체는 브라우저에서 사용자가 입력한 정보를받아 담아두는 일을 합니다.
그렇다면뒤의 Request.Form 에서 뒤의 'Form'은 무슨 의미일까요?
여러분들께서는 아까 'regist.asp' 에서 정보를 넘길 때 'post' 방식으로 넘겼던 사실을 기억하실것입니다.
'post' 방식으로 정보를 넘겼을 경우에는 Request.Form 이라는 명령어로 받게 됩니다.
그렇다면 'get' 방식은?이 때에는 Request.QueryString 이라는 명령어로 정보를 받아들이게 됩니다.
그렇다면 7~12 줄의 내용이 이해가 가시겠지요?
이름, 비밀번호, Email,제목, 내용, HTML의 정보들이 각각에 해당하는변수로 들어가게 되는 것입니다.
그렇다면 13줄의 Request.ServerVariables("REMOTE_ADDR") 는 무엇일까요?
이것은정보를 입력한 사용자의IP를 알아내는 구문이 되겠습니다.
(일단 관용적으로 알아두시면 좋겠습니다)
그렇다면 15~34 줄에 있는 무언가 반복되는 듯한 구문은 무엇일까요?
이것은 우리가 지난 시간에 만들었던 'test' 라는 DB, 그 안에 있는 'board' 라는 테이블안으로
7~13줄에서 변수에 저장한 각각의 정보들을 입력하는 SQL(Structed Query Language)구문 입니다.
(시퀄문이라고 불리우는 이SQL 구문을해석하자면 '구조적 질의 언어'가 됩니다)
우리가 이번 강좌 전체를 통해서 사용하게 될 SQL 구문은 총 4개입니다.
검색/조회구문인 Select문, 입력구문인 Insert문, 수정구문인 Update문, 삭제구문인 Delete문 입니다.
지금은 'board' 테이블에 정보를 '입력' 해야 하므로 'Insert' 구문을 사용하게 되겠습니다.
Insert 구문의 형식은 다음과 같습니다.
Insert intoTable 이름 (컬럼이름1, 컬럼이름2...) Values (저장할정보1, 저장할정보2...)
<그림 10>에서 입력한 정보를 그대로 전송하였다면 15~34 줄까지는 다음과 같은 SQL이 만들어집니다.
Insert into board ( strName,strEmail,strPassword,strSubject,strContent,blnTag,intCount,strUserIP,
dtmReg_Date) Values ('김덕영','maestrody@orgio.net','1111','헉, 왜 이렇게 썰렁해?','이거 머야.. 무지하게 썰렁하네. -_-a','T',0,'211.152.124.135','2001-09-16 오후 10:13:00')
Insert 문을 사용할 때 다음과 같은 점에 주의하시기 바랍니다.
1. 컬럼이름의 순서는 바뀌어도 상관없습니다만, 컬럼이름의 순서와 정보(변수)의 순서는 일치 해야 합니다.
- 즉,Insert into board 다음 컬럼이름의 첫번째에 strName 이 왔다면 Values 다음의 저장할 첫번째
정보에는 이름에 해당하는 '김덕영'이 와야 한다는 것입니다. 이것은 당연한 것이겠지요.
2. 정보를 입력할 때 해당 정보의 앞 뒤를 작은 따옴표(')로 감싸줍니다. 단 숫자(예: int)형은 예외입니다.
- 문자열로 입력되는 값들은 작은 따옴표를 꼭 붙여주고, 숫자형인 경우에는 작은 따옴표를 붙이지 않습니다.
위의 15~34 줄을 보시면 지금껏 말씀드린 Insert 문이 나오게 되는데요..
눈썰미가 있는 분들께서는 무언가 이상한 점을 발견하셨을 것입니다.
컬럼 이름 하나, 저장할정보 하나마다 한 줄씩 따로따로 쓴 것을 말입니다.
'우씨,소스 길게 보이게 하려고벼라별 꽁수를 다 쓰는군.' ... 이건 아니고요.
여러분들께 약간의 Tip을 드리기 위해 이런 방법을 사용하였습니다.
우선 이 Tip을설명드리기 위해서 문자열의 결합에 대해서잠시 알아보겠습니다.
문자열의 결합은 '&' 라는 기호를 사용해 표시하게 됩니다.
예를 들어보면 다음과 같습니다.
strLastName = "김"
strFirstName = "덕영"
strName = strLastName& strFirstName
이때strName에는 "김덕영"이라는 값이저장되어 있다는 말씀입니다.
그렇다면 다음과 같은 경우 strName에는 어떤 값이 저장되어 있을까요?
strName = strName & " 천재"
예상하신 대로 strName = "김덕영 천재" 가 저장되어져 있게 됩니다.(주의!! 천재 앞에 공백 한칸 주었어요)
문자열에 관한 또 하나의 예를 들어보지요.
strTaiji = "안녕하세여~ 태진데여"
strTest1 = strTaiji
strTest2 = "strTaiji"
자.. 그럼 문제입니다. strTest1 과 strTest2 에 저장된 값은 일치할까요?
정답은 "아니다 " 입니다. 왜일까요?
strTest1 에는 strTaiji에 저장되어진 "안녕하세여~ 태진데여"라는 값이 저장되어 있고,
strTest2 에는strTaiji에 저장된 값이 아닌 문자열 그대로의 "strTaiji" 가 저장된 것입니다.
(따옴표 때문에 그렇습니다)
이 두가지의 차이를 이해하시겠습니까? 간단하지만중요한 차이이므로 잘 기억해 두시기를 바랍니다.
그렇다면 이제 15~34 줄을 마치고 난 후에 strSQL 이라는 변수에 어떤 값이 들어있는지 아시겠지요?
strSQL 이라는 변수에는아까 보여드렸던 다음과 같은 문장이 저장되어져 있을 것입니다.
Insert into board ( strName,strEmail,strPassword,strSubject,strContent,blnTag,intCount,strUserIP,
dtmReg_Date) Values ('김덕영','maestrody@orgio.net','1111','헉, 왜 이렇게 썰렁해?','이거 머야.. 무지하게썰렁하네. -_-a','T',0,'211.152.124.135','2001-09-16 오후 10:13:00')
그렇다면 왜 한칸 한칸 줄을 바꾸어서 썼는지 말씀드리겠습니다.
우선 이렇게 한줄씩 따로 쓰게 되면 컬럼이름 쪽의 변수 갯수와 저장할 정보 변수 갯수를 비교해 보기가
편해지겠지요?이렇게 쓰면 컬럼 갯수와 저장할 정보의 갯수를 확인하는 측면에서 유리 해집니다.
또하나의 이점은 만약 board 라는 테이블에서컬럼을 삭제 또는 추가 한다고 했을때 생깁니다.
지금은 컬럼이 9개밖에 없지만 컬럼이 100개 정도 되는 테이블이라고 상상해 보시지요.
일렬로 주욱~ SQL 문을 입력한 상태에서, 중간에컬럼이 하나 추가된다고 한다면 그 부분을 찾는 것
또한 일이 됩니다.
그리고 컬럼을 어찌어찌해서 끼워 넣었다고 하더라도, 그 컬럼과 대응하는 정보를 또한 끼워넣어야 하는데...
작은 따옴표와 쉼표가 난무하는 곳에서 그 자리를 찾는 것은정말 못할 짓입니다. (눈이 핑핑 돕니다. -_-a)
사실 이것은 '규칙'은 아닙니다.또한 다분히 유지보수적인 측면이고요.
'별로 필요 없겠는걸...' 이라고 생각하시는 분들께서는 무시하고 넘어가셔도 상관 없다는 말씀입니다.
하지만실무에선 이런식으로 쓰고 있으며, 이런 방식에 적응되면 장점이 많더라는 말씀을 드리고 싶었습니다.
어쨌든 15~34 줄을 통하여 strSQL 이라는 변수에는 참으로 긴 문장이 입력이 되었습니다.
자 그럼이제는 36줄을 보도록 하시지요.
Set objDBConn = Server.CreateObject("ADODB.Connection")
이 짧은 한줄에 아주 심오한 의미가 담겨져 있습니다.. ^^
ASP에서는 우리가 DB에 접근할 수 있도록 자체적으로 내장된 컴포넌트를 제공해 주는데, 이 DB 관련
컴포넌트를ADO(ActiveX Data Objects) 라고 부릅니다. 그 ADO 라는 컴포넌트 안에는 여러가지 개체가
존재하는데요.그 중에서도 DB와의 연결을 담당하는 개체가 방금 사용한 Connection 개체 가 되겠습니다.
사용 방법은 위에서보시는 바와 같이 Server.CreateObject 라는 명령어를 이용해서 objDBConn 이라는
변수에Connection 개체의 인스턴스를 생성 합니다. 그리고 그 녀석(objDBConn)을 사용하게 되는 것이죠.
조금 어려운 내용일 것입니다. 이부분은 이해가 잘 안가시더라도 그냥 고개를 끄덕이시면서 따라와 주시기를
바랍니다. 어차피 이부분은 앞으로 지겹도록 사용해야 하는 부분이고, 사용하다보면 나름대로 정도 들 것이니까요. ^^
기억해야 하는 것은 이것입니다.
DB와 연결하기 위해서 Connection 이라는 개체의 인스턴스를 생성했다. 그것이 바로 objDBConn 이라는 녀석이다..
'인스턴스가 머야? 인스턴트 식품은 알겠는데.. 인스턴스는 도무지 모르겠단 말이쥐.' 라는 분들께서는 보아 주십시오.
예전에 저는 '서유기'를 참 재미있게 보았던 기억이 납니다. TV 에서도 만화로 자주방영해 주었고요.
서유기의 주인공인 손오공은 머리카락을하나 뽑은 다음에 훅~ 하고 불면 그 녀석이 손오공으로 되는..
아주특별한 재주가 있었습니다. 분명 그 녀석도 손오공이 맞지요. 생김새도, 하는 짓도.. (일종의 분신이죠)
인스턴스가 그와 같은 개념입니다. 원래의 개체(original)가 있는데 그 개체를 복사해서 그 개체가 하는 모든 기능을자신도 할 수 있게끔 하는 녀석.. 그것이 바로 인스턴스입니다. 조금은 이해가 되시는지요?
그 objDBConn 이라는 인스턴스를 사용하여 실질적으로DB와 연결을 하고,또원하는 내용을 저장할 수 있게 됩니다.
그럼 이제 DB와 연결이 이루어지는 38 줄을 보시겠습니다.
objDBConn.Open "test", "sa", ""
윗줄에서는 Connection 개체의메소드인 Open 메소드를 사용하는데요. 이 메소드는 인자 세개를 필요로 합니다.
첫번째는 DSN(Data Source Name), 두번째는 userID, 세번째는 password 입니다.
첫번째 인자인 DSN은 우리가 지난 시간에 만들었던 DB의 이름 "test" 가 되겠습니다.
두번째 인자인 userID는 역시 지난 시간에 ODBC 등록시 입력했었던 "sa"(system administrator)가 되고요.
세번째 인자인 password는 sa에 대응되었던 비밀번호가 되겠습니다.
지난 시간에 sa 의 비밀번호를 바꾸시라고 간곡(?)하게 말씀을 드렸었는데...
그때 혹시 비밀번호를 바꾸셨다면 바뀐암호를 여기에 입력하시면 됩니다. (참 착한 분들이세요.. ^^)
이제 DB와 연결이 되었으니 우리가 해야 할일은 strSQL 이라는 변수에 저장되어진 SQL 문을 'board' 라는
테이블에 저장하는 일일 것입니다. 그것도 또한 objDBConn 이라는 인스턴스를 사용합니다.
40줄이 되겠습니다.
objDBConn.Execute strSQL
이번에도 Connection 개체의 메소드를 사용하는데요. 이번에는 'Execute' 라는 메소드입니다.
이 메소드는 뒤에 있는 strSQL의 구문을 실행하는 역할 을 합니다.
즉, strSQL 안에 있는 구문이 실행되면서.. 실질적으로 DB에 저장하는 작업 은 여기서 이루어집니다.
이렇게 모든 작업이 이루어졌다면 우리가 36줄에서 생성했던 objDBConn 이라는 인스턴스를 없애주어야 하는데요.그 작업이 42~43 줄에 있습니다.
objDBConn.Close - Open을 해주었으니 당연히 Close도 해주어야 하겠지요?
Set objDBConn =nothing- objDBConn 이라는 인스턴스를 해제합니다.
자, 이렇게 Connection 개체의 인스턴스를 이용해DB를 열고, 저장을한 후 DB와의 연결을 닫고, 인스턴스를해제하면우리가 오늘 알아보고자 하는 모든 작업은 완료가 됩니다.
마지막으로 45~50 라인은 '자바 스크립트'를 이용하여 저장이 성공함을 알려주고, 페이지를 이동시키는 역할을 합니다.
47줄을 보시면 다음과 같은 소스가 있습니다.
alert("등록 되었습니다");
이 부분은 사용자에게 등록이 완료되었다는 간단한 정보 화면을 제공합니다. 다음 그림처럼요.
<그림 13>
그리고 48 줄의 location.href="../list.asp";는 현재 페이지를 상위 폴더에 있는 list.asp 라는 페이지로 이동시켜주는 역할을 합니다.
(물론 지금은 'list.asp' 페이지를 만들지 않았기 때문에 다음과 같은 화면이 뜰 것입니다.)
<그림 14>
이렇게 'regist.asp' 와 'regist_ok.asp' 를 거치게 되면사용자가 입력한 정보들이 DB에 저장되게 됩니다.
정말 저장이 되어 있는지 그럼 같이 한번 확인해 보도록 하겠습니다.
'시작 -> 프로그램 -> Microsoft SQL Server -> Enterprise Manager' 를 실행해 주시고요.
지난 시간에 만들었던 'test' DB 내에 있는 'board' 라는 테이블을 찾아주시기 바랍니다.
찾으셨으면 다음 그림처럼 'board' 테이블에서 마우스 오른쪽 버튼을 클릭하시고요.
'Open Table -> Return all rows' 를 실행해 주십시오.
<그림 15>
그랬을 때 다음과 같은 화면을 보신다면 성공적으로DB에 정보를 입력하신 것입니다.
<그림 16>
만약 'regist.asp' 에서 정보를 입력했을 때,<그림 13> 과 <그림 14>의 화면이 나오지 않고 에러메시지가 뜬다면'regist_ok.asp' 를 잘못 입력하셨을확률이 높습니다.
(특히40 줄인 'objDBConn.Execute strSQL ' 에서 에러가 난다면 그것은 15~34 줄의 SQL문에서의 오류입니다)
이럴 경우 주변의 잘하는 분들께 물어보시거나, 주위에 그런 분이 안계시다면제게 메일을 주십시오.
(메일을 주실때에는 에러메시지 를 꼭 같이 보내주셔야 합니다. '에러 났어요!!!'그러면 제가 어떻게 알겠습니까? -_-a) /옮긴 글