프로그래밍 354

URL Rewrite를 위한 ISAPI Rewirte 3.0 Lite 설치기

서론 사용자들에게 좀더 친숙한 URL 정보를 제공하기 위하여 URL Rewrite를 사용하게 됩니다. URL Rewrite를 사용하는 이유로는 여러 가지가 있겠지만, 주된 이유가 검색엔진에 색인될 수 있도록 하는 검색 친화적 주소를 만들수 있다는 점(Search Engine Optimization ; SEO)과, 그밖에 프록시 및 로드 밸런싱, 접근 제한 등에도 유용하게 이용할 수 있습니다. 아파치라면 mod_rewrite를 사용하면 되지만, IIS에서는 어떤 것이 좋을까 찾던 중에 무료로 사용할 수 있는 버전이 ISAPI Rewirte 3.0 Lite 였습니다. 본 글에서는 IIS 6.0에서 ISAPI Rewirte 3.0 Lite 버전을 설치하고 간단하게 테스트까지 하는 과정을 요약 정리해 두었습니다..

프로세스ID(ProcessID)로 윈도우 핸들(HWND) 구하기

서론 CreateProcess로 새로운 프로세스를 만든 이후에, 만들어진 프로세스의 메인 윈도우 핸들을 얻기 위한 방법을 알아 보겠습니다. 특정 클래스의 윈도우 핸들을 얻기 위해서 FindWindow를 사용하는데, 개발자가 임의로 CreateProcess를 통하여 실행시킨 프로세스의 메인 윈도우 핸들을 얻는 방법은 다음 GetHwndFromProcessID 함수를 이용하면 됩니다. 설명 아래 GetHwndFromProcessID 함수의 코드입니다. function GetHwndFromProcessID(dwProcessID: DWORD): THandle; var hWnd: THandle; dwProcessID2: DWORD; begin hWnd := FindWindow(nil, nil); // 최상위 윈도..

엑세스 바이얼레이션(Access Violation) 주소로 오류가 발생한 소스상의 위치 찾기

서론 델파이로 만든 프로그램을 일반 사용자들에게 배포할 때는 기본적으로 불필요한 디버깅 정보를 모두 제거하고 배포를 하게 됩니다. 따라서 유레카로그(EurekaLog) 등의 오류 추적 모듈이 없기 때문에, 다음과 같은 오류창을 만났을 경우 어디서 오류가 발생하였는지 알 수가 없어서 문제 해결이 어렵습니다. 사용자와 동일한 동작을 통한 재현으로 동일한 오류가 발생한다면 다행히도 쉽게 오류를 추적해서 문제를 해결할 수 있지만, 재현이 불가능하고 해당 사용자에게서만 위와 같은 오류창이 발생하게 되면 정말 난감하게 됩니다. 위와 같은 엑세스 바이얼레이션(Access Violation)창이 나타난 경우, 배포한 프로그램에 map 파일이 있다면 그 주소를 가지고 오류가 발생한 부분을 찾을 수 있습니다. 그 방법에 ..

CreateMutex를 이용한 다중 실행 방지 방법.

서론 기존에 다중 실행을 방지하기 위해서 FindWindow를 이용하고 있었습니다. 하지만 문제는 타이틀이 변경되거나 하게 되면, 제대로 처리가 안되어서 CreateMutex를 이용하였었습니다. 그런데, 윈도우 세션에 상관없이 어떤 세션에서든 PC에서 서비스처럼 단 1번만 실행되어야만 하는 경우에 제대로 적용하지 못하였었습니다. 예를 들면, 현재 세션에서 프로그램을 실행시켜 놓고, 사용자 전환을 통하여 다른 세션으로 로그인 하여 동일한 프로그램을 실행하는 것이 가능하다는데 문제가 있었습니다. FindWindow로는 당연히 해결이 되지 않았고, 우연하게 알게된 ToolAPI를 사용해 보았지만, 될때도 있고 안될때도 있었습니다. 본 문서에서는 CreateMutex를 이용하여 세션에 상관없이 PC에서 단 1개..

잘동작하던 ActiveX가 기능 추가후, 먹통이 되어 버린 경험.

서론 기존에 잘 사용하던 ActiveX에 몇 가지 속성 및 기능을 추가할 일이 있어서 관련 작업을 하던 중에 좀 황당한 사건을 겪었습니다. 속성 및 기능 추가를 위하여 기존 프로젝트에 몇몇 새로운 유닛을 추가하고, 새로운 기능을 구현한 직후 테스트에서 잘 동작을 하였었습니다. 그러나 버그 수정을 위하여 몇번 빌드를 하고 테스트를 하던 과정중에 이상한 현상을 경험하게 되었습니다. 정말 특이하게도 그런대로 동작하던 ActiveX가 점차 꼬여 가더니, 결국에는 Type Library에서 속성을 수정하거나, 심지어 수정된 소스를 저장하려고만 하여도 델파이 IDE가 아무런 응답을 하지 않게 되버리는 문제가 발생하기 시작하였습니다. 더군다나 델파이를 재시작하고, 재부팅을 하여 겨우 ocx 빌드를 성공하여 테스트를 ..

TShockwaveFlash 크기 조정(Resize)

서론 TShockwaveFlash 컴포넌트를 이용하여 델파이 폼 내부에서 동적으로 플래쉬를 표시하고자 할 때, 동적으로 생성된 플래쉬 컴포넌트내에서 전체 플래쉬 영역에 그려지지 않고, 일부 영역에서만 그려지는 문제가 발견되었습니다. 마우스로 플래쉬 컨트롤 영역을 선택해 주면 플래쉬 영역 전체에 맞게 확대되어 올바로 표시가 되었습니다. 또한, 창의 크기를 조정하면 플래쉬 창의 크기도 변경되도록 하였으나, 플래쉬 컨트롤에서 표시되는 swf 에는 영향을 미치지 않는 문제가 있었습니다. 본 글에서는 이러한 플래쉬가 제대로 전체 플래쉬 창 영역에 그려지지 않는 문제점을 해결하는 방법에 대해서 알아보도록 하겠습니다. 해결 방법 아래 Resize TShockwaveFlash control in Delphi 자료를 참..

2010에서 Zeos 7.0 설치 및 MySQL 5.1.4와 테스트기

SourceForge에서 Zeos 7.0 Beta 버전을 받아서 설치하는데, Bpl 파일을 못찾는 오류가 계속 나서 왜그런가 봤더니, 프로젝트 옵션의 output directory가 각 패키지마다 달라서 발생한 문제였습니다. 모두 Build 디렉토리로 맞추거나, 아니면 모두 기본 디렉토리로 생성되도록 하면 됩니다. 오랫만에 Zeos로 MySQL DB 연동을 하는터라 좀 헤맸네요. 간단하게 ZConnection을 두고 테스트용 MySQL 정보를 입력하고, ZQuery로 간단한 SELECT 쿼리를 수행하는데 자꾸 한글이 깨지는 것이었습니다. 삽입 및 갱신도 한글이 깨지는 현상이 발생하였습니다. MySQL쪽 문자셋(charset)을 확인해 봤더니, 운영 시스템만 "UTF-8"이고 모든 DB 및 클라이언트 연결..

특정 작업 동안 기다리기 페이지 구현하기.

PHP 작업 중에 결과 처리하는데 시간이 좀 걸리는 검색 페이지를 구현하는데 있어서, 검색 결과를 구하는 동안 페이지를 그냥 두면 검색 결과가 나올 때까지 화면에서 아무런 것도 표시되지 않아 사용자들은 답답하게 됩니다. 그리고 사용자가 검색 중임에도 결과가 너무 오래 걸려서 다시 검색을 하거나 하게 되면 검색 서버에 부하를 가중시켜 서버의 성능에 악 영향을 미치게 됩니다. 이를 방지하기 위하여 검색을 시작하면 바로 페이지에서 검색 중임을 알려주는 진행 표시를 하고, 검색이 완료되면 진행 표지 부분을 없애고 검색결과를 표시합니다. DIV 태그를 이용하여 간단하게 구현이 가능합니다. 검색 대기 중일 때 표시할 내용을 DIV 태그 내에 작성하고, 페이지가 바로 표시되도록 한 이후에, 로딩 작업이 완료되면 자바..

Wininet Component Suite에서 User Agent를 바꾸어 통신하기.

서론 Wininet Component Suite의 TInetHttp 컴포넌트를 그대로 사용하여 웹서버와 통신을 하게되면 웹 서버의 User Agent 부분에 "WinInetComponentSuite"로 남게 됩니다. 물론 TIdHTTP를 사용하면 "Indy"라고 User Agent가 남게 됩니다. Indy에서는 User Agent가 변경이 가능하지만, TInetHttp는 직접적으로 변경할 수 있는 속성을 제공하지 않습니다. User Agent 변경하기 TInetHttp에서는 직접적으로 User Agent를 변경할 수 있는 속성을 제공하지 않기 때문에, 다음과 같이 AddRequestHeader 메소드를 이용하여 User Agent를 변경할 수 있습니다. with INetHttp do try INetUrl..

728x90