<?xml version="1.0" encoding="EUC-KR"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
              This file is generated from xml source: DO NOT EDIT
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      -->
<title>mod_isapi - Apache HTTP Server</title>
<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
<link href="../images/favicon.ico" rel="shortcut icon" /></head>
<body>
<div id="page-header">
<p class="menu"><a href="../mod/">모듈</a> | <a href="../mod/directives.html">지시어들</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">용어</a> | <a href="../sitemap.html">사이트맵</a></p>
<p class="apache">Apache HTTP Server Version 2.2</p>
<img alt="" src="../images/feather.gif" /></div>
<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.2</a> &gt; <a href="./">모듈</a></div>
<div id="page-content">
<div id="preamble"><h1>아파치 모듈 mod_isapi</h1>
<div class="toplang">
<p><span>가능한 언어: </span><a href="../en/mod/mod_isapi.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../ko/mod/mod_isapi.html" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
<div class="outofdate">이 문서는 최신판 번역이 아닙니다.
            최근에 변경된 내용은 영어 문서를 참고하세요.</div>
<table class="module"><tr><th><a href="module-dict.html#Description">설명:</a></th><td>Windows용 아파치에서 ISAPI Extension 사용</td></tr>
<tr><th><a href="module-dict.html#Status">상태:</a></th><td>Base</td></tr>
<tr><th><a href="module-dict.html#ModuleIdentifier">모듈명:</a></th><td>isapi_module</td></tr>
<tr><th><a href="module-dict.html#SourceFile">소스파일:</a></th><td>mod_isapi.c</td></tr>
<tr><th><a href="module-dict.html#Compatibility">지원:</a></th><td>Win32 only</td></tr></table>
<h3>요약</h3>

    <p>이 모듈은 Internet Server extension API를 구현한다. 그래서
    제약은 있지만 Windows용 아파치에서 Internet Server extension을
    (<em>즉,</em> ISAPI .dll 모듈) 사용할 수 있다.</p>

    <p>ISAPI extension 모듈(.dll 파일)은 제삼자가 작성한다.
    Apache Group이 이들 모듈을 만들지 않았으며, 지원도 하지
    않는다. ISAPI extension 사용에 관한 문제는 ISAPI 제작자에게
    직접 연락하길 바란다. <strong>제발 이런 문제를 아파치
    메일링리스트나 버그보고 페이지에 올리지 <em>마라</em>.</strong></p>
</div>
<div id="quickview"><h3 class="directives">지시어들</h3>
<ul id="toc">
<li><img alt="" src="../images/down.gif" /> <a href="#isapiappendlogtoerrors">ISAPIAppendLogToErrors</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#isapiappendlogtoquery">ISAPIAppendLogToQuery</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#isapicachefile">ISAPICacheFile</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#isapifakeasync">ISAPIFakeAsync</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#isapilognotsupported">ISAPILogNotSupported</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#isapireadaheadbuffer">ISAPIReadAheadBuffer</a></li>
</ul>
<h3>주제</h3>
<ul id="topics">
<li><img alt="" src="../images/down.gif" /> <a href="#usage">사용법</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#notes">추가 설명</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#journal">개발자 정보</a></li>
</ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="usage" id="usage">사용법</a></h2>

    <p>서버설정파일에서 <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> 지시어를 사용하여
    ISAPI 파일 확장자와 <code>isapi-handler</code> 핸들러를 연결한다.
    .dll 파일을 ISAPI extension으로 처리하려면 httpd.conf 파일에
    다음과 같이 추가한다.</p>
    <div class="example"><p><code>
        AddHandler isapi-handler .dll
    </code></p></div>

    <p>아파치 서버는 요청한 모듈을 메모리에 계속 둘 수 없다.
    그러나 httpd.conf에서 다음과 같은 설정으로 특정 모듈을 미리
    읽어들일 수는 있다.</p>
    <div class="example"><p><code>
        ISAPICacheFile c:/WebWork/Scripts/ISAPI/mytest.dll
    </code></p></div>

    <p>ISAPI extension을 미리 읽어들이던지 미리 읽어들이지 않던지
    관계없이 ISAPI extension은 CGI 스크립트와 동일한 권한과
    제약을 따른다. 즉, ISAPI .dll 파일이 있는 디렉토리에 <code class="directive"><a href="../mod/core.html#options">Options</a></code> <code>ExecCGI</code>가
    필요하다.</p>

    <p><code class="module"><a href="../mod/mod_isapi.html">mod_isapi</a></code>의 ISAPI 지원에 대한 자세한
    내용과 설명은 <a href="#notes">추가 설명</a>과 <a href="#journal">개발자 정보</a>를 참고하라.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="notes" id="notes">추가 설명</a></h2>

    <p>아파치 ISAPI 구현은 비동기 입출력에 대한 "마이크로소프트
    특유의" 확장기능을 제외한 ISAPI 2.0 규약을 모두 만족한다.
    아파치의 입출력 구조로는 ISAPI가 사용할 수 있는 방식으로
    비동기 입출력을 할 수 없다. ISA가 비동기 입출력과 같이 지원하지
    않는 기능을 사용하려 한다면, 디버깅에 도움을 주기위해 오류
    로그에 기록을 남긴다. 로그가 매우 커질 수 있기때문에
    <code>ISAPILogNotSupported Off</code> 지시어를 사용하면
    로그에 기록하지 않는다.</p>

    <p>Microsoft IIS와 같은 서버는 ISAPI extension을 메모리로
    읽어들여서 메모리 사용량이 매우 많지 않거나 특별히 설정하지
    않는한 그대로 메모리에 둔다. 아파치는 현재 <code class="directive"><a href="#isapicachefile">ISAPICacheFile</a></code> 지시어를 사용하지
    않는다면 요청을 받을때마다 ISAPI extension을 메모리에 읽어들이고
    버린다. 비효율적이지만, 아파치의 메모리 구조상 이것이 가장
    효율적인 방법이다. 여러 ISAPI 모듈이 아파치 서버와 약간
    호환이 안맞기때문에 서버의 안정성을 위해 모듈을 메모리에서
    버린다.</p>

    <p>또, 아파치는 ISAPI Extension을 지원하지만, <strong>ISAPI
    Filter를 지원하지 않음을</strong> 기억하라. 나중에 필터를
    지원할 수 있지만, 현재는 계획이 없다.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="journal" id="journal">개발자 정보</a></h2>

    <p>아파치 2.0 <code class="module"><a href="../mod/mod_isapi.html">mod_isapi</a></code> 모듈을 프로그래밍한다면,
    <code>ServerSupportFunction</code> 호출을 다음 지시어로
    제한해야 한다.</p>

    <dl>
      <dt><code>HSE_REQ_SEND_URL_REDIRECT_RESP</code></dt>
      <dd>사용자를 다른 위치로 리다이렉션한다.<br />
      완전한 URL을 사용해야 한다 (<em>예를 들어,</em>
      <code>http://server/location</code>).</dd>

      <dt><code>HSE_REQ_SEND_URL</code></dt>
      <dd>사용자를 다른 위치로 리다이렉션한다.<br />
      완전한 URL이 아니며, 프로토콜과 서버명을 넘길 수 없다
      (<em>예를 들어,</em> <code>/location</code>같은 것만 가능).<br />
      브라우저가 아니라 서버가 리다이렉션을 처리한다.<br />
      <div class="warning"><h3>경고</h3>
        <p>최근 문서를 보면 Microsoft가 두 <code>HSE_REQ_SEND_URL</code>
        기능간의 차이를 없앤 것처럼 보인다. 아파치는 계속 이
        둘의 아규먼트 조건과 행동을 다르게 처리할 것이다.</p>
      </div></dd>

      <dt><code>HSE_REQ_SEND_RESPONSE_HEADER</code></dt>
      <dd>headers 문자열 아규먼트에 빈줄이 (줄바꿈문자가 두번
      연속) 있다면 아파치는 헤더 다음 내용을 응답 내용으로 사용한다.
      headers 아규먼트가 NULL로 끝나기때문에, 응답 내용에 NULL을
      사용할 수 없다.</dd>

      <dt><code>HSE_REQ_DONE_WITH_SESSION</code></dt>
      <dd>ISAPI가 처리를 마치면 세션이 끝나기때문에 아파치는
      아무 일도 하지 않는다.</dd>

      <dt><code>HSE_REQ_MAP_URL_TO_PATH</code></dt>
      <dd>아파치는 가상 이름을 물리적(실제) 이름으로 변환한다.</dd>

      <dt><code>HSE_APPEND_LOG_PARAMETER</code></dt>
      <dd>
        문구를 아래 로그중 한곳에 남긴다.

        <ul>
          <li><code class="directive"><a href="../mod/mod_log_config.html#customlog">CustomLog</a></code>
          지시어의 <code>\"%{isapi-parameter}n\"</code> 항목에</li>

          <li><code class="directive"><a href="#isapiappendlogtoquery">ISAPIAppendLogToQuery</a></code>
          <code>On</code> 지시어를 사용하여 <code>%q</code>
          로그 항목에</li>

          <li><code class="directive"><a href="#isapiappendlogtoerrors">ISAPIAppendLogToErrors</a></code>
          <code>On</code> 지시어를 사용하여 오류 로그에</li>
        </ul>

        <p>첫번째로 나온 <code>%{isapi-parameter}n</code> 항목은
        언제나 사용할 수 있으며 권장한다.</p>
      </dd>

      <dt><code>HSE_REQ_IS_KEEP_CONN</code></dt>
      <dd>협상된 Keep-Alive 상태를 반환한다.</dd>

      <dt><code>HSE_REQ_SEND_RESPONSE_HEADER_EX</code></dt>
      <dd><code>fKeepConn</code> 옵션을 무시하는 것을 제외하고는
      문서에 나온데로 동작한다.</dd>

      <dt><code>HSE_REQ_IS_CONNECTED</code></dt>
      <dd>요청이 중간에 끊어졌다면 false를 반환한다.</dd>
    </dl>

    <p>지원하지 않는 <code>ServerSupportFunction</code> 호출을
    하면 아파치는 <code>FALSE</code>를 반환하고
    <code>GetLastError</code> 값을
    <code>ERROR_INVALID_PARAMETER</code>로 설정한다.</p>

    <p><code>ReadClient</code>는 (<code class="directive"><a href="#isapireadaheadbuffer">ISAPIReadAheadBuffer</a></code>로 정의한)
    초기버퍼크기를 넘어선 요청 내용을 가져온다.
    <code class="directive">ISAPIReadAheadBuffer</code> 설정 (ISAPI
    핸들러를 부르기전 버퍼의 바이트수) 보다 짧은 요청은 extension을
    부를때 전부 전달된다. 요청이 길면, ISAPI extension은
    <code>ReadClient</code>로 나머지 요청 내용을 가져와야 한다.</p>

    <p><code>WriteClient</code>를 지원하지만,
    <code>HSE_IO_SYNC</code> 옵션만 사용하거나 (<code>0</code>
    값) 아무 옵션도 사용하지 않아야 한다. 다른
    <code>WriteClient</code> 요청은 <code>FALSE</code>를 반환하며
    실패하고, <code>GetLastError</code> 값은
    <code>ERROR_INVALID_PARAMETER</code>가 된다.</p>

    <p><code>GetServerVariable</code>은 지원하지만, (다른 서버에서
    정의하는) 확장 서버변수는 없다.
    <code>GetServerVariable</code>에서 모든 일반적인 아파치
    CGI 환경변수와 <code>ALL_HTTP</code>, <code>ALL_RAW</code>
    값을 사용할 수 있다.</p>

    <p>아파치 2.0 <code class="module"><a href="../mod/mod_isapi.html">mod_isapi</a></code>는 이후 ISAPI 규약에
    나온 추가 기능을 지원하고, 비동기 입출력과
    <code>TransmitFile</code> 기능을 조금 흉내낸다. 또, ISAPI
    .dll을 미리 읽어들여서 성능을 높이는 아파치 1.3
    <code>mod_isapi</code>에는 없는 기능을 지원한다.</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ISAPIAppendLogToErrors" id="ISAPIAppendLogToErrors">ISAPIAppendLogToErrors</a> <a name="isapiappendlogtoerrors" id="isapiappendlogtoerrors">지시어</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">설명:</a></th><td>ISAPI exntension의 <code>HSE_APPEND_LOG_PARAMETER</code>
요청을 오류 로그에 기록한다</td></tr>
<tr><th><a href="directive-dict.html#Syntax">문법:</a></th><td><code>ISAPIAppendLogToErrors on|off</code></td></tr>
<tr><th><a href="directive-dict.html#Default">기본값:</a></th><td><code>ISAPIAppendLogToErrors off</code></td></tr>
<tr><th><a href="directive-dict.html#Context">사용장소:</a></th><td>주서버설정, 가상호스트, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Override 옵션:</a></th><td>FileInfo</td></tr>
<tr><th><a href="directive-dict.html#Status">상태:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">모듈:</a></th><td>mod_isapi</td></tr>
</table>
    <p>ISAPI exntension의 <code>HSE_APPEND_LOG_PARAMETER</code>
    요청을 오류 로그에 기록한다.</p>

</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ISAPIAppendLogToQuery" id="ISAPIAppendLogToQuery">ISAPIAppendLogToQuery</a> <a name="isapiappendlogtoquery" id="isapiappendlogtoquery">지시어</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">설명:</a></th><td>ISAPI exntension의 <code>HSE_APPEND_LOG_PARAMETER</code>
요청을 질의문자열에 기록한다</td></tr>
<tr><th><a href="directive-dict.html#Syntax">문법:</a></th><td><code>ISAPIAppendLogToQuery on|off</code></td></tr>
<tr><th><a href="directive-dict.html#Default">기본값:</a></th><td><code>ISAPIAppendLogToQuery on</code></td></tr>
<tr><th><a href="directive-dict.html#Context">사용장소:</a></th><td>주서버설정, 가상호스트, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Override 옵션:</a></th><td>FileInfo</td></tr>
<tr><th><a href="directive-dict.html#Status">상태:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">모듈:</a></th><td>mod_isapi</td></tr>
</table>
    <p>ISAPI exntension의 <code>HSE_APPEND_LOG_PARAMETER</code>
    요청을 질의문자열에 기록한다 (<code class="directive"><a href="../mod/mod_log_config.html#customlog">CustomLog</a></code> <code>%q</code>
    항목에 덧붙인다).</p>

</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ISAPICacheFile" id="ISAPICacheFile">ISAPICacheFile</a> <a name="isapicachefile" id="isapicachefile">지시어</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">설명:</a></th><td>서버가 시작할때 메모리로 읽어들일 ISAPI .dll 파일들</td></tr>
<tr><th><a href="directive-dict.html#Syntax">문법:</a></th><td><code>ISAPICacheFile <var>file-path</var> [<var>file-path</var>]
...</code></td></tr>
<tr><th><a href="directive-dict.html#Context">사용장소:</a></th><td>주서버설정, 가상호스트</td></tr>
<tr><th><a href="directive-dict.html#Status">상태:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">모듈:</a></th><td>mod_isapi</td></tr>
</table>
    <p>아파치 서버가 시작할때 메모리로 읽어들여서 서버를 종료할때까지
    메모리에 남아있을 파일명을 공백으로 구분하여 지정한다. 이
    지시어는 ISAPI .dll 파일별로 여러번 사용할 수 있다. 파일의
    전체 경로를 적는다. 절대 경로가 아니면 <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>에 상대 경로로 받아들인다.</p>

</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ISAPIFakeAsync" id="ISAPIFakeAsync">ISAPIFakeAsync</a> <a name="isapifakeasync" id="isapifakeasync">지시어</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">설명:</a></th><td>비동기 ISAPI 콜백을 지원하는 척한다</td></tr>
<tr><th><a href="directive-dict.html#Syntax">문법:</a></th><td><code>ISAPIFakeAsync on|off</code></td></tr>
<tr><th><a href="directive-dict.html#Default">기본값:</a></th><td><code>ISAPIFakeAsync off</code></td></tr>
<tr><th><a href="directive-dict.html#Context">사용장소:</a></th><td>주서버설정, 가상호스트, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Override 옵션:</a></th><td>FileInfo</td></tr>
<tr><th><a href="directive-dict.html#Status">상태:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">모듈:</a></th><td>mod_isapi</td></tr>
</table>
    <p>on으로 설정하면 비동기 ISAPI 콜백 지원을 흉내낸다.</p>

</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ISAPILogNotSupported" id="ISAPILogNotSupported">ISAPILogNotSupported</a> <a name="isapilognotsupported" id="isapilognotsupported">지시어</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">설명:</a></th><td>ISAPI extension이 지원하지 않는 기능을 요청하면
로그에 기록한다</td></tr>
<tr><th><a href="directive-dict.html#Syntax">문법:</a></th><td><code>ISAPILogNotSupported on|off</code></td></tr>
<tr><th><a href="directive-dict.html#Default">기본값:</a></th><td><code>ISAPILogNotSupported off</code></td></tr>
<tr><th><a href="directive-dict.html#Context">사용장소:</a></th><td>주서버설정, 가상호스트, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Override 옵션:</a></th><td>FileInfo</td></tr>
<tr><th><a href="directive-dict.html#Status">상태:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">모듈:</a></th><td>mod_isapi</td></tr>
</table>
    <p>ISAPI extension이 지원하지 않는 기능을 요청하면 서버
    오류 로그에 기록한다. 나중에 관리자가 문제를 추적하는데
    도움이 된다. 원하는 모든 ISAPI 모듈이 정상적으로 동작하면
    다시 off로 되돌려야 한다.</p>

</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ISAPIReadAheadBuffer" id="ISAPIReadAheadBuffer">ISAPIReadAheadBuffer</a> <a name="isapireadaheadbuffer" id="isapireadaheadbuffer">지시어</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">설명:</a></th><td>ISAPI extension의 미리읽기버퍼(read ahead buffer)
크기</td></tr>
<tr><th><a href="directive-dict.html#Syntax">문법:</a></th><td><code>ISAPIReadAheadBuffer <var>size</var></code></td></tr>
<tr><th><a href="directive-dict.html#Default">기본값:</a></th><td><code>ISAPIReadAheadBuffer 49152</code></td></tr>
<tr><th><a href="directive-dict.html#Context">사용장소:</a></th><td>주서버설정, 가상호스트, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Override 옵션:</a></th><td>FileInfo</td></tr>
<tr><th><a href="directive-dict.html#Status">상태:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">모듈:</a></th><td>mod_isapi</td></tr>
</table>
    <p>ISAPI extension을 처음 호출할때 미리읽기버퍼의 최대 크기를
    지정한다. (이 크기보다 큰) 나머지 자료는 <code>ReadClient</code>
    콜백을 사용하여 읽어야 한다. 어떤 ISAPI extension은
    <code>ReadClient</code> 기능을 지원하지 않는다. 이 경우
    ISAPI extension 제작자에게 문의하라.</p>

</div>
</div>
<div class="bottomlang">
<p><span>가능한 언어: </span><a href="../en/mod/mod_isapi.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../ko/mod/mod_isapi.html" title="Korean">&nbsp;ko&nbsp;</a></p>
</div><div id="footer">
<p class="apache">Copyright 2012 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="../mod/">모듈</a> | <a href="../mod/directives.html">지시어들</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">용어</a> | <a href="../sitemap.html">사이트맵</a></p></div>
</body></html>