MS SQL 2005를 수동으로 삭제하는 방법.. 설치시 오류가 났거나, 언인스톨 과정에서 오류가 난 경우, Visual Studio 설치시 지 맘대로 설치를 해버리는 쓸데없는 MS SQL 2005의 인스턴스들을 제거하고 싶은 경우에 사용..

Microsoft의 페이지들은 사이트 개편이 URL이 언제 어떻게 바뀌어버릴지 모르니 몇가지 핵심 내용을 메모해둘 필요가 있음..  원문은 http://support.microsoft.com/kb/909967/ko 참조..

아래 명령어를 실행하여 삭제하고 싶은 인스턴스를 선택하면 삭제됨..

"C:\Program Files\Microsoft SQL Server\90\Setup Bootstrap\ARPWrapper.exe" /Remove
설치된 인스턴스가 여러개인 경우, 언인스톨을 하고 나면 설치지원 프로그램들이 같이 삭제가 되기 때문에 설치 CD를 사용해 설치지원 프로그램만 설치한 후 취소를 하여 종료하고 다시 위의 명령어를 실행하여 삭제하고 싶은 인스턴스 갯수만큼 반복해야 함.. 불편하지만, 다른 방법 없음..
Posted by 미친병아리

댓글을 달아 주세요

ActiveX를 대신할 방법으로 Flex와 Silverlight를 저울질 중인데.. Flex는 약간 맛을 좀 봤으니, 오늘은 실버라이트 구경을 좀 해보기로 했다.. 그런데 볼만한 책이 하나도 없다.. 나온 책도 베타버젼을 가지고 쓴 책이 몇권 있을 뿐.. 앞으로 책들이 좀 나오긴 할 모양인가 본데, 그럴바엔 아예 실버라이트2 베타1을 보는게 나을거 같아 마침 눈에 들어오는 샘플이 있어 요걸로 실습을 해봤다..

사전준비..
실습예제는 Coding4Fun 사이트에서 봐뒀던 예제..
Deepzoom application in 15 minutes (Coding4Fun 이라는 사이트는 Microsoft 기술에 대한 재미난 예제들을이 많이 소개되는 사이트다..) 자세한 설명은 원문인 Intro to Silverlight 2 Video Tutorial: DeepZoom for Dummies! 에서 친절한 설명을 볼 수 있다..

설명도 친절하게 잘 되어 있고, 따라해보면 나도 쉽게 결과를 확인해볼 수 있다.. 오~ 이거 신기하구만.. IE에서도 확인해보고, FF에서도 확인을 해봤다.. 양쪽에서 모두 잘 보인다.. 내친김에 얼마전에 설치한 우분투에서도 확인을 해봤다.. 그런데, 헉~

아직도 지원하는 플랫폼이 Flash 혹은 FLEX 보다 부족하다.. 리눅스에서 안된다니.. 이런 된장.. 실망이다..
Silverlight Installation Files 페이지에 가보면 윈도우즈와 MacOS 밖에 지원을 못함을 확인할 수 있다.. Silverlight 2 Beta 1은 좀 나을까 싶어 확인해봤는데 똑같다.. 리눅스에서는 안된다..

사실 리눅스에서 되고 안되고는 큰 문제가 아닐 수도 있지만, 분명 실버라이트의 초기 발표에서는 리눅스를 포함한 모든 플랫폼에서 지원되는 클라이언트를 배포하겠다고 했었다.. (내가 기억을 잘 못 하는 것일까?) 하지만, 지금은 언제부터인지 몰라도 리눅스는 빠져있다..

어도비가 아무리 날고 긴다 하더라도 몇년내로 Flex는 Silverlight에게 밀릴 것이 거의 확실하다고 생각한다.. Adobe가 볼랜드를 인수한다던지, 구글에 인수 당한다던지 하는 이변이 없는한 ActionScript로 .NET을 당해낼 재간은 없다.. 하지만, 그동안은 여전히 Flex가 강세다.. 딴거 다 재쳐두고 플랫폼과 브라우저에서 실버라이트가 밀린다.. MacOS 정도만 더 지원하는 상황이라면 그냥 ActiveX로 버티는게 올바른 선택 아닐까?

굳이 실버라이트 혹은 Flex로 만들 필요가 있을까? FF 하나 더 지원하기 위해서? Flex로 만들었다가 다시 실버라이트로 바꾸느니 실버라이트가 좀 더 쓸만해질때까지 기다리는 동안 ActiveX로 버텨보는게 최선이라는 생각이 든다..

물론, SI 하면서 고객사에서 실버라이트로 꼭 만들어줘 하는 상황이 발생하는 경우 그때가서 보려면 부담스러우니 틈틈히 봐두는 것도 나쁘진 않겠다.. 그것도 실버라이트 보다는 .NET 3.5와 XAML에 중점을 두는 것이 여러모로 이득일 것이라는 생각이 든다.. 어차피 같이 사용하게될 공통분모만 보는 것이지.. 실버라이트, 실버라이트 하지만 정말 요긴하게 사용될 만한 곳은 아직은 딱히 없는 것 같다..

2008.04.26
DeepZoom을 멋지게 활용한 예 : Deep Zoom Viewer Lite 1.3 Update

2008.05.03
SilverLight에서 소켓을 사용하는 샘플 : Silverlight 2 Socket 예제
Posted by 미친병아리

댓글을 달아 주세요

  1. Favicon of https://dm4ir.tistory.com BlogIcon park.suhyuk 2008.04.20 06:27 신고  댓글주소  수정/삭제  댓글쓰기

    미병님께서 프로그래밍 이야기로 티스토리에도 계정이 있으셨구나.... 1년이 지난 오늘에야 알게되었네요 ^^ ~~ 좋은 글 잘 볼께요 ~~

    silverlight가 ms가 새롭게 밀고있는 플랫폼 플러그인 이라고 되어있군요 (http://www.microsoft.com/korea/msdn/asp.net/bb187358.aspx) 여태까지 이름만 들어보다가 이제서야 한번 찾아보게 되었습니다. 이래서 블로그를 해야하는 거군요 ㅎㅎ
    여전히 ms 진영과의 얘기에서는 activex가 화두가 되는군요 -_-;;

    잘은 모르지만, 예전에 경험을 되살려보면, 적어도 Client 단에 설치기반의 ActiveX의 경우 application을 작성할 때에 더 많은 문제가 생기지 않나요? 요즘은 그런 경우가 잘 없는지 모르겠지만서도 ^^ 예전에 ms activex로 프로젝트를 할 때에 windows 95/98/me/2000 등등 모두를 보유하고 있는 회사였는데 정말 그때 당시에 저는 프로그래머가 아니라 activex 설치기사 였습니다. 그 넓디 넓은 회사를 돌아다니면서 설치해보고 현상알아보고 했던.... OTL
    여튼 silverlight가 무엇이 되었든지 간에 .net 기반의 server application 지원 플랫폼이라고 한다면, 적어도 위와 같은 문제는 줄어들 테고, python이라 ruby같은 강력한 스크립트 언어를 지원하는 것도 사실상 좋은 모델인 것 같다는 생각은 듭니다.

    하지만, 미병님 말씀처럼, 이러한 개발에 대한 몇 가지 장점으로만 silverlight를 SI에서 선택하기에는 아직 무언가 설득력이 없는건 사실이네요 -_-;;;

    " ms여~~ 생각보다 linux 기반의 개발자도 많단말이닷!! "
    괜히 미병님 블로그에서 하소연을 ~~ 하핫 즐거운 하루 보내세요

    • Favicon of https://madchick.tistory.com BlogIcon 미친병아리 2008.04.20 18:37 신고  댓글주소  수정/삭제

      리눅스를 지원하지 않는 것이 결정적인 단점이 될 수는 없겠지만, 분명 초기에는 지원을 하겠다 해놓고 이제와 슬그머니 지원대상에서 빼버린 것은 참 안타깝습니다..

  2. Favicon of http://skymaum.tistory.com BlogIcon 하늘맘 2008.04.21 01:36  댓글주소  수정/삭제  댓글쓰기

    FLEX의 리눅스 지원문제는 아무래도 내/외부적인 문제가 있은듯 한 느낌이 드네요..내부적으로는 기술상 리눅스와 통합의 어려움(Win api와 리눅스 api가 상당히 다르겠죠??), 통합을 하더라도 늘어나는 설치용량(현재 Max를 3M정도로 잡고 있는것 같더군요)을 잡지 못하면 말짱..꽝.. 외부적으로는 만들고나서 API등 정보를 공개해야 하는데..잘못하면 .NET의 핵심 기술이 노출될수 있다는 것때문이 아닐까 추측해봅니다..^^

    • Favicon of https://madchick.tistory.com BlogIcon 미친병아리 2008.04.27 10:46 신고  댓글주소  수정/삭제

      Silverlight 클라이언트의 리눅스 버젼이 나오고 있지 않은 것은 무슨 이유인지 아직 알 수는 없죠.. Microsoft의 내부 사정인지, 전략적인 이유인지.. (첫 단어는 실버라이트를 지칭하는 것인데 FLEX로 잘 못 쓰신 것이지요? FLEX의 클라이언트는 Flash 9으로 리눅스에서도 잘 동작합니다.. 최근에 우분투 설치후 FF에서 플래쉬 설치를 했는데 9이 설치되더군요..)

  3. Favicon of http://days.eglsoo.com BlogIcon 팅이 2008.04.21 09:32  댓글주소  수정/삭제  댓글쓰기

    리눅스에서 실버라이트 돌리는 방법이 아예 없는 것은 아닙니다.
    http://mono-project.com/Moonlight 를 참고하시면 되는데, 전에 한번해봤는데 조금 부족한 점이 있는 것 같지만, 돌아가긴 합니다. ^^;

    • Favicon of https://madchick.tistory.com BlogIcon 미친병아리 2008.04.27 10:49 신고  댓글주소  수정/삭제

      음.. Mono는 .NET 플랫폼을 리눅스상에서 구현하기 위한 오픈소스 프로젝트로 알고 있습니다.. 실버라이트가 .NET의 기술들을 사용하긴 하지만, 별도의 RIA 기술로 mono와는 상관이 없습니다.. 즉, .NET이 구동된다고 실버라이트가 되는 것은 아닙니다..

  4. Favicon of http://gilverlight.net BlogIcon 길버트 2008.04.27 13:17  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 길버트라고 합니다.

    "별도의 RIA 기술로 mono와는 상관이 없습니다.. 즉, .NET이 구동된다고 실버라이트가 되는 것은 아닙니다.."

    미친병아리님 말씀 맞으신데요.
    그래도 mono 프로젝트 안에서 진행 되는 Moonlight 프로젝트는 본 목적이 linux 플랫폼에서
    Silverlight를 구동하기 위한 것이니 조금 더 기다려 보시면 좋을 듯합니다.

    • Favicon of https://madchick.tistory.com BlogIcon 미친병아리 2008.04.28 00:14 신고  댓글주소  수정/삭제

      오~ moonlight라는 프로젝트가 있었군요.. 기다려 보면 좋은 소식 나올지도 모르겠습니다.. 하지만, Microsoft가 직접 해야지 오픈소스로 결과물을 기대하기는 좀 거시기 합니다..
      같은 이유로 mono의 결과물도 시작된지가 언제인데 아직까지도 지지부진 한 것 보면 큰 기대는 안 갑니다..
      Flash 9이 맥OS나 리눅스 버젼은 없고, 이건 오픈소스에서 받아 사용해라고 한다면, Flash 9은 리눅스를 지원한다고 말할 수는 없는 것이죠..

기능 개선상 스토어드 프로시저가 몇개 추가되었는데, 갑자기 스토어드 프로시저 호출이 안되는거다.. 예전 스토어드 프로시저는 잘 호출되고 실행도 되는데 새로 추가된 스토어드 프로시저는 호출이 안된다.. 도대체 뭐가 문제인가.. 몇일을 끙끙 거리고 해매도 답도 안나오고..

스토어드 프로시저 내부에 select 가 2개 이상 있는 것도 아니고.. 이렇게 수정해보고, 저렇게 수정을 해봐도 해결이 안되더군..

2008/03/18 19:16:18 at ets.biz.admin.siteadmin.TestMngMgt.TestMngTO.testMngMarking2
(TestMngTO.java:500) [Debug] call proc_answer ex ( ?, '' ) start
2008/03/18 19:16:18 at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run
(ThreadPool.java:683) [Error] com.microsoft.sqlserver.jdbc.SQLServerException: 서버 커서는 둘 이상의 SELECT 문이 있는 원격 저장 프로시저나 저장 프로시저에서 사용할 수 없습니다. 기본 결과 집합이나 클라이언트 커서를 사용하십시오.
    at ets.biz.admin.siteadmin.TestMngMgt.TestMngTO.testMngMarking2(TestMngTO.java:522)
    at ets.biz.admin.siteadmin.TestMngMgt.TestMngBLC.testMngMarking2(TestMngBLC.java:154)
    at ets.biz.admin.siteadmin.TestMngMgt.TestMngBLC.doTheWork(TestMngBLC.java:51)
 
에러메시지를 가지고 구글 검색을 해봤는데도 검색도 안되고.. 결국, 안되는 영어로 메시지를 영어로 바꾸어 검색을 해서 영문에 해당하는 에러메시지를 찾아냈다.. 그 메시지로 Microsoft의 MSDN 사이트에서 검색을 하니 알려진 버그라는 사실을 찾았다.. 문제는 SQL Server JDBC 드라이버의 버그였으며, 최신버젼으로 업데이트 하니 해결되었다..
 
2006년에 수정된 버그인데, 몇날 몇일을 이것 때문에 시간을 허비한 것인지.. preparedStatement를 MS SQL 2000에서 수행할때 나는 버그였다.. 2005에서는 발생하지 않았다..

Posted by 미친병아리
TAG Java, JDBC, MSSQL

댓글을 달아 주세요

몇년전에 몇번 만들어보고는 만들일이 없었는데, 최근에 ASP에서 호출하여 쓸 수 있도록 하는 콤포넌트를 만들게 되었다.. 오랜만에 새로 만들어 보려니 예전 소스를 봐도 기억도 안나고 삽질의 연속.. 아~ 이래서 기록을 남겨둬야 한다니깡.. 워드 프로세서 문서가 저장된 BLOB 필드를 읽어 웹브라우저에서 보여줄 수 있는 png 이미지 파일로 저장하는 기능을 하는 녀석이었는데, 다른 기능은 어렵지 않게 구현이 가능했는데 COM에 관련된 내용 때문에 삽질이 많았다.. 몇년전에 보고 책꽂이에 먼지만 쌓이던 책을 오랜만에 꺼내 찾기도 하고, 인터넷 검색도 하면서 찾은 내용들을 정리해보자.. VC++ 6.0 기준이라 좀 그렇긴 하다만..

아래 내용의 개발환경은 VC++ 6.0 with SP6 and Platform SDK 2001 Feb, Windows XP Professional with SP2, IIS 5.0에서 이루어졌다..



콤포넌트 만들기
IIS용 컴포넌트는 ATL COM 컴포넌트로 만든다.. 먼저 프로젝트를 생성해야 하는데, 다음과 같은 순서로 따라하면 된다.. 프로젝트 생성후 문제가 없는지 빌드해서 점검해본다..
  1. File 메뉴 > new > Projects 탭에서 ATL COM AppWizard 선택..
  2. Location에서 저장할 경로를 지정하고, Project name에 원하는 이름 입력 후 OK 클릭..
  3. 다음 화면에서 IIS의 ASP 프로그래밍에 사용할 것이므로 DLL로 선택..
  4. 3번 화면에서 MFC를 사용하고 싶다면 Support MFC를 체크한다.. UI에 관련된 클래스들은 아무런 소용이 없지만, CString 등 자료구조 및 유틸리티성 클래스들을 활용하고 싶다면 클릭해야 한다.. 나중에 프로젝트 만들고 나서 MFC를 사용할 수 있도록 만드는 방법도 있을텐데, 찾아보덜 않아 모르겠다.. 난 그냥 무조건 클릭한다.. MFC 관련 클래스들 사용하고 싶어서..
  5. 빌드는 주로 Debug와 Release MinDependency, 이렇게 2개를 주로 사용한다.. 물론, 상황에 따라서는 다른 옵션도 사용하게 되고, 유니코드를 고려한 코딩을 하게 되면 유니코드로 빌드할 수 있다.. 특히, 서버 컴포넌트의 경우 서버에서 실행되는 코드로 조금의 성능향상도 중요할 수 있기 때문에 유니코드로 빌드하면 좋다.. WinNT 계열 (NT를 포함하여 이후 버젼.. 2000, XP, 2003 서버, Vista 등)에서는 유니코드가 기본이며, 하위호환을 위해 다른 인코딩 방식을 지원하는 것이므로 아무리 작은 오버헤드라도 줄이는 것이 중요한 서버에서는 유니코드로 작성하는 것이 좋다.. MinSize와 MinDependency의 차이는 잘 모르겠다..

이렇게 만들어진 코드는 초기화 등의 경우 외에는 실제 코드가 들어가는 것은 적고, 실제 기능 및 동작을 위해서는 소스코드를 추가해야 한다.. 이 클래스가 실제 동작을 담당하는 코드이다..

  1. Insert 메뉴에서 New ATL Object를 선택한다..
  2. Category에서 Objects를 선택하고, Objects에서는 ActiveX Server Component를 선택한다..
  3. 클래스 이름을 입력한다.. Prog ID에 나타난 값이 ASP에서 Server.CreateObject로 생성시 넘기는 값이된다.. Prog ID 값을 잘 기억해 두도록 한다.. 물론, 잊어버려도 "프로젝트명.클래스명 "으로 조합하면 된다.. 최악의 경우에는 GUID를 가지고 레지스트리 편집기에서 검색을 해보면 Prog ID 문자열 값을 알아낼 수도 있다..

    사용자 삽입 이미지


  4. Attributes, ASP 탭 부분은 디폴트로 옵션을 체크한 후 마친다..

사용자 삽입 이미지

사용자 삽입 이미지


이렇게 추가된 클래스에 필요한 메쏘드, 프로퍼티를 추가하게 된다.. 일반적인 함수 및 멤버함수 등을 추가하면 된다.. 필요하다면 이런 클래스를 필요한 만큼 컴포넌트에 계속해 추가해 넣을 수 있다.. 이런 경우 DLL은 하나지만, Server.CreateObject를 분리하여 호출할 수 있게된다..



메쏘드와 프로퍼티 추가
ASP 페이지에서 호출할 수 있도록 메쏘드와 프로퍼티를 추가한다.. 메쏘드는 함수호출을 위해, 프로퍼티는 약속된 값에 접근하는데 편의성을 제공하기 위해 사용된다.. 특정 단위기능을 수행하기 위해서는 메쏘드 호출을, 상태값이나 특정 기능 수행후 결과값을 접근하기 위해서 프로퍼티를 사용한다.. 클래스에서의 멤버함수와 멤버변수와 비슷하다 생각할 수 있다..


메쏘드 추가/수정/삭제하는 방법
클래스 뷰 트리에서 ATL 객체를 추가해 넣을때 입력했던 클래스 이름이 C로 시작하는 것이 있을 것이고, I로 시작하는 것이 보인다.. C로 시작하는 클래스 트리를 펼쳐보면 그 안에 다시 I로 시작하는 인터페이스가 보이는데, 트리상에서 최상단에 I로 시작하는 인터페이스도 같이 보이니 그리로 접근한다.. 물론, C로 시작하는 클래스 밑에서 똑같은 작업을 해도 동일한 작업을 수행할 수 있다..
  1. 마우스 우측버튼을 클릭하여 Add Method를 클릭..
  2. 새로 나타난 다이얼로그 창에 메쏘드 이름과 파라미터 리스트를 입력..
  3. 파라미터 입력시 데이터형과 규칙에 맞게 입력을 해준다..

이 다이얼로그에서 리턴값을 선택할 수 없는 황당함을 느끼게 되는데, 이는 나중에 처리할 것이니 여기서는 일단 넘어간다.. 나도 처음에 이 다이얼로그를 보고 어찌나 황당하던지..

데이터형은 COM에서 사용할 수 있는 자료형들이 많이 있지만 long, double, BSTR, VARIANT 정도만 알고 있으면 된다.. long과 double은 C++에서와 동일하니 같은 의미로 사용하면 되고, 문자열의 경우는 BSTR을, 한 자료형의 배열이나 여러 자료형이 섞인 구조체의 경우는 VARIANT를 사용한다..

아울러 COM 인터페이스를 기술하는 방법의 특이한 점이 메쏘드 패러미터 앞에 [in], [out], [out,retval] 이라는 내용을 명시한다는 점.. 메쏘드 추가시 이 부분까지 같이 명시를 해서 표기를 해주면 더 좋다.. 물론, 여기서는 생략하고 나중에 직접 하나하나 고쳐도 된다.. 생략하면 모두 [in]으로 간주한다..

일단 만들때는 위저드를 통해 뭔가 UI가 제공되지만, 수정과 삭제를 할때는 그러한 UI가 제공되지 않는다.. VC++ 6.0의 한계중 하나인데 일관된 UI를 제공해주지 않는다.. 만들때 뭔가 UI가 나왔으니 수정이나 삭제시에도 기대를 하게 되는 것이 사람 심리인데, 이러한 당연한 기대를 완전 무시하는 것이다.. 수정과 삭제는 편집기 열고 내가 알아서 잘 해야 한다.. 만들때 내가 직접 만들지 않았으므로 어디 어디 코드들이 추가되었는지 알 길이 없는데, 이럴때에는 메쏘드 이름을 가지고 Find In Files를 잘 해서 필요한 곳 빠지지 않고 잘 수정 혹은 삭제가 되도록 신경써야 한다.. 첨 해볼때만 좀 황당하지, 한번만 해보면 별거 아니라는 생각이 든다.. VC++ 6.0에 뭔가 많이 바라지도 않아왔었고, 손으로 열심히 다듬던 코드들인데 새삼스러울 것도 없다..


프로퍼티 추가/수정/삭제하는 방법
프로퍼티는 메쏘드와 방식이 완전 동일하다.. 메쏘드를 추가, 수정 및 삭제를 할줄 안다면 프로퍼티도 동일한 방법으로 하면 된다..



리턴값 넘기기

리턴값을 넘기고 싶은 경우는 패러미터 리스트에서 가장 마지막 패러미터에 [out, retval]를 붙여주면 된다..
예를들면 맨 마지막 파라미터를 [out,retval] int* iResult 라고 했으면 int 값을 리턴으로 넘기는 것이며, [out,retval] BSTR* sFileName 이렇게 하면 문자열을 리턴값으로 넘긴다는 의미가 된다..

따라서, SetImagePath([in] BSTR sPath, [out,retval] int* iResult) 이렇게 메쏘드를 선언했다면 파라미터는 문자열을 넘기는 것 하나이며 정수값을 리턴하는 메쏘드가 되는 것이다..
호출할때는 대략 result = objTestCom.SetImagePath ("경로명") 이런 모습으로 사용하게 된다.. 리턴값을 파라미터 리스트에 정의한다는게 좀 어색하기는 하다.. 아무튼, COM 컴포넌트에서는 이렇게 만들어야 한다.. 이상하지만, 따르는 수 밖에 없다..



리턴값으로 Variant 넘기기
C에는 배열과 구조체라는 것이 있으며 다른 언어에도 이와 상응하는 자료구조가 있을 것이다.. 문제는 언어마다 다른 자료구조를 COM 이라는 환경에서 어떻게 동일한 인터페이스로 처리할 것인가.. 고민의 결과는 바로 VARIANT 이다.. 따라서 기본 자료구조로 해결 안되는 모든 자료구조는 바로 이 Variant로 해결을 해야 한다.. 대부분 배열을 위해 많이 사용된다.. 이를 좀 더 응용하면 여러 상황에서 활용될 수 있을 것이다.. 기본적으로 Variant는 다른 자료형들을 하나로 묶어서 관리할 수 있다..

STDMETHODIMP CTestVariant::ReturnVariant(int iValue, VARIANT *pVal)
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState())

    VARIANT v;
    v.vt = VT_VARIANT | VT_ARRAY;

    int iRowCount    = 3 ;
    int iColumnCount = 2 ;
   
    SAFEARRAY* pSA;
    SAFEARRAYBOUND bnd[2]={{iRowCount,1}, {iColumnCount,1}};
    pSA = SafeArrayCreate(VT_VARIANT, 2, bnd);  
   
    VARIANT* pVar;
    SafeArrayAccessData(pSA, (void**)&pVar);

    for(int i=0 ; i<iRowCount ; i++)
    {
        for(int j=0 ; j<iColumnCount ; j++)
        {
            char szPrint[1024] ;
            sprintf(szPrint, "%d, %d", i+1, j+1) ;

            int iIndex = i + j * iRowCount ;

            USES_CONVERSION ;
            pVar[iIndex].vt = VT_BSTR;
            pVar[iIndex].bstrVal = SysAllocString(T2OLE((TCHAR*)szPrint));
        }
    }    

    SafeArrayUnaccessData(pSA);
    v.parray = pSA;
   
    *pVal = v;

     return S_OK ;
}


Variant를 리턴값으로 넘기는 방법에 대해서는 kindlion님의 글을 보고 참조를 하였다.. 다만, 글에 약간 잘못된 부분이 있어 이 부분은 약간 수정을 했다.. Variant에서는 C++에서와 VB에서 서로 반대로 들어가는 것이 아니고, n*n 배열을 만드는데 있어 C++에서는 연속적인 메모리 공간이고 이를 논리적으로 분리하여 n*n 배열을 만드는 것이니 메모리에 접근할때 논리적으로 구성된 배열처럼 접근하도록 계산을 좀 해야 하는데 이 계산이 kindlion님 말처럼 항상 반대는 아니라는 것.. kindlion님의 글에서는 마침 반대로 되었을 뿐, 이 상황은 배열을 몇 바이 몇으로 만드느냐에 따라 달라질 수 있다.. 해서 n*n 크기의 일반적인 상황에서도 데이터를 제대로 넣을 수 있도록 수정을 해야했다..

iRowCount, iColumnCount 값을 바꿔가며 배열의 생성초기화를 바꿔도 VB에서는 제대로된 값을 가져올 수 있도록 수정된 부분은 위의 샘플코드에서 색상표시가 된 부분이다..   



테스트하기
자, 그럼 이렇게 작성된 코드를 ASP에서 어떻게 활용할 수 있는가 함 보자..

<%
    set objTestCom = Server.CreateObject("Test.TestVariant")

    Dim data
    data = objTestCom.ReturnVariant (1)

    for i=1 to UBound(data,1) step 1
        for j=1 to UBound(data,2) step 1
            response.write data(i,j) & "<br><br>"
        Next
    Next
   
    set objTestCom = nothing
%>


2차원 배열을 받아 화면에 출력해주는 ASP용 코드이다.. 직접 호출을 해주면 C++ 코드에서 넣었던 인덱스 값들이 제대로 출력되는 것을 확인할 수 있을 것이다..

테스트하는 방법은 위의 코드를 ASP 파일로 저장한 후에, IIS가 설치된 사이트 혹은 가상디렉토리에 넣은 후 해당 URL을 호출하면 실행된 결과를 확인할 수 있다.. 테스트하는 PC가 컴포넌트를 빌드하는 PC와 다르다면 개발하는 PC에서 DLL 파일을 테스트용 PC에 옮긴후, 도스창을 열어서 DLL 파일이 복사된 경로로 이동한 후에 다음과 같은 명령을 실행시켜줘야 한다.. "regsvr32 DLL파일명"



디버깅하기

Visual Studio는 강력한 디버깅 환경을 제공하는 것으로 유명한데, IIS 서버 콤포넌트 개발시에는 어떻게 이 강력한 디버거를 활용할 수 있을까? 일반적인 상황처럼 사용할 수는 없다.. 조금은 번거로운 방식으로 디버깅을 해야한다..

  1. 빌드를 한다..
  2. 웹브라우저를 실행시켜 테스트용 페이지를 호출한다..
  3. 작업관리자를 실행시킨다.. 프로세스탭으로 가서 dllhost.exe 프로세스를 찾아 PID를 확인한다.. 여러개가 있는 경우에는 프로세스를 실행시킨 사용자가 인터넷 서비스 계정인 것을 찾는다..
  4. VC++에서 디버깅을 한다.. Build > Start Debug > Attacth to Process 를 클릭.. 새로 뜬 다이얼로그 창에서 Show System Processes를 클릭..  3번 과정에서 확인한 PID를 갖는 프로세스를 선택한 후 OK 버튼을 클릭하면 디버깅이 시작된다..
  5. 디버깅 하고자 하는 코드가 담긴 소스코드 파일을 열어 브레이크 포인트를 걸고 디버깅을 한다..

프로젝트의 워크스페이스 파일이 닫혀 버리니 원하는 소스코드 파일 찾기도 귀찮아지고, 디버깅을 종료했다 다시 시작할때마다 이 과정을 반복해야 하니 여간 귀찮은게 아니긴 하다.. 하지만, 그래도 웹서버와 연동이 되어 돌아가는 DLL 파일을 이렇게라도 디버깅 할 수 있다는게 어딘가.. 이런 방법이 없었다면 별 수 없다.. 천상 로그파일에 로그 찍어가며 디버깅 하는 수 밖에..

디버깅 하는 방법 자체는 VC++ 6.0의 디버거를 사용하는 것과 동일하니 이 내용은 생략한다..

여러번 반복해보면 알겠지만, 다른 프로그램이 추가로 실행되지 않는다면 3번 과정을 생략할 수 있다.. 바로 4번으로 넘어가도 우리가 원하는 프로세스가 뭔지 알 수 있다..

위와 같은 과정을 계속해서 반복해야 하는데 이를 좀 더 편하게 하는 팁이 몇개 있다.. 내가 주로 사용하는 팁인데, 우선 개발환경과 테스트 환경을 한데 붙여 한 PC에서 수행하는게 편하다.. 이를 위해서는 XP의 경우 반드시 Professional 이상을 사용해야 한다.. 그 이하에서는 IIS가 설치되지 않기 때문에..

두번째로는 VC++을 하나는 소스코드 수정 및 콤포넌트 빌드용, 다른 하나는 디버깅용 이렇게 2개를 동시에 띄워놓고 사용하는 것이 편하다.. 일반적인 디버깅 환경과 달리 Attach Process를 통한 디버깅은 소스코드 워크스페이스가 닫혀 버리기 때문이다.. 매번 열고 닫고 하기가 귀찮으니 하나는 코드수정 및 빌드용으로, 다른 하나는 디버깅 전용으로 2개를 동시에 실행시켜두고 사용하는 것이 편하다..

마지막으로, 정말 귀찮은 작업중에 하나가 웹서버를 계속 내렸다 올렸다 하는 것이다.. IIS는 서버 컴포넌트를 한번 올리면 메모리에 올려두기 때문에 코드를 수정한 경우 수정된 코드가 반영되지 않는다.. IIS가 파일을 물고 있기 때문에 VC++이 새로운 DLL을 덮어쓰지 못하기 때문이다.. 따라서 IIS를 재기동 시키는 일이 자주 반복되는데 이거 여간 귀찮은게 아니라서 마우스 더블클릭 혹은 커맨드라인에서 쉽게 실행시킬 수 있도록 bat 파일을 하나 만들었다..

net stop W3SVC
net stop IISADMIN
net start IISADMIN
net start W3SVC


위의 내용을 담은 텍스트 파일을 하나 만들고, 파일명을 ReStartIIS.bat 으로 바꾸면 된다.. 명령어는 XP에 IIS 5.0을 사용했을때 기준이며, Windows 2003의 경우에는 명령어가 약간 다를 수도 있다.. 이 bat 파일을 VC++의 Tools 메뉴에 등록시켜두면 단축키로 쉽게 웹서버를 내렸다 올렸다 할 수 있다..



Posted by 미친병아리

댓글을 달아 주세요

  1. Favicon of http://blog.naver.com/opnc BlogIcon opnc 2008.02.08 22:30  댓글주소  수정/삭제  댓글쓰기

    콤.. 생각만 해도 끔찍하네요.. 그 어려운걸.. 세상에서 가장 어려운 언어?라고 생각합니다.

  2. 최준열 2008.03.17 15:33  댓글주소  수정/삭제  댓글쓰기

    제가 딱 한 번 서버 컴포넌트 제작해 본 일 있는데 그 땐 XML Web Service로 했었죠...vs.net에서 웹 서비스 프로젝트 만들기 선택해서 만들었던 거 같은데...XML데이터가 양이 엄청나서 속도가 너무 느리더군요.

    웹 뒤져보니 어떤 분은 XML데이터를 serialize해서 보내는 식으로 속도를 빠르게 하더군요. 쩝...나름대로 XML Web Service는 열심히 공부했었는데...(졸업논문이 XML Web Service로 전력공식 계산하기였음) 속도 문제하고 여러가지 문제 때문에 현업에선 잘 안 쓰이더군요. -_-

    • Favicon of https://madchick.tistory.com BlogIcon 미친병아리 2008.03.23 16:08 신고  댓글주소  수정/삭제

      속도 문제 때문에 잘 안 씁니다..
      개념과 아이디어는 좋았는데, 속도 문제를 해결 못해 아쉽게 되었지요.. 하지만, 나중에 다시 조명을 받을 수도 있으니 나름 열심히 공부한데 너무 아쉬워 마세요..

  3. 으헉 2008.10.02 20:17  댓글주소  수정/삭제  댓글쓰기

    이거 소스 고대로 붙여 넣었는데
    AFX_MANAGE_STATE(AfxGetStaticModuleState())
    이부분을 에러가 나길래 주석처리 하고 빌드 했더니 빌드는 되는데
    등록하고 asp 에서 실행해 보면

    -> 인수의 개수나 속성 할당이 잘못되었습니다.: 'ReturnVariant'

    라는 에러 메시지가 나오는군요 어찌해야 하나요...? ㅜㅜ

  4. kyhtiger 2010.12.21 15:02  댓글주소  수정/삭제  댓글쓰기

    안녕하세요? 한가지 질문이 있어요.

    ASP를 갓 시작한 초보입니다.

    제가 VS.NET 2003 에서 ATL 프로젝트를 하나 생성하고,, 클래스를 하나 만들고..
    메서드를 추가해서 COM DLL 로 만들어서 ASP 페이지에서 호출을 하려고 하는데요..

    시험적으로 간단히 ASP에서 문자열을 받아 그 문자열을 파일에 쓰는 함수를 하나 만들었습니다.

    그런데 문제는 제 PC환경에서는 제대로 작동을 하는데...
    다른 PC에서 꼭 같은 환경인데도 작동이 되지 않습니다.
    무슨 원인인지 서버 프로그램도 처음이고 ASP에서 COM DLL 만들어 이용하는 것도 처음입니다.

    COM 에 문제가 있는 걸로 생각하고 구글링을 하던 중 님의 글을 접하게 되었습니다.
    그래서 님이 위의 글에서 가르켜 주신대로 VS6.0을 깔고 그대로 만들고 했는데...
    역시 제 컴에서는 되는데 다른 PC(2대)에서 테스트 하니 감감 무소식입니다.

    혹 이런 문제도 있을 수 있는 건지 좀 알려주세요, 원인이 뭔지...

    사실 여러 포맷의 파일을 자동 변환해서 저장 해 주는 기능을 ASP에서 구현을 해야 할 요구가 제기되서 그러는데요...
    기본엔진은 DLL로 만들었구요...
    ASP와의 대면 COM DLL을 만들어서 제 컴에서는 작동이 되는데... 다른 PC에서 실행하면 무응답입니다.

    참고로 전 서버 전문가가 아니라서 테스트는 WinXP SP2 환경에서 IIS를 태우고 ASP 페이지를 하나 만들어서 IE에서 호출하는 식으로 하였습니다.
    물론 COM DLL 은 regsvr32 로 등록도 하였구요..
    제 PC에서는 잘 작동을 하는데,, 제 PC와 꼭 같은 환경의 다른 PC에서는 에러도 없이 페이지는 펼쳐 지는데... 전혀 COM의 메서드가 작동을 안합니다.
    위에서 언급한 대로 간단히 COM DLL을 만들어서 ASP에서 문자열을 받아 특정 파일에 출력하는 메서드만 만들어 테스트 해 보아도 같습니다.
    제 PC에서는 제대로 되는데 다른 PC에서 테스트 하면 에러도 나오지 않고 파일도 만들어 지지 않습니다.

    테스트 환경문제인지... 아니면 서버 쪽은 영 캄캄이니 보안적인 문제가 있는 것인지... 영 가늠이 안갑니다.
    다른 PC에 VS를 태우고 COM DLL 소스를 가져다 재빌드 해서 테스트 해도 안되네요...
    이젠 됐다 싶었는데 영 막막합니다,

    테스트한 ASP 코드는 다음과 같습니다.
    <HTML>
    <HEAD>
    <TITLE>Welcome To KGS.net</TITLE>
    </HEAD>
    <BODY>
    <CENTER>
    시작합니다.

    <%
    Dim ret
    set scrObj = Server.CreateObject("TestCOM.clsTest";)

    ret = scrObj.setString( "Test String!!!";)

    set scrObj = nothing
    %>

    </CENTER>
    </BODY>
    </HTML>

    setString 메서드에서는 단지 문자열을 받아 "D:\000.txt" 에 출력하는 코드뿐입니다.

    코드는
    STDMETHODIMP CclsTest::setString(BSTR str)
    {
    TCHAR tStr[1000];
    _stprintf( tStr, _T("%s";), (LPCTSTR)str);

    FILE *pf = _tfopen( _T("D:\\000.txt";), _T("a+";));
    if( pf != NULL)
    {
    _ftprintf( pf, _T("%s\r\n";), tStr);
    fclose(pf);
    }

    return s_OK;
    }
    이렇게 되었습니다.


    이렇게 하면 페이지에는 "시작합니다." 문자열이 출력되는데... 에러도 없고..
    헌데 "D:\000.txt" 도 생성이 안되고 아무 응답이 없습니다.

    Server.CreateObject("TestCOM111.clsTest";)

    이렇게 고치면 에러 페이지가 뜨는걸 봐서는 컴포넌트는 정확히 찾았다는건데....
    그리고 Task Mamager 에서 dllhost 를 찾아 보면 ..

    dllhost IWAM_NSN-921.... 이렇게 나와 있습니다.

    그런데 단지 scrObj.setString( "Test String!!!";) 만 작동이 안됩니다.

    내 PC에서는 되는데,,, 다른 PC에만 가면 두 PC에서 상태는 위의 것과 꼭 같습니다.
    다른 PC에서도 regsvr32 로 등록을 하였구요 D드라이버도 존재합니다.

    이런 상황에 접해 보시지 못하셨나요??

    그리구 또 하나는 ASP 페이지에서

    scrObj.setString( "str=[텍스트 get OK]";)

    이렇게 호출을 하면 출력되는 문자열은 "str=[ get OK]" 이렇게 됩니다.
    즉 한글코드가 들어 오지 않습니다.
    물론 제 PC에서 실험 할 때 경우입니다. COM DLL 프로젝트는 유니코드 환경에서 컴파일 되었구요..

    유니코드와 관련해서 구글링을 해보니 위에 <%@ CODEPAGE=65001 %> 이런 코드를 넣으면 될 수 있다고 해서..
    이 코드를 집어 넣었는데도 한글이 안됩니다.

    ASP 에서 DLL 쪽에 한글을 유니코드로 넘기려면 어떻게 해야 되나요?

    염치없이 많은 부탁드렸습니다.
    좋은 하루 되시구요,, 제 안타깜 좀 풀어주세요....부탁입니다.

Platform SDK는 OS나 서버제품, IE, DirectX, 기타 H/W 관련된 기능추가 및 개선 등의 내용을 담고 있는 샘플소스코드 및 라이브러리를 제공하는 패키지다.. 사실 다른 개발툴에서는 도움이 안된다.. 거의 VC++ 전용이라고 봐도 된다..

그래서 그런지 요즘엔 나오지 않는다.. .NET 개발환경으로 옮겨가길 바라는 Microsoft의 전략 때문일까? 아무튼, VC++ 개발자들에 대한 지원이 많이 줄고 있다는 느낌이 들고, 이것도 그런 측면으로 이해될 수 있다.. 하지만, 이런 VC++ 개발자들을 이제 잊혀진 존재로 취급하는 것은 아주 좋지 않은 정책이다.. VC++ 개발자에 대한 지원을 Microsoft가 끊어버렸다는 질책 및 아쉬움이 괜히 나오는게 아니다.. 그래도, 이번 VS.NET 2008에서는 VC++에 대한 지원을 대폭 늘렸다고 하는 이야기가 들리니 좋은 현상이다..

사용자 삽입 이미지

Platform SDK는 개발툴 버젼에 따라서 연동이 되는 버젼이 따로 있다.. 최신의 버젼에서는 이전 개발툴과 제대로 호환이 되지 않는다.. 따라서 하드디스크 용량이 좀 낭비되는 듯한 느낌이 들더라도, 각 개발툴 버젼에 맞춰서 각각 별도로 설치를 해두는 것이 좋다.. 그렇지 않은 경우 괜한 삽질 및 시간낭비가 될 가능성이 높다..

VC++ 6.0을 사용하기 위해서는 MS Platform SDK 2001 Feb이 6.0을 지원하는 마지막 버젼이다.. 참고로 MSDN은 October 2001 (위의 그림)이 VC++ 6.0을 지원하는 마지막 버젼이다.. MSDN도 VC++ 6.0용은 별도로 설치를 해놓아야 한다.. 물론, MSDN은 IDE에서 연동이 안된다는 부분 말고는 별도로 설치를 하지 않아도 되긴 한다.. Platform SDK는 빌드가 제대로 안된다던지 하는 현상이 일어나는 것에 비하면 큰 문제는 아니지만, IDE와 연동이 안되는 것은 아무데서나 F1을 누르면 관련 도움말을 볼 수 있는 기능을 포기해야 하는 것이니 용량이 된다면 각각 별도로 설치하는 것이 좋겠다..

사용자 삽입 이미지

VC++ 2005를 위해서는 MS Platform SDK 2005 April이 마지막 버젼이다.. 사실 그 이후로 나온 Vista 같은 OS를 위해서 관련 플랫폼 SDK가 나와야 하는데 정식으로 나오지 않는거 보면 안타까운 일이다.. MSDN 라이브러리는 가장 최신의 버젼이 계속해서 나오고 있는데, 왜 플랫폼 SDK는 최신으로 업데이트가 안되고 있는 건지.. Microsoft의 특별한 공식입장 발표 같은 것도 없는거 보면 웬지 이제 VC++ 개발은 구닥다리가 되어 버린 것만 같은 느낌도 든다.. 뭐, Microsoft에서 어쩌던 상관은 없긴 하지만..

아무리 그래도 그렇지, 이렇게 2개나 설치해야만 하는걸까? 최신판 하나만 설치해놓고 살면 어떤 일이 발생할까? 대표적으로 VC++ 6.0에서 COM 관련 (ActiveX 컨트롤, IIS 서버 콤포넌트 등) 소스를 빌드할때 디버그 모드로 제대로 빌드가 되지 않고 컴파일 에러가 난다.. 왜 이런 에러가 나는지는 모르겠지만, 아무튼 해결책은 VC++ 6.0에 맞는 플랫폼 SDK를 설치하는 것이 가장 바람직한 해결책이다..

아마 곧 새 플랫폼 SDK가 나오지 않을까 기대를 해보며.. 앞으로는 각각 SDK별로 나뉘어 (DirectX는 별도 SDK로 제공) 제공되면서 플랫폼 SDK 라는 이름이 없어질 지도 모르겠지만, 예전처럼 플랫폼 SDK라는 이름으로 모두 제공되는 것이 편하다는 생각이 든다.. 각각의 SDK들이 너무 종류도 많고 용량이 너무 커져서 플랫폼 SDK라는 이름으로 모두 묶이지 않을지 모르겠다..

Posted by 미친병아리

댓글을 달아 주세요

  1. Favicon of http://gunman.tistory.com/ BlogIcon 파이팅건맨 2007.12.26 21:07  댓글주소  수정/삭제  댓글쓰기

    아... 안녕하세요? 저 기억하시는지 모르겠습니다.
    커널메니아를 통해 글을 나눴던 때가 한참이 지나버렸네요...>.<
    (airpage.org 주인입니다. 그때 링크 감사드립니다.^^)
    이글루스에서 이리로 갈아 타셨나보네요, 어쩌다 들러 흔적 남기고 갑니다.^^

    • Favicon of https://madchick.tistory.com BlogIcon 미친병아리 2007.12.30 14:53 신고  댓글주소  수정/삭제

      네~ 안녕하세요.. 홈페이지 기억 납니다..
      커널메니아라.. 정말 오래전 이야기네요.. ㅎㅎㅎ
      잘 지내시죠? 이글루스에서 갈아탄 것은 아니고 두개 모두 운영중입니다..
      새해 복 많이 받으세요~

  2. Favicon of http://www.sysnet.pe.kr BlogIcon 정성태 2008.01.05 15:54  댓글주소  수정/삭제  댓글쓰기

    음... PSDK 는 이제 Windows SDK 라는 이름으로 계속해서 나오고 있는 중입니다. 간단히, Windows SDK = Platform SDK + .NET 이지요. 가장 최신 버전의 Windows SDK 는 Windows Server 2008 의 내용을 포함해서 다음의 링크에서 제공되고 있습니다. (물론, Vista 용 Windows SDK 도 이미 제공되고 있습니다.)

    Windows® SDK for Windows Server® 2008 and .NET Framework version 3.5
    ; http://www.microsoft.com/downloads/details.aspx?FamilyID=74DD6E2D-89C6-4E1E-AF00-FC7D70F15439&displaylang=en

    아래의 링크도 도움이 되실 듯 싶군요. ^^
    Microsoft Windows SDK Blog
    ; http://blogs.msdn.com/windowssdk/default.aspx

  3. Favicon of https://sinbizui.tistory.com BlogIcon 챈들러전 2008.01.20 02:18 신고  댓글주소  수정/삭제  댓글쓰기

    미친병아리님도 프렌즈 자주 보시나 보군요?
    저도 10시즌 전부를 한 20번씩은 본듯싶네요.. 물론 아직도 보구있구요.
    앞으로 프렌즈라는 공통관심사에 대해 자주 얘기해요 ^^

    • Favicon of http://madchick.tistory.com BlogIcon 미친병아리 2008.01.20 20:51  댓글주소  수정/삭제

      저는 전 에피소드를 2번 정도 본 것 같습니다..
      하지만, 다시 봐도 계속 웃게 되는게 아주 재미납니다.. 특히 영어공부로 활용하면 아주 좋을 것 같다는 생각을 많이 했었지요..

  4. Favicon of http://blog.naver.com/parz85 BlogIcon parz85 2008.10.13 04:44  댓글주소  수정/삭제  댓글쓰기

    죄송합니다... 허락없이 퍼가겠습니다ㅠ.ㅠ

  5. 2008.11.12 09:42  댓글주소  수정/삭제  댓글쓰기

    Platform SDK february 2003 (VC6 지원 마지막 버젼)
    http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm

    DirectX SDK : DirectX 9.0 SDK Update - (Summer 2004) VC6지원 마지막 버젼
    http://www.microsoft.com/downloads/details.aspx?FamilyID=fd044a42-9912-42a3-9a9e-d857199f888e&DisplayLang=en

    Windows® Server 2003 R2 Platform SDK Full Download
    현재까지 나온 Platform SDK마지막 버젼, 2005지원
    이후로 Windows SDK로 이름이 변경된듯 합니다.
    http://www.microsoft.com/downloads/details.aspx?FamilyID=e15438ac-60be-41bd-aa14-7f1e0f19ca0d&DisplayLang=en

    ^^ 여기 계셨군요~ 자주 놀러오겠습니다 ㅎㅎ

  6. Favicon of http://www.steroids-for-sale.com BlogIcon HGH 2011.11.10 03:46  댓글주소  수정/삭제  댓글쓰기

    미친병아리님도 프렌즈 자주 보시나 보군요?
    저도 10시즌 전부를 한 20번씩은 본듯싶네요.. 물론 아직도 보구있구요.
    앞으로 프렌즈라는 공통관심사에 대해 자주 얘기해요 ^^

자바 코딩을 할 일이 생겼는데, 쿼리문을 날리는데 Prepared Statement를 사용하면 좋다는 생각이 나서 사용해보기로 했다.. 평소엔 신경도 쓰지 않던 내용을 일도 많고 바쁜데 하필 적용시켜보겠다고 생각을 했는지는 모르겠다.. 하긴, 물론 이렇게 한다고 해서 시간이 더 걸리거나 어려운 방법은 아니다..

Prepared Statement는 DB 서버가 쿼리문을 캐쉬해두어 성능을 높일 수 있게 해주는 알고리즘을 개선 시키기 위해 등장한 것으로, 패러미터가 계속해서 바뀌는 쿼리문도 캐쉬를 해둘 수 있도록 하기 위해 고안된 것이다.. 즉, 변화되는 부분을 ? 로 처리해두고 실제 실행될때는 실행될때마다 다른 값이 매칭되어 실행되도록 하는 방식이다.. 솔직히 정말로 빠른지 어떤지는 직접 느껴보지는 못했다..

사용자 삽입 이미지

일반적인 쿼리문 날리는 것과 별반 다를바 없지만, 쿼리문 작성할때 변경되어야 하는 부분을 ?로 표시하여 작성을 하고, 그 부분의 값을 setParam 함수 호출을 통해 값을 할당한다는 부분이 조금 다른 부분이다.. setParam 이라는 함수 내부에서는 psmt.setString(1, 변수값); 과 같이 몇번째 ?를 어떤 값으로 바꿔야 하는지를 명시하는 코드가 들어가 있다..

사실, 그냥 막 쿼리 날리는 것과 이렇게 수정하는 것과의 차이는 거의 없고 어려운 일이 아니기 때문에 여기까지는 좋았다.. 그런데 사용중 쿼리문이 에러가 나는 현상이 발생.. 로그를 찍어서 어떤 쿼리문이 날아가고 있는지 보고 싶은데, 이런 젠장.. PraparedStatement의 쿼리 내용을 찍을 수 있는 방법이 없는거다..

자바에서 기본적으로 제공해주는 방법이 있을 것으로 알았다.. ToString으로 하면 될 줄 알았는데, 너무 순진한 생각이었다.. 결국, 자바에서 기본적으로 제공되는 방법으로 Prepared Statement의 실제 실행된 쿼리문 모습을 알아낼 수는 없다는 것을 알게되었다..

검색을 통해 찾은 사이트에서 방법을 알아낼 수 있었다.. (참조 : PreparedStatement - ? 치환해서 로그찍는 소스, 소스 수정에 필요한 파일 다운로드 : LoggableStatement.java) 이런 기능은 자바가 기본으로 제공해주는 Prepared Statement 클래스에 들어가 있으면 좋겠구만 말이지..

사용자 삽입 이미지


이렇게 수정하고 나면, Prepared Statement로 작성된 쿼리문도 최종 수행된 쿼리문이 어떤 모습으로 날아갔는지 확인해 볼 수 있게된다..
Posted by 미친병아리

댓글을 달아 주세요

  1. mangdee 2008.04.14 22:17  댓글주소  수정/삭제  댓글쓰기

    iBatis와 log4j를 써보세용!!

데스크탑 어플리케이션 개발시 잡기 힘든 버그 중 하나가 가끔씩 일어나는 크래쉬.. 언제 죽는다, 재현을 해보기 힘든 비정상 종료상황이 발생하는 경우는 죽는 상황을 어떻게 하면 재현할 수 있다는 정보를 수집하기가 상당히 어려운 부분이 있다..

다행히 윈2000 이상의 윈도우 시스템에서는 Dr Watson 이라는 꽤 괜찮은 기본 디버거가 윈도우 시스템에 기본 탑재가 되어 있다.. 메트 피에트릭이 소개한 SEH 처리용 클래스를 활용하는 방법 보다는 훨씬 더 많은 디버깅 관련 자료를 제공해주는 덤프를 작성해 줄 수 있기 때문에 Dr Watson을 활용하는 방법이 좋다고 생각한다.. (SEH 처리용 클래스에 관련된 보다 더 많은 정보 참고)

사용자 삽입 이미지

실행시킨 모습은 위와 같은데, 로그파일과 크래쉬 덤프를 위와 같이 세팅한 대로 남겨준다.. 이렇게 남은 정보는 위에서 이야기한 기사에 소개된 SEH 처리용 클래스가 남기는 정보보다 훨씬 더 유용한 정보들을 많이 남겨준다.. 하지만, 위 그림과 같이 저장되는 경로만 내가 원하는 곳으로 저장해둔다고 동작하는 것은 아니다.. 잊지말고 반드시 해줘야 하는 작업, 하지만 막상 하려면 명령어가 생각나지 않는 작업을 해줘야 한다..

명령행에서 "drwtsn32 -i" 라고 쳐줘야 Dr Watson이 기본 디버거로 설정이 되면서 정보를 남겨주게 된다..

그럼 이 정보를 제대로 활용하는 방법은? 인터넷에서 검색을 통해 더 좋은 자료를 찾을 수도 있겠지만, 지금까지 내가 알기로는 Debugging Applications라는 책이 가장 좋은 활용법을 알려준다..

언제 죽는지 모르는 버그에 시달리고 있다면, 개발자 자신의 PC의 세팅을 이렇게 남겨두면 어떨까?

더 나아가 우리가 배포하는 사용자 PC의 환경도 이렇게 바꿔두면 어떨까? 사실 사용자의 PC 환경을 우리가 만든 어플리케이션이 맘대로 조작한다는건 상당히 기분 나쁜 일일 수도 있다.. 더구나 내가 만든 프로그램의 사용자 역시 프로그래머다.. 그런데 그 사람이 사용하는 기본 디버거가 따로 있는데, 이게 Dr Watson으로 어느날 갑자기 바뀌었다.. 이건 좀 아니긴 하다.. 하지만, 많은 경우에 기본 디버거를 바꿔버리고, 우리가 원하는 위치에 크래쉬 덤프를 남기고 그것을 우리가 수집할 수 있다면 여러 사용자 환경에서 발생하는 오류에 대한 대처에 더욱 능동적일 수 있지 않을까?

최소한 사용자 동의를 얻어 진행할 수 있는 클로즈 베타, 혹은 베타 서비스 기간에는 이를 적용하여 크래쉬에 대한 정보를 적극적으로 수집하는 것도 좋은 방법일 것이다..


추가내용 : jrogue님이 알려주신 주옥같은 정보..

1. Dr Watson은 윈도우 설치시 사용할 수 있는 기본 디버거.. 별도로 세팅하지 않아도 크래쉬 정보를 수집할 수 있다.. 난, 개발툴을 설치했기 때문에 Dr Watson이 기본 디버거가 아니었던 것이다..

2. Dr Watson에 관련된 좋은 정보

3. Dr Watson의 로그파일을 점검하는 방법에 관한 정보

음.. 이쯤되면, 무식한 덕에 제목을 완전 잘 못 달았음을 알 수 있다.. Dr Watson은 원래 윈도우즈의 기본 디버거였던 것이다.. 이름은 아마도 셜록홈즈 소설에 나오는 바로 그 왓슨 박사에서 따온 듯 하다..

Posted by 미친병아리

댓글을 달아 주세요

  1. Favicon of http://fribirdz.net BlogIcon 프리버즈 2007.11.14 20:28  댓글주소  수정/삭제  댓글쓰기

    3개월짜리 와이브로 프로모션은 많이 있는거 같아요. http://www.dotname.co.kr/event/wibro/event_wibro.htm 이런 것도 있네요~

    • Favicon of https://madchick.tistory.com BlogIcon 미친병아리 2007.11.18 13:29 신고  댓글주소  수정/삭제

      그런 이벤트는 많은데, 제가 사용하고 있는 것들 중에는 없네요.. 안타까워라.. 걍 와이브로를 위해 사용하지도 않는 서비스에 가입할 수도 없고.. 쩝..

    • Favicon of https://moonend.tistory.com BlogIcon mooni 2007.11.29 20:13 신고  댓글주소  수정/삭제

      와이브로 무료 사용이 끝났던 친구가 있는데, 그 기간이 끝나자 '전화국'으로 가서 해지를 하라고 말했습니다.
      사람 귀찮게 할 거라고 짐작은 했지만...

    • Favicon of http://madchick.tistory.com BlogIcon 미친병아리 2007.12.02 16:27  댓글주소  수정/삭제

      이벤트 끝나자 마자 해지라.. 완전 무료사용이군요..
      KTF는 이런 이벤트를 해야할 만큼 T-Login에 밀리고 있는건지 궁금합니다.. 아니면, 아직은 무선 인터넷 시장이 고가라 시장형성이 안된다 판단해 마케팅 차원에서 홍보를 위해 하는건지.. 그러기엔 돈이 좀 많이 드는 것 같은데.. 하긴, 그래도 블로그에 글 올라오게 만드는 것만 해도 엄청난 홍보효과이긴 하죠..

  2. Favicon of http://www.fairycat.net BlogIcon 산티아고 2007.12.10 20:57  댓글주소  수정/삭제  댓글쓰기

    어쩐지.. 본문과 관련 없는 얘기가 위에 진행되고 있는듯 하여 저도 조심스레 참견해봅니다. ^^ 와이브로 저도 3개월짜리 신청해놨는데, 처음에 몇 번 쓰다가 더이상 안씁니다. ㅠㅠ 이동하면서 인터넷을 하는건 한두번 호기심에서일 뿐. 회사나 집에선 어차피 인터넷되고.. 결론은 3개월동안 "아, 나한테 와이브로란 필요없는 놈이구나"라고 느끼게 되었달까요? 안쓸땐 쓰고싶더니만.. 물론 이런 이벤트를 통해서 KT가 홍보도 많이 되겠지만, 의외로 써보면 속도도 느리고 해서, 그다지 재미는 못 볼꺼 같다는게 제 사견입니다. ^^ 저만 해도 당장 해지.

    • Favicon of http://madchick.tistory.com BlogIcon 미친병아리 2007.12.14 19:56  댓글주소  수정/삭제

      저는 인터넷을 맘놓고 사용할 수 없는 곳에 외근을 많이 나가다 보니 유용하더군요.. 인터넷을 사용할 수 있더라도 메신저나 원격데스크탑연결이 안되는 곳이 의외로 많더라구요.. 흔히들 말하는 보안 문제로.. 원격 데스크탑 연결이 접속을 허용하는 것이 아니라 밖의 컴퓨터에 접속하는 건데도 다 막더군요.. 메신저도 별로 이해가 안가고.. 아직까진 비용이 좀 부담스럽긴 하지만, 그래도 전 유용하더라구요..

    • Santiago 2007.12.15 01:18 신고  댓글주소  수정/삭제

      말씀듣고 보니 그렇네요. 몇몇 사이트들은 너무나 철저하게 보안을 지켜서 탈이죠. ^^ 검색대 통과하는 곳은 정말 다신 가기 싫다는..ㅠㅠ

    • Favicon of http://madchick.tistory.com BlogIcon 미친병아리 2007.12.15 18:45  댓글주소  수정/삭제

      검색대 통과해야 하는 곳에서는 티로긴 같은게 있어도 사용을 못하게 되는 경우도 많습니다.. 쩝~

무척 오래된 내용인데, 블로그에 백업 차원에서.. 음, 이런 글을 스프링노트(위키)에 올려둬야 하는건가?

퀘이크 2는 소스코드가 공개된 Id Software의 유명한 FPS 게임이다.. 소스코드가 공개된 덕에 여러가지 실험(?)에 자주 사용되곤 하는데, 자바 그래픽 엔진을 테스트 하기 위해 사용되기도 하고, Visual C++ .NET의 기능 홍보(?)에 사용되기도 한다.. 이 샘플소스코드는 Microsoft MVP로 활동하던 시절, MSDN 세미나에서 사용했던 샘플이기도 한데, 2004년도에 VS 2003에 포함된 VC++을 홍보하기 위해 많이 사용되었던 샘플이기도 하다.. VC++을 가지고 아주 흥미로운 시도를 한 좋은 샘플이다..
(현재는 그 다음 버젼인 퀘이크3까지 소스코드가 공개되어 있다..)
.NET으로 포팅된 Quake 2 살펴보기
이 샘플이 흥미로운 이유는 공개된 퀘이크2 소스 (C 코드로 되어있다)를 수정하지 않고 .NET 환경에서 바로 사용할 수 있으며, 여기에 몇가지 기능을 더 추가하여 새로 추가되는 기능은 .NET 코드로 작성을 해, 두 코드가 잘 섞여 돌아가는 모습을 보여줬기 때문이다.. 유명한 게임에 내가 원하는 기능을 추가하는 흥미로운 방법으로 보여줘서 샘플로서 효과가 아주 크다고 할 수 있다..

원 게임에는 없는 기능인 레이더 기능(위에 소개된 URL들 중에서 코드프로젝트 사이트에 가보면 화면 캡쳐 이미지가 있다..)이 추가되어 있는데, 이 기능이 .NET 코드로 작성된 코드다.. 즉, C 언어로 작성된 원 게임소스는 컴파일러 및 개발툴에 의해 자동으로 .NET 어셈블리로 빌드되어 추가된 기능과 함께 .NET 환경에서 실행이 되는 것이다..

간단한 빌드 설정만 바꾸면 쉽게 .NET 어셈블리로 빌드가 되는 놀라운(?) VC++의 기능이라 할 수 있겠다.. 예전에 작성된 많은 C 코드들을 쉽게 재활용할 수 있는 기회가 열리기 때문이다.. 하지만, C++ 코드들은 이렇게 되지 못하는 경우가 많아 반쪽짜리 기능 이기도 하다.. .NET을 고려하는 C/C++ 개발자들 중에는 C++ 개발자들이 더 많고, 그들이 C 코드와 C++ 코드 중 어떤 것을 더 많이 가지고 있을지는 뻔하기 때문이다..

이러다 보니 .NET 환경에서의 VC++은 정말 무슨 존재인가 하는 생각이 들기도 한다.. 허브셔터나 스탠리 리프먼 등 많은 C++의 대가들이 대거 Microsoft에 입사하여 C++을 .NET 환경에서 사용하기 편리하게 만드는 작업에 몰두하고 있다.. 이들이 블로그에 올리는 내용이나, 활동하는 뉴스그룹, 메일링 리스트에 관련 내용들이 자주 언급되며 비중도 많이 차지하고 있다.. 하지만, [C++/CLI] Mixed-Type 사용시의 메모리 해제 문제와 같은 글들을 읽어보며 드는 생각은 뭐하러 이렇게 복잡하게 만들어야 하는가 하는 생각 뿐이다..

.NET 환경에서 VC++은 찬밥이 아닌 이유..
  1. Native 코드를 작성할 수 있는 유일한 개발도구이다.. VB .NET 너무 많이 바뀌었다.. C#, 새로운 언어이니 .NET 전용이다..
  2. COM 프로그램을 쉽게 개발할 수 있도록 되었다
  3. 표준 C++ 지원 및 이제는 STL도 지원한다..
  4. 웹서비스 개발에도 최적의 성능을 제공해준다..
  5. Native 코드와 .NET 코드를 섞을 수도 있다..
위와 같은 이유들을 만들어(?) 내긴 하지만, 사실 1번과 5번 이외에는 차라리 C++을 쓰고 말지 하는 생각이 든다.. 굳이 .NET 어셈블리로 만들어 얻는 이득이 없기 때문이다..

이야기가 상당히 다른 방향으로 흘러갔는데, 아무튼 C 코드는 VC++ .NET 덕분에 .NET 환경에서 거의 소스코드의 수정없이 100% 사용이 가능하다는 것을 잘 보여주는 샘플이다..
Posted by 미친병아리

댓글을 달아 주세요

  1. Favicon of http://www.uxkorea.net BlogIcon 준서아빠 2007.10.16 22:40  댓글주소  수정/삭제  댓글쓰기

    음, 미병님, 준서아빠 입니다.
    .NET과 C++은 계속해서 병존하고 발전하는 기술이라고 생각됩니다. 최근 관련된 일을 진행한 적이 있는데요. 곧 소식이 나오게 될 것 같습니다.

    • Favicon of https://madchick.tistory.com BlogIcon 미친병아리 2007.10.16 23:50 신고  댓글주소  수정/삭제

      네~ 안녕하세요..
      맞습니다.. 별도로 가는게 맞는 기술로 보여집니다.. C++ 쪽에서는 뭔가 더 새로운 소식이 나올게 별로 기대는 안됩니다.. 사실 별로 나올 것도 없고, 뭔가 나와도 별로 놀라지도 않을 것 같고.. ㅎㅎㅎ
      C++/CLI쪽은 제가 뭘 몰라서 중요하게 안 보이는 것일지도 모르죠.. 뭔가, C++ 대가들이 몰두할만한 가치가 있는 일이니 그러고 있을테니 말입니다..

  2. 2007.10.19 15:55  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  3. Favicon of http://flytgr.tistory.com BlogIcon 호랭이 2007.10.29 11:11  댓글주소  수정/삭제  댓글쓰기

    헐~ 마소 정희용 기자입니다.
    미친병아리님 이게 얼마만입니까.
    앞으로 자주자주 들르겠습니다. ㅎ.ㅎ
    근데 원래 이글루스만 하시는 줄 알았는데, 티스토리에도 블로그가 있었군요!

    • Favicon of https://madchick.tistory.com BlogIcon 미친병아리 2007.10.30 18:04 신고  댓글주소  수정/삭제

      안녕하세요.. 오랜만입니다.. 잘 지내시죠?
      하하.. 티스토리에는 개설한지 얼마 안되었습니다..
      사실 개설해놓고 오랜동안 방치해놓고 글을 올린지가 얼마 안되었는데, 여긴 글을 자주 올리는게 쉽지 않네요..
      허허허..
      차린건 없지만, 자주 놀러오세요~

  4. Favicon of https://archwin.net BlogIcon archmond 2007.11.10 14:42 신고  댓글주소  수정/삭제  댓글쓰기

    티스토리에 하나 분점을 내셨군요~!!

  5. Favicon of https://mckdh.tistory.com BlogIcon 산골 김저자 2008.01.03 17:43 신고  댓글주소  수정/삭제  댓글쓰기

    MS쪽은 저도 잘 몰랐는데 게임얘기가 나와서 그런지
    재밌게 잘 읽었습니다.

    몇 페이지를 읽어봤는데 유명 블로거이며 유명 개발자시군요.
    자주 읽고 배우겠습니다.

    그리고 새해 복 많이 받으세요 ^ ^

사내 게시판에 올렸던 내용.. 안타깝지만, 현재까지도 우리 회사에 QA팀은 운영되고 있지 못하다..

_____________________________________________
From: 오광섭
Sent: Saturday, March 22, 2003 12:01 PM
Posted To: 공부모임 (SW공학)
Conversation: [참고] S/W 테스팅과 품질관리 관련 (작성중)
Subject: [참고] S/W 테스팅과 품질관리 관련 (작성중)


2가지 측면에서 접근해야 한다..

1. 개발팀

  • 어떻게 하면 버그를 만들지 않을 수 있는가에 대한 연구


2. QA 팀

  • 어떻게 하면 버그를 쉽게 찾아낼 수 있는가에 대한 연구
    아무나 할 수 있는 일이 아니다.. 능력이 되는 인력이 필요하다.. 없으면 양성해야 한다.. 개발자만 양성이 필요한게 아니다..
  • How To Break Software (A Practical Guide to Testing)의 저자는 플로리다 공학대학의 S/W 공학부 교수인데 저자가 서문에서 밝히듯 S/W 테스팅에 관한 이론들은 이미 많은 책들이 나와 있으며, 이 책은 Good Tester가 되기 위한 실전지침들이며 학교에서 학부 및 대학원생들의 수업에 사용하고 있는 내용이라고 한다..
  • 국내 대학의 S/W 엔지니어링 커리큘럼에 이런 과정이 있을 것이라는 생각이 들지 않아 정말 슬프지만 (국내 대학들은 망할 취업률에 연연하며, 학원에서도 이미 넘쳐나도록 배출하고 있는 초급 개발자 양성에만 열을 올리고 있으니 정말 한심스럽지 않을 수 없다.. VC++, VB, 윈도 프로그래밍 가리키고 있을 시간에 자료구조를 더 가리키는게 도움이 된다는 사실을 왜 대학은 모르고 있을까..)
  • 교육기관에서 인력공급이 안된다고, S/W 개발사가 필요인력 확보에 손놓고 있을 수만은 없을 것이다.. 자체 양성을 해야 한다..




QA 테스팅 팀의 Golden Rule

1. Do unto others until they hate you



QA 팀의 가이드라인

* Catch Phrase *
Know your product, think on your feet, and let your exprience guide you. Brain on, eye open.. Test !

1. Thou shalt pummel thy app with multitudes of input
2. Thou shalt covet thy neighbor's apps
3. Thou shalt seek thee out the wise oracle
4. Thou shalt not worship nonreproducible failures
5. Thou shalt honor thy model and automation
6. Thou shalt hold thy developers sins against them
7. Thou shalt revel in app murder (celebrate the BSOD)
8. Thou shalt keep holy the sabbath (release)
9. Thou shalt covet thy developer's source code

Figure this out for extra credit: Why are there only nine?

Posted by 미친병아리

댓글을 달아 주세요

  1. Favicon of http://www.oscarplex.net BlogIcon 오스카 2007.10.03 20:05  댓글주소  수정/삭제  댓글쓰기

    엇, 댓글 링크 따라왔더니 미병님 티스토리 블로그로 연결되네요. ^^

    QA 조직 대해서는 상당히 하고 싶은 이야기도 많긴 한데.. 언제 저도 한 번 이 주제에 대해 글 한 번 써봐야겠습니다. 요즘 엑박 개발 관련해서 MS의 문서들을 읽어 보면 MS가 이 정도로 QA를 함에도 불구하고 MS 제품의 사내 BTS에 수많은 버그가 등록되어 있다는건 정말 소프트웨어 개발이 어렵다는 반증이겠죠. -0-

  2. Favicon of http://fairycat.net BlogIcon 산티아고 2007.10.06 07:03  댓글주소  수정/삭제  댓글쓰기

    Do unto others until they hate you. -> Take advantage of them until they don't want to be around you. 정도로 해석하면 될까요? Tester의 golden rule이 되기에 부족함이 없네요. ^.^ 딱 한 번 QA팀을 두고 프로젝트를 해본 적이 있는데 워낙 엔드 유저를 타깃으로 한 프로덕트였기 때문에 참 빡시게 했던 기억이 납니다. 버그를 쏙쏙 잡아오는게 하도 귀찮아서 정말 곁에 두고 싶지 않을 정도였어요. 하하~

    • Favicon of https://madchick.tistory.com BlogIcon 미친병아리 2007.10.07 22:00 신고  댓글주소  수정/삭제

      QA팀이 제대로 갖춰진 프로젝트에서 일하는 것은 아주 좋은 경험이 될겁니다..

    • Santiago 2007.10.07 22:22 신고  댓글주소  수정/삭제

      오, 네, 물론 아주 좋은 경험이 되었습니다. 그 뒤로 다시 정상?적인 프로젝트에 적응하고 나선 나를 못살게 굴던 테스터가 그립더군요. 테스터가 있으면, 개발자도 좀 더 꼼꼼히 확인하고 넘기게 되는 것 같습니다.

    • Favicon of https://madchick.tistory.com BlogIcon 미친병아리 2007.10.08 08:38 신고  댓글주소  수정/삭제

      맞습니다.. 저는 QA팀과 제대로 프로젝트를 진행해본 경험이 없어 정말 아쉬운데, 프로젝트 끝나고 나면 그 QA팀이 그리울 것 같습니다.. ^^

국내 인터넷 뱅킹에 메모리 해킹이 적용되면 큰일이라는 이야기들이 나오던데.. 정말 그런 일들이 대규모로 일어난다면 속수무책인 금융사건이 발생할지도 모른다.. 하지만, 내가 걱정하고 있는다고 해서 상황이 바뀌는 것도 아니고, 이런 문제점을 해결하기 위한 난세의 영웅이 될 수 있는 것도 아니니 뒤로 미뤄두기로 하고.. 관심을 다른데로 돌려보자..

어떻게 이런 것이 가능할까? 게임에서는 이미 많이 사용되던 기법이라고 하는데, 컴퓨터 상에서 실행되는 프로그램은 컴퓨터의 구조상 필연적으로 메모리에 올라가게 되어 있으며 이 메모리를 읽어내는 기술을 아는 사람에게는 그 어떤 데이터도 보호할 수 없는 상황인 것이 문제다.. 이를 위한 해결책은 논하는 것은 내 능력 밖의 일인 것 같고..

메모리를 읽어내는 좋은 샘플이 하나 있다.. Minesweeper, Behind the scenes, Enhancement for the cool Minesweeper Memory Reader 라는 글에서 소개된 윈도우즈의 지뢰찾기 프로그램의 메모리를 읽어 지뢰가 있는 위치를 알려주는 프로그램이다.. 이 처럼 내 컴퓨터의 메모리에 올라가 있는 데이터는 전문지식만 갖추면 쉽게 꺼내 볼 수 있다..
사용자 삽입 이미지

문제는 어느 메모리에 어떤 값들이 있는지를 알 수 없다는 것인데.. 리버스 엔지니어링을 통하면 시간이 걸리는 것이 문제지, 마음만 먹으면 알아낼 수 있다.. (예 : Olly Debugger 사용해보기에 리버스 엔지니어링에 관한 몇개의 글이 링크되어 있다..)

결국 아직까지는 메모리 속의 데이터까지 암호화를 하거나 보호하지는 않기 때문에 S/W들의 크랙버젼이 나오고, Microsoft가 온라인인증 기능을 넣어 윈도우를 출시한지 하루만에 이를 무력화 시키는 불법 윈도우 설치본이 나오기도 하는 것이다..

리버스 엔지니어링.. 나중에 은퇴해서 좀 한가해지면 심심풀이로 공부해볼라고 마음먹고 있는 분야다.. 메모리 속을 들여다 보고 내 맘대로 제어할 수 있다면 정말 흥미로울 것 같다..
Posted by 미친병아리

댓글을 달아 주세요

  1. Favicon of http://http://jamestic.egloos.com/ BlogIcon 제임스 2007.09.27 12:56  댓글주소  수정/삭제  댓글쓰기

    미병님의 새로운 둥지인가요. 분위기 좋은데요.

    내용이 상당히 흥미롭네요.
    오래된 이야기지만 RPG하다가, 하도 어려워서 메모리를 뒤져서 풀곤 했던 기억이 납니다.
    요즘은 이런 방법으로 flaw를 어떻게 찾을 수 없을까 하고 상상하고 하는데
    좋은 힌트가 될 것 같습니다. 고맙습니다.

    • Favicon of https://madchick.tistory.com BlogIcon 미친병아리 2007.09.29 20:07 신고  댓글주소  수정/삭제

      새로운 둥지라기 보다 또 하나의 둥지지요.. 티스토리에 좋은 스킨들 많더라구요..
      리버스 엔지니어링으로 결점을 찾는 방법은, 흠.. 좀 효율이 떨어지지 않을까 하는 생각이 듭니다.. ㅎㅎㅎ