Outsider's Dev Story: .NET/ASP 카테고리 글 목록https://blog.outsider.ne.kr/Stay Hungry. Stay Foolish. Don't Be Satisfied.2024-03-15T16:01:32+09:00Textcube 1.10.7 : Tempo primoASP에서 업로드컴포넌트 사용시 Server.CreateObject의 "잘못된 클래스 문자열" 오류Outsiderhttps://blog.outsider.ne.kr/3652009-08-25T03:18:06+09:002009-08-25T03:18:06+09:00ASP는 JSP의 cos.jar같은 소스단의 업로드기능을 제공하고 있지 않기 때문에 보통 서버의 업로드기능을 하는 컴포넌트를 설치해야 합니다. 국내에서는 상용으로 DextUpload가 있고 무료로는 UpDownExpress나 <a href="http://www.websupergoo.com/abcupload-1.htm" target="_blank">ABCUpload</a>, <a href="http://www.tabslab.com/kr/product/upload10/" target="_blank">TABS Upload</a>가 있습니다.(ABCUpload는 이제 무료버전은 제공하고 있지 않은 듯 하군요.)<br><br>어쨌든 설치된 컴포넌트의 객체를 생성해서 사용하게 됩니다.<br><br><div style="margin-left: 40px;"><span style="color: rgb(255, 118, 53);">Set Upload = Server.CreateObject("TABSUpload4.Upload")</span><br></div><br>위처럼 사용하며 어느 컴포넌트나 거의 동일한 듯 합니다. 문자열에는 각 컴포넌트에 맞는 이름이 들어갑니다.<br><br>원래는 저렇게 하면 되야 되는데 컴포넌트가 정상적으로 설치되었음에도 불구하고 아래와 같은 오류메시지가 나타났습니다.<br><br><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1166176271.gif" alt=""잘못된 클래스 문자열" 오류메시지 " height="54" width="261" /></div><br><blockquote>서버 개체, ASP 0177 (0x800401F3)<br>잘못된 클래스 문자열입니다.<br>/commons/upload.asp, line 6</blockquote><br>6번라인이 컴포넌트의 객체를 생성하는 코드가 있는 라인입니다.<br><br>처음에는 컴포넌트가 잘못 설치된 것으로 생각했는데 여러가지 컴포넌트를 설치해 보아도 동일한 문제가 계속되었습니다. 원래 저 오류는 Server.CreateObject에 문자열을 잘못주었을때만 나타나야 하는데 정확히 잘 주었음에도 위와같은 오류가 나타났습니다.<br><br>여러가지를 찾아보다가 <a href="http://support.persits.com/show.asp?code=PS01032622" target="_blank">도움이 될만한 글</a>을 찾았습니다. Registry에 등록이 안되어 있을때 저 오류메시지가 나오는데 권한이 없을 때도 같은 현상이 나타난다는 내용입니다.<br><br><span style="color: rgb(204, 153, 0);">[실행]에서 "regedit"로 레지스트리 편집기에 들어가서 [HKEY_CLASSES_ROOT]에서 해당 컴포넌트의 이름(ProgID)을 찾습니다.</span> TABS Upload의 경우에는 TABSUpload4.Upload라는 이름으로 등록이 되어 있습니다. <span style="color: rgb(204, 153, 0);">해당 ProgID의 사용권한에 "Everyone"을 추가하고 모든 권한을 줍니다.</span><br><br><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1167559411.gif" alt="레지스트리에서 ProgID에 권한추가화면 " height="437" width="425" /></div><br>위와같이 추가하면 정상적으로 업로드 컴포넌트를 사용할 수 있습니다.<br><p><strong><a href="https://blog.outsider.ne.kr/365?commentInput=true#entry365WriteComment">댓글 쓰기</a></strong></p>MySQL "can't return a result set in the given context" 오류메시지Outsiderhttps://blog.outsider.ne.kr/3402009-05-31T15:27:31+09:002009-05-31T15:27:31+09:00ASP로 MySQL을 사용하고 있었습니다. 디비연결해서 쿼리실행하고 결과값받아서 사용하는 웹에서는 아주 일반적인 작업이지요. 그런데 Stored Procedure를 사용하려고 하는데 문제가 생겼습니다. 디비연결은 ODBC를 사용하고 있었습니다.<br><br><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1292957812.gif" alt="사용자 삽입 이미지" height="118" width="405" /></div><br><span style="color: rgb(255, 118, 53); font-weight: bold;">"PROCEDURE PROCEDURENAME can't return a result set in the given context"</span>라는 오류메시지입니다. result set을 사용할 수 없더니 이리저리 해봐도 해결책을 찾을 수 없었습니다. 해당 오류메시지에 대해서는 <a href="http://www.mysqlkorea.co.kr/sub.html?mcode=manual&scode=01_1&m_no=23328&cat1=1399&cat2=1401&cat3=1426&lang=k" target="_blank">MySQL 메뉴얼</a>에 언급이 있었지만 이리저리 찾아본 결과 PHP나 C에 해당하는 내용인것 같았습니다. 스토어드 프로시져는 크게 이렇다할 게 없는 SELECT쿼리로 결과값 받아오는 정도였습니다.<br><br>쓰고있는 라이브러리쪽 문제인가 해서 라이브러리를 완전히 걷어내고 ASP에서 직접 디비 붙어서 수행해 보아도 결과는 마찬가지였습니다. <span style="color: rgb(204, 153, 0);">일반적인 SELECT쿼리를 사용했을때는 괜찮았는데 Stored Procedure를 사용하면 위의 에러메시지가 나타났습니다.</span> MySQL은 5.0.27 Community 버전이었습니다. <br><br>Stored Procedure가 문제인지 ODBC가 문제인지 의심하고 있었는데 <span style="color: rgb(204, 153, 0);">범인은 ODBC였습니다. 정확히 어떤부분의 동작때문인지까지는 파악하지 못했지만 MySQL ODBC 3.51 Driver를 사용하고 있었는데 버전이 맞지 않아서 지원이 제대로 되지 않은 것입니다. ODBC를 5.1.5버전으로 업그래이드하니까 문제는 바로 해결되었습니다.</span><br><br>ODBC 5.1버전은 MySQL사이트에서 <a href="http://dev.mysql.com/downloads/connector/odbc/5.1.html" target="_blank">다운로드</a> 받을 수 있습니다. 윈도우에 경우 다운로드 받은 후 인스톨러로 설정하면 [제어판] - [관리도구] - [데이터 원본 (ODBC)] 에서 드라이버탭에 가면 <br><br><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1041367881.gif" alt="사용자 삽입 이미지" height="389" width="544" /></div>MySQL ODBC 5.1 Driver 가 설치된 것을 볼 수 있습니다. <br><br><pre class="line-numbers"><code class="language-vb">
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open("DRIVER=MySQL ODBC 5.1 Driver;SERVER=서버아이피;DATABASE=디비이름;UID=사용자이름;PWD=비밀번호;")
</code></pre><br>커넥션 연결 드라이버를 위 코드처럼 MYODBC방식으로 MySQL 5.1 ODBC Driver를 이용해서 하면 됩니다.<br><p><strong><a href="https://blog.outsider.ne.kr/340?commentInput=true#entry340WriteComment">댓글 쓰기</a></strong></p>이클립스에서 Visual Source Safe 사용하기Outsiderhttps://blog.outsider.ne.kr/3382009-05-29T01:57:02+09:002009-05-29T01:57:02+09:00먼저 VSS 얘기를 좀 하겠습니다. 이전에는 주로 Subversion을 사용했었는데 지금은 <a href="http://en.wikipedia.org/wiki/Revision_control" target="_blank">SCM</a><sup style="font-family:tahoma;"><a href="https://blog.outsider.ne.kr/338#footnote_338_1" id="footnote_link_338_1">1</a></sup>으로 MS의 Visual SourceSafe(이하 VSS)를 사용중에 있습니다. 대세가 SVN이라고는 하지만 실제 VSS를 사용하는 것은 처음인데 너무 불편했습니다. 익숙하지 않아서 불편한 것인지 아니면 툴 자체가 불편한 것인지 고민하면서 좀 만져보았는데 불편하긴 마찬가지였습니다.<br><br>SCM을 바꾸기엔 무리가 있었고 같은 MS툴인 Visual Studio에도 제대로 붙지 않았습니다. VSS자체가 프로젝트 기반으로 되어 있기 때문에 닷넷등의 개발에는 괜찮았지만 프로젝트 단위로 진행되지 않는 ASP같은 경우에는 Visual Studio에서 제공하는 VSS연동 기능을 전혀 사용할 수 없었기 때문에 별도의 VSS 클라이언트를 통해서 Check In/Out을 한 뒤에 소스수정을 해야했는데 이런 SCM행위자체가 개발성능을 떨어뜨린다고 느껴졌기 때문에 보통 불편한 것이 아니었습니다. Visual Studio에서 파일을 찾고 수정이 필요하면 VSS클라이언트에서 같은 파일 찾아서 체크아웃하고 수정끝나면 코멘트 남기면서 체크인을 해야하는 일련의 흐름은 소스형상관리의 장점을 무색하게 할만큼 번거로운 일이었습니다.<br><br>SVN에 어느정도 익숙해 져있기 때문일 수도 있겠지만 저는 VSS보다 SCM이 훨씬 좋게 느껴졌습니다. 그 가장 큰 이유중에 하나가 <span style="color: rgb(204, 153, 0);">형상관리가 SVN은 commit단위인데 반해 VSS는 파일단위로 이루어졌습니다. 하나의 기능 추가 또는 수정을 하기 위해서는 보통 여러개의 파일을 손댈 수 밖에 없는데 그럴경우 SVN은 commit하면서 코멘트를 한번만 남기면 되고 해당 리비전을 통해서 관련된 파일은 쉽게 파악할 수 있는데 반해서 VSS는 파일단위라서 체크인할 때마다 같은 내용의 코멘트를 남겨야 하고 이 커멘트를 통해서 관련된 파일을 찾아내야 합니다. 또한 VSS는 Lock방식이기 때문에 실제 수정을 하지 않더라고 로그를 찍어보기 위해서 잠시 파일을 수정하는 것 때문에도 체크아웃을 해주어야 했습니다.</span> VSS만의 장점을 제가 못 느낀 것인지는 모르겠지만 저한테는 SVN쪽이 형상관리라는 면에서 더 좋다고 느껴지더군요.<br><br><br><br><br><br>그래서 여러가지 알아본 뒤에 이클립스로 IDE를 변경하기로 했습니다. 그러자면 이클립스에서 VSS를 사용해야 했기에 <a href="http://sourceforge.net/projects/vssplugin" target="_blank">VSS Plugin</a>을 설치했습니다. 저는 1.6.2버전을 사용했고 여기에는 Eclipse 3.3 Europa를 지원한다고 써있지만 3.4 Ganymede에서도 잘 돌아가고 있습니다.(아직까지는...) 플러그인 설치가 완료되면 <span style="color: rgb(204, 153, 0);">[Preference] - [Team]</span> 에 VSS란이 생긴 것을 볼 수 있고 여기서 여러가지 옵션을 설정할 수 있습니다.<br><br><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1396966895.gif" alt="프로젝트의 Share Project 실행 " height="425" width="479" /></div><br>프로젝트의 메뉴에서 <span style="color: rgb(204, 153, 0);">Team - Share Project</span>에 가면 해당프로젝트에 대한 SCM을 설정할 수 있습니다.<br><br><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1254646156.gif" alt="Share Project에서 SCM 선택화면 " height="411" width="525" /></div><br>이미 설치되어 있는 CVS와 SVN이 리스트에 나오고 새로 설치된 VSS Configuration Wizard도 나타납니다. VSS를 사용할 것이므로 VSS를 선택합니다.<br><br><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1122112372.gif" alt="VSS 프로젝트 설정화면 " height="412" width="524" /></div><br>VSS 서버 설정을 합니다. 당연히 VSS 서버는 설정되어 있다는 가정하입니다. 사용자 아이디와 비밀번호를 지성하고 VSS Directory에 VSS서버의 위치를 지정합니다. Source dir는 현재 이클립스 프로젝트의 위치이고 Relative mountpoint는 VSS서버와 매핑할 위치입니다. VSS 전체를 연결하는 것이 아니라 그 아래 특정한 폴더만 따로 매핑시킬 수 있습니다.<br><br><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1252246312.gif" alt="설정의 VSS Mappings 화면 " height="341" width="550" /></div><br>설정된 프로젝트의 Properties의 VSS Mappings를 보면 설정된 매핑정보다 나오고 하위프로젝트의 경로별로 추가해서 매핑시킬수 있습니다. 저로서는 이렇게 할 수 있는 부분이 제일 좋더군요 원하는 부문만 사용할 수 있어서요.<br><br><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1394909527.gif" alt="Checked Out 뷰 " height="114" width="550" /></div><br>ASP 개발시에 Visual Studio에서 VSS를 쓰면서 가장 불편했던 것중 하나가 Check Out된 리스트입니다. 개발을 하다보면 여러파일을 손댈 수 밖에 없는데 Check Out한 파일을 따로 적어놓을 수도 없고 일일이 찾아다니기도 불편했습니다만 이클립스에서는 Checked Out이라는 View를 제공해서 현재 Check Out파일을 한눈에 파악할 수 있기 때문에 Check In을 놓칠 염려는 없습니다. <br><br>당연히 Check In할 때 주석을 달 수 있습니다. Preference에서 VSS부분에 Asf for comment on add/check-in에 체크를 해주어야 Check In할 때 자동으로 주석을 묻는 창이 나타납니다. <br><br><br>처음에는 어차피 불편한거 에디팅이나 익숙한 이클립스를 쓰려고 했지만 이것저것 찾아서 조합하고 나니까 완전히 흡족하진 않지만 제법 괜찮네요. <br><div class=footnotes><div class=footnotes_in><ol class=footnotes><li id="footnote_338_1">Source Code Management <a href="#footnote_link_338_1">[Back]</a> </li>
</ol></div></div><p><strong><a href="https://blog.outsider.ne.kr/338?commentInput=true#entry338WriteComment">댓글 쓰기</a></strong></p>이클립스 프로젝트에 로컬폴더 연결하기Outsiderhttps://blog.outsider.ne.kr/3372009-05-26T03:56:27+09:002009-05-26T03:56:12+09:00이클립스에 로컬폴더 및 파일을 연결할 일이 생겼습니다. 정확한 표현이 잘 생각 안나는데 여기서 로컬폴더 및 파일이라는 것은 C드라이브, D드라이브 같은 내 로컬내의 파일들을 얘기하는 것입니다. 이클립스가 자바에 초점이 맞춰져 있으므로 자바개발을 할 경우 프로젝트 기반으로 하기 때문에 로컬파일을 연결할 이유가 없기는 하지만 다른 언어를 개발하기 위해서 필요했습니다.<br><br>저같은 경우는 ASP개발을 위해서 필요했습니다. ASP의 경우 과거에는 인터데브가 있었지만 이젠 거의 쓰지도 않고 비쥬얼 스튜디오 계열에서 지원하고 있기는 하지만 IDE라고 부르기도 머할 정도로 지원정도는 빈약한 편입니다. 오랜동안 이클립스를 쓰다가 비쥬얼 스튜디오를 쓰고 있는데 안쓰던 IDE라 익숙하지도 않고 불편한게 한두가지가 아니었습니다. ASP의 경우 코딩에서 중요한 코드인텔리전스 지원도 미약한 편이라서 과감히 비쥬얼 스튜디오를 버리고 에디팅하는데 익숙한 이클립스로 갈아탔습니다. <br><br>그러자니 로컬파일을 연결해야할 필요가 있었습니다. ASP는 프로젝트 기반이 아니니까요. 이클립스 기반의 IDE인 Aptana의 경우에는 File뷰가 있어서 로컬브라우징이 가능하기 때문에 당연히 있을줄 알았는데 이클립스에는 File뷰가 존재하지 않았습니다. 처음엔 좀 당황했지만 다른 방법으로 연결할 수 있는 방법이 있었습니다.<br><br><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1192355261.gif" alt="이클립스 New Folder 설정 " height="463" width="428" /></div><br>프로젝트에 폴더를 추가하는 창에서 하단의 Advanced를 클릭하면 <span style="color: rgb(204, 153, 0);">"Link to folder in the file system"</span>이 나타납니다. 여기서 이 폴더를 연결시킬 파일시스템의 폴더를 연결할 수 있습니다. <br><br><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1352244294.gif" alt="Link폴더가 생성된 화면 " height="57" width="261" /></div><br>Link된 폴더가 연결되면 위와같이 폴더에 Link표시가 납니다. 해당 폴더는 링크의 역활을 할뿐 실제 파일은 해당폴더의 위치에 있습니다. 일반적인 파일탐색기과는 좀 다른 방식이기 때문에 초기에 파읽을 읽어들이는 과정이 필요하기 때문에 파일이 많은 경우 꽤 많은 시간이 걸릴수도 있습니다. 그리고 이유는 모르겠지만 그때그때 읽는 것이 아니라 <span style="color: rgb(204, 153, 0);">미리 어느정도 읽어놓는 방식(?)이기 때문에 외부에서 파일이 수정될 경우 파일을 읽으려고 하면 out of sync가 발생합니다. Refresh를 하면 정상적으로 이용이 가능하지만 실시간으로 탐색하는 것 보다는 불편한건 사실입니다. </span><br><br>그래도 아주 사용못하는 것 보다야 나으니.....<br><p><strong><a href="https://blog.outsider.ne.kr/337?commentInput=true#entry337WriteComment">댓글 쓰기</a></strong></p>IIS에서 네트워크상의 서버에 연결하기Outsiderhttps://blog.outsider.ne.kr/932007-12-31T01:59:49+09:002007-12-31T01:59:49+09:00기본적으로는 IIS와 파일서버가 별도로 되어 있는 경우에 IIS에서 파일서버를 연결하기 위해서 사용하는 방법인데 이를 사용하면 다른 경우에도 타 서버에 IIS에서 엑세스하는 방법으로 사용할 수 있다. 여기서는 편의상 두 서버를 웹서버와 파일서버로 구분하도록 하겠다.<br /><br />일단 내가 처음에 생각했던 웹서버에서 네트워크드라이브로 파일서버를 잡고 IIS에서 이 폴더를 가상디렉토리로 잡는 방법으로는 엑세스 하는게 불가능하다.<br /><br />이 방법의 문서는 MS문서에 나와있는듯하고(현재 링크가 바뀐것 같은데 못찾겠다.) 같은 문서가 인터넷상에 많이 돌아다니긴 하고 그거 보고하면 그리 어렵진 않은데 일단 나중에 하기 쉽게 좀더 정리를 했다.<br /><br /><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1276615359.jpg" alt="사용자 삽입 이미지" height="360" width="447" /></div><br />IIS가 있는 서버에서 사용자를 추가한다. [관리도구] - [컴퓨터관리]에 로컬사용자 빛 그룹에서 추가할 수 있다. 머 이름은 맘대로 해도 되지만 옵션은 화면처럼 "암호 변경할 수 없음"과 "암호 사용기간 제한 없음"에만 선택해 준다.<br /><br /><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1120065438.jpg" alt="사용자 삽입 이미지" height="424" width="635" /></div><br />위에서 만든 계정의 소속그룹에서 기본적으로 추가 되어 있는 Users그룹을 삭제하고 Guests그룹을 추가한다.<br /><br /><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1352384109.jpg" alt="사용자 삽입 이미지" height="639" width="651" /></div><br />[관리도구] - [로컬 보안 정책]에서 로컬 로그온에 위에서 만은 newuser사용자를 추가해 준다.<br /><br />이렇게 사용자를 추가하는 과정을 파일서버에서도 동일하게 해준다. 여기서 이 방법을 약간 설명하자면 양쪽에 똑같은 사용자를 만들고 권한을 준다음에 접근을 하면 접근당한쪽에서는 자신의 로컬에 같은 계정이 존재하기 때문에 IIS상에서도 접근이 되도록 한 것이다.(불가능 한 것은 약간의 편법을 써서 가능하게 한 느낌이다.. ㅎ)<br /><br /><br /><br />이제 웹서버의 IIS로 가 보자.<br /><br /><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1182305037.jpg" alt="사용자 삽입 이미지" height="544" width="536" /></div><br />사용하고자 하는 웹사이트의 설정에 들아가서 디렉토리 보안에 익명엑세스 계정에 위에서 만든 newuser계정을 추가해주고 비밀번호를 입력해 준다. 이때 "IIS에서 암호를 제어할 수 있음"은 체크를 풀어준다.(체크되어 있으면 암호를 입력할 수 없다.)<br /><br /><br />이번엔 파일서버 쪽으로 가보자.<br /><br /><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1044938515.jpg" alt="사용자 삽입 이미지" height="697" width="466" /></div><br />접근하고자 하는 폴더의 속성에 들어가서 공유설정을 해주고 newuser사용자를 추가해 준 후에 <FONT color=#ff7635>"변경"과 "읽기"</FONT>권한을 허용해 준다.<br /><br /><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1366874375.jpg" alt="사용자 삽입 이미지" height="447" width="466" /></div>그리고 보안탭에 가서 동일하게 newuser를 추가해 주고 여기서는 <FONT color=#ff7635>"수정", "읽기", "쓰기"</FONT>권한을 허용해 준다. <br /><br /><br />이렇게 하면 준비는 모두 끝이 났다.<br /><br />이게 UNC형식으로 해당폴더에 접근할 수 있다. <FONT color=#ff7635>\\파일서버명\공유폴더명\</FONT>의 형식으로....<br /><br /><br />덧) 이미 사용중인 서버였기 때문에 나같은 경우에는 이렇게 했을 때 파일서버 연결을 잘 되었지만 기존의 IIS가 로컬폴더에 대해서 권한을 제대로 얻지 못하는 문제가 생겼었는데 newuser를 만드는 대신에 IIS의 인터넷 계정인 "IUSR_컴퓨터이름"계정을 똑같이 주면서 이 계정을 사용해서 위에처럼 연결을 해서 해결을 했다.<p><strong><a href="https://blog.outsider.ne.kr/93?commentInput=true#entry93WriteComment">댓글 쓰기</a></strong></p>