<?xml version="1.0" encoding="EUC-KR" ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
<!-- English Revision: 106090:595963 (outdated) -->

<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->

<manualpage metafile="perf-tuning.xml.meta">
  <parentdocument href="./">Miscellaneous Documentation</parentdocument>

  <title>¾ÆÆÄÄ¡ ¼º´ÉÇâ»ó</title>

  <summary>

    <p>¾ÆÆÄÄ¡ 2.0Àº ±â´É°ú Æ÷ÆÃ°¡´É¼º°ú ¼º´ÉÀÇ ±ÕÇüÀÌ ¸Âµµ·Ï
    ¼³°èÇÑ ¹ü¿ë À¥¼­¹öÀÌ´Ù. º¥Ä¡¸¶Å© ±â·ÏÀ» ¼¼¿ì±âÀ§ÇØ ¼³°èÇÏÁö
    ¾Ê¾ÒÁö¸¸ ¾ÆÆÄÄ¡ 2.0Àº ½ÇÁ¦ ¸¹Àº °æ¿ì ³ôÀº ¼º´ÉÀ» ³½´Ù.</p>

    <p>¾ÆÆÄÄ¡ 1.3°ú ºñ±³ÇØ¼­ 2.0 ¹öÀüÀº Ã³¸®·®°ú È®Àå¼º(scalability)À»
    ³ôÀÌ±âÀ§ÇØ ¸¹Àº ÃÖÀûÈ­¸¦ Çß´Ù. ±âº»°ªÀ¸·Î ´ëºÎºÐ ÃÖÀûÈ­ÇÑ
    °ªÀ» »ç¿ëÇÑ´Ù. ±×·¯³ª ÄÄÆÄÀÏ½Ã È¤Àº ½ÇÇà½Ã ¼³Á¤ÀÌ ¼º´É¿¡
    Å« ¿µÇâÀ» ÁÙ ¼ö ÀÖ´Ù. ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡ 2.0ÀÇ ¼º´ÉÀ» Çâ»óÇÏ±âÀ§ÇØ
    ¼­¹ö °ü¸®ÀÚ°¡ ¼³Á¤ÇÒ ¼ö ÀÖ´Â ¿É¼ÇÀ» ¼³¸íÇÑ´Ù. ¾î¶² ¼³Á¤
    ¿É¼ÇÀº À¥¼­¹ö°¡ ÇÏµå¿þ¾î¿Í ¿î¿µÃ¼Á¦ÀÇ ±â´ÉÀ» ´õ Àß È°¿ëÇÏµµ·Ï
    ÇÏ´Â ¹Ý¸é, ¾î¶² ¿É¼ÇÀº ¼Óµµ¸¦ À§ÇØ ±â´ÉÀ» Èñ»ýÇÑ´Ù.</p>

  </summary>

  <section id="hardware">

    <title>ÇÏµå¿þ¾î¿Í ¿î¿µÃ¼Á¦¿¡ ´ëÇØ¼­</title>

    <p>À¥¼­¹ö ¼º´É¿¡ °¡Àå Å« ¿µÇâÀ» ÁÖ´Â °ÍÀº ¸Þ¸ð¸®´Ù. ½º¿ÒÀº
    ¿äÃ»´ç Áö¿¬½Ã°£À» »ç¿ëÀÚ°¡ "ÃæºÐÈ÷ ºü¸£´Ù°í" »ý°¢ÇÏÁö ¸øÇÏ°Ô
    ´Ã¸®±â¶§¹®¿¡ À¥¼­¹ö´Â ½º¿ÒÀ» ÇÏ¸é ¾ÈµÈ´Ù. ´À·ÁÁö¸é »ç¿ëÀÚ´Â
    Á¤ÁöÇÏ°í ´Ù½Ã Á¢¼ÓÇÏ¿© ºÎÇÏ°¡ °è¼Ó Áõ°¡ÇÑ´Ù. <directive
    module="mpm_common">MaxClients</directive> Áö½Ã¾î¸¦ Á¶ÀýÇÏ¿©
    À¥¼­¹ö°¡ ½º¿ÒÀ» ÇÒ Á¤µµ·Î ¸¹Àº ÀÚ½ÄÀ» ¸¸µéÁö¾Êµµ·Ï ÇØ¾ß
    ÇÑ´Ù. ¹æ¹ýÀº °£´ÜÇÏ´Ù: <code>top</code>°ú °°Àº µµ±¸¿¡¼­
    ÇÁ·Î¼¼½º ¸ñ·ÏÀ» º¸°í ¾ÆÆÄÄ¡ ÇÁ·Î¼¼½ºÀÇ Æò±Õ ¸Þ¸ð¸® »ç¿ë·®À»
    ¾Ë¾Æ³½ÈÄ, ÀüÃ¼ »ç¿ë°¡´ÉÇÑ ¸Þ¸ð¸®¿¡¼­ ´Ù¸¥ ÇÁ·Î¼¼½ºµéÀÌ »ç¿ëÇÒ
    °ø°£À» »« °ª¿¡¼­ ³ª´«´Ù.</p>

    <p>³ª¸ÓÁö´Â Æò¹üÇÏ´Ù: ÃæºÐÈ÷ ºü¸¥ CPU, ÃæºÐÈ÷ ºü¸¥ ³×Æ®¿÷Ä«µå,
    ÃæºÐÈ÷ ºü¸¥ µð½ºÅ©, ¿©±â¼­ "ÃæºÐÈ÷ ºü¸¥"Àº ½ÇÇèÀ» ÇØ¼­ °áÁ¤ÇØ¾ß
    ÇÑ´Ù.</p>

    <p>¿î¿µÃ¼Á¦´Â º¸Åë °¢ÀÚ ¾Ë¾Æ¼­ ¼±ÅÃÇÒ ÀÏÀÌ´Ù. ±×·¯³ª ÀÏ¹ÝÀûÀ¸·Î
    À¯¿ëÇÏ´Ù°í ÆÇ¸íµÈ ¸î°¡Áö ÁöÄ§ÀÌ ÀÖ´Ù:</p>

    <ul>
      <li>
        <p>¼±ÅÃÇÑ ¿î¿µÃ¼Á¦ÀÇ ÃÖ½Å ¾ÈÁ¤ ¹öÀü°ú ÆÐÄ¡¸¦ ½ÇÇàÇÑ´Ù.
        ¸¹Àº ¿î¿µÃ¼Á¦ Á¦ÀÛ»ç´Â ÃÖ±Ù TCP ½ºÅÃ°ú ¾²·¹µå ¶óÀÌºê·¯¸®¿¡
        ¸¹Àº ¼ÓµµÇâ»óÀ» Çß´Ù.</p>
      </li>

      <li>
        <p>¿î¿µÃ¼Á¦°¡ <code>sendfile(2)</code> ½Ã½ºÅÛÈ£ÃâÀ»
        Áö¿øÇÑ´Ù¸é, ÀÌ¸¦ »ç¿ëÇÏ±âÀ§ÇÑ ¹öÀüÀÌ³ª ÆÐÄ¡¸¦ ¼³Ä¡ÇÏ¿´´ÂÁö
        È®ÀÎÇÑ´Ù. (¿¹¸¦ µé¾î, ¸®´ª½º¶ó¸é 2.4 ÀÌ»ó ¹öÀüÀ» ¶æÇÑ´Ù.
        Solaris 8 ÃÊ±â ¹öÀüÀº ÆÐÄ¡°¡ ÇÊ¿äÇÏ´Ù.) Áö¿øÇÏ´Â ½Ã½ºÅÛÀÌ¶ó¸é
        ¾ÆÆÄÄ¡ 2´Â <code>sendfile</code>À» »ç¿ëÇÏ¿© CPU¸¦ ´ú
        »ç¿ëÇÏ¸ç Á¤Àû ÆÄÀÏÀ» ´õ »¡¸® Àü¼ÛÇÒ ¼ö ÀÕ´Ù.</p>
      </li>
    </ul>

  </section>

  <section id="runtime">

    <title>½ÇÇà½Ã ¼³Á¤¿¡ ´ëÇØ¼­</title>

    <related>
      <modulelist>
        <module>mod_dir</module>
        <module>mpm_common</module>
        <module>mod_status</module>
      </modulelist>
      <directivelist>
        <directive module="core">AllowOverride</directive>
        <directive module="mod_dir">DirectoryIndex</directive>
        <directive module="core">HostnameLookups</directive>
        <directive module="core">EnableMMAP</directive>
        <directive module="core">EnableSendfile</directive>
        <directive module="core">KeepAliveTimeout</directive>
        <directive module="prefork">MaxSpareServers</directive>
        <directive module="prefork">MinSpareServers</directive>
        <directive module="core">Options</directive>
        <directive module="mpm_common">StartServers</directive>
      </directivelist>
    </related>

    <section id="dns">

      <title>HostnameLookups¿Í DNS¿¡ ´ëÇØ °í·ÁÇÒ Á¡µé</title>

      <p>¾ÆÆÄÄ¡ 1.3 ÀÌÀü¿¡ <directive
      module="core">HostnameLookups</directive>ÀÇ ±âº»°ªÀº
      <code>On</code>ÀÌ¿´´Ù. ¿äÃ»À» ¸¶Ä¡±âÀü¿¡ DNS °Ë»öÀÌ ³¡³ª¾ß
      ÇÏ¹Ç·Î ¿äÃ»¸¶´Ù Áö¿¬ÀÌ »ý°å´Ù. ¾ÆÆÄÄ¡ 1.3¿¡¼­ ÀÌ ¼³Á¤ÀÇ
      ±âº»°ªÀÌ <code>Off</code>·Î º¯°æµÇ¾ú´Ù. ·Î±×ÆÄÀÏÀÇ ÁÖ¼Ò¸¦
      È£½ºÆ®¸íÀ¸·Î º¯È¯ÇÏ·Á¸é ¿©·¯ ·Î±×Ã³¸® ÇÁ·Î±×·¥Áß ÇÏ³ªÀÎ,
      ¾ÆÆÄÄ¡¿¡ Æ÷ÇÔµÈ <a
      href="../programs/logresolve.html"><code>logresolve</code></a>
      ÇÁ·Î±×·¥À» »ç¿ëÇÏ¶ó.</p>

      <p>·Î±×Ã³¸® ÀÛ¾÷ÀÌ ¼­¹ö ¼º´É¿¡ ¾Ç¿µÇâÀ» ¹ÌÄ¡¹Ç·Î ½ÇÁ¦
      »ç¿ëÇÏ´Â À¥¼­¹ö°¡ ¾Æ´Ñ ´Ù¸¥ ÄÄÇ»ÅÍ¿¡¼­ ·Î±×ÆÄÀÏÀ» ÈÄÃ³¸®ÇÏ±æ
      ¹Ù¶õ´Ù.</p>

      <p><code><directive module="mod_access">Allow</directive>
      from domain</code>ÀÌ³ª <code><directive 
      module="mod_access">Deny</directive> from domain</code>
      Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù¸é (Áï, IP ÁÖ¼Ò°¡ ¾Æ´Ñ È£½ºÆ®¸íÀÌ³ª µµ¸ÞÀÎ¸íÀ»
      »ç¿ëÇÑ´Ù¸é) ºÎµæÀÌ Áßº¹-¿ª DNS °Ë»öÀ» (¿ª°Ë»öÀ» ÇÑÈÄ ¾ÇÀÇ·Î
      º¯°æµÇ¾ú´ÂÁö È®ÀÎÇÏ±âÀ§ÇØ ´Ù½Ã °Ë»ö) ÇØ¾ß ÇÑ´Ù. ±×·¯¹Ç·Î
      ¼º´ÉÀ» ³ôÀÌ±âÀ§ÇØ ÀÌ·± Áö½Ã¾î¿¡´Â °¡´ÉÇÏ¸é ÀÌ¸§´ë½Å IP
      ÁÖ¼Ò¸¦ »ç¿ëÇÑ´Ù.</p>

      <p><code>&lt;Location /server-status&gt;</code> ¼½¼Ç µîÀ¸·Î
      Áö½Ã¾îÀÇ Àû¿ë¹üÀ§¸¦ Á¦ÇÑÇÒ ¼ö ÀÖÀ½À» ±â¾ïÇÏ¶ó. ÀÌ °æ¿ì
      Á¶°Ç¿¡ ¸Â´Â ¿äÃ»¿¡¸¸ DNS Á¶È¸¸¦ ÇÑ´Ù. ´ÙÀ½Àº
      <code>.html</code>°ú <code>.cgi</code> ÆÄÀÏ¸¸ DNS °Ë»öÀ»
      ÇÏ´Â ¿¹Á¦´Ù:</p>

      <example>
        HostnameLookups off<br />
        &lt;Files ~ "\.(html|cgi)$"&gt;<br />
        <indent>
          HostnameLookups on<br />
        </indent>
        &lt;/Files&gt;
      </example>

      <p>±×·¯³ª CGI¿¡¼­ DNS¸íÀÌ ÇÊ¿äÇÒ »ÓÀÌ¶ó¸é, ÇÊ¿äÇÑ Æ¯Á¤
      CGI¿¡¼­¸¸ <code>gethostbyname</code> È£ÃâÀ» ÇÏµµ·Ï °í·ÁÇØº¼
      ¼ö ÀÖ´Ù.</p>

    </section>

    <section id="symlinks">

      <title>FollowSymLinks¿Í SymLinksIfOwnerMatch</title>

      <p>URL °ø°£¿¡¼­ <code>Options FollowSymLinks</code>¸¦
      »ç¿ëÇÏÁö¾Ê°í <code>Options SymLinksIfOwnerMatch</code>¸¦
      »ç¿ëÇÏ¸é ¾ÆÆÄÄ¡´Â ½Éº¼¸µÅ©¸¦ °Ë»çÇÏ±âÀ§ÇØ ½Ã½ºÅÛÈ£ÃâÀ»
      ÇÑ¹ø ´õ ÇØ¾ß ÇÑ´Ù. ÆÄÀÏ¸íÀÇ °¢ ºÎºÐ¸¶´Ù ÇÑ¹ø¾¿ ´õ È£ÃâÀ»
      ÇÑ´Ù. ¿¹¸¦ µé¾î, ¼³Á¤ÀÌ ´ÙÀ½°ú °°°í:</p>

      <example>
        DocumentRoot /www/htdocs<br />
        &lt;Directory /&gt;<br />
        <indent>
          Options SymLinksIfOwnerMatch<br />
        </indent>
        &lt;/Directory&gt;
      </example>

      <p><code>/index.html</code> URI¿¡ ´ëÇÑ ¿äÃ»ÀÌ ÀÖ´Ù°í °¡Á¤ÇÏÀÚ.
      ±×·¯¸é ¾ÆÆÄÄ¡´Â <code>/www</code>, <code>/www/htdocs</code>,
      <code>/www/htdocs/index.html</code> °¢°¢¿¡ ´ëÇØ
      <code>lstat(2)</code>¸¦ È£ÃâÇÑ´Ù. <code>lstats</code>
      °á°ú¸¦ Ä³½ÌÇÏÁö ¾Ê±â¶§¹®¿¡ ¿äÃ»ÀÌ µé¾î¿Ã ¶§¸¶´Ù ¸Å¹ø °°Àº
      ÀÛ¾÷À» ÇÑ´Ù. ÁøÂ¥ ½Éº¼¸µÅ© º¸¾È °Ë»ç¸¦ ¿øÇÑ´Ù¸é ´ÙÀ½°ú
      °°ÀÌ ÇÒ ¼ö ÀÖ´Ù:</p>

      <example>
        DocumentRoot /www/htdocs<br />
        &lt;Directory /&gt;<br />
        <indent>
          Options FollowSymLinks<br />
        </indent>
        &lt;/Directory&gt;<br />
        <br />
        &lt;Directory /www/htdocs&gt;<br />
        <indent>
          Options -FollowSymLinks +SymLinksIfOwnerMatch<br />
        </indent>
        &lt;/Directory&gt;
      </example>

      <p>ÀÌ °æ¿ì ÃÖ¼ÒÇÑ <directive
      module="core">DocumentRoot</directive> °æ·Î´Â °Ë»çÇÏÁö
      ¾Ê´Â´Ù. DocumentRoot ¹Û¿¡ ÀÖ´Â °æ·Î·Î <directive
      module="mod_alias">Alias</directive>³ª <directive
      module="mod_rewrite">RewriteRule</directive>À» »ç¿ëÇÑ
      °æ¿ì¿¡µµ À§¿Í ºñ½ÁÇÑ ¼½¼ÇÀÌ ÇÊ¿äÇÏ´Ù. ½Éº¼¸µÅ© º¸¾ÈÀ»
      °í·ÁÇÏÁö ¾Ê°í ÃÖ°íÀÇ ¼º´ÉÀ» ¾òÀ¸·Á¸é,
      <code>FollowSymLinks</code>¸¦ ¼³Á¤ÇÏ°í,
      <code>SymLinksIfOwnerMatch</code>´Â Àý´ë·Î ¾ÈµÈ´Ù.</p>

    </section>

    <section id="htacess">

      <title>AllowOverride</title>

      <p>URL °ø°£¿¡¼­ overrides¸¦ Çã¿ëÇÑ´Ù¸é (º¸Åë
      <code>.htaccess</code> ÆÄÀÏ) ¾ÆÆÄÄ¡´Â ÆÄÀÏ¸íÀÇ °¢ ºÎºÐ¸¶´Ù
      <code>.htaccess</code>¸¦ ¿­±æ ½ÃµµÇÑ´Ù. ¿¹¸¦ µé¾î,</p>

      <example>
        DocumentRoot /www/htdocs<br />
        &lt;Directory /&gt;<br />
        <indent>
          AllowOverride all<br />
        </indent>
        &lt;/Directory&gt;
      </example>

      <p><code>/index.html</code> URI¿¡ ´ëÇÑ ¿äÃ»ÀÌ ÀÖ´Ù°í °¡Á¤ÇÏÀÚ.
      ¾ÆÆÄÄ¡´Â <code>/.htaccess</code>, <code>/www/.htaccess</code>,
      <code>/www/htdocs/.htaccess</code>¸¦ ¿­·Á°í ½ÃµµÇÑ´Ù.
      ÇØ°áÃ¥Àº ¾ÕÀÇ <code>Options FollowSymLinks</code> °æ¿ì¿Í
      ºñ½ÁÇÏ´Ù. ÃÖ°íÀÇ ¼º´ÉÀ» ¾òÀ¸·Á¸é ÆÄÀÏ½Ã½ºÅÛ¿¡ ´ëÇØ¼­ Ç×»ó
      <code>AllowOverride None</code>À» »ç¿ëÇÑ´Ù.</p>

    </section>

    <section id="negotiation">

      <title>³»¿ëÇù»ó</title>

      <p>°¡´ÉÇÏ°í ÁøÂ¥ Á¶±ÝÀÇ ¼º´ÉÇâ»ó¿¡µµ °ü½ÉÀÌ ÀÖ´Ù¸é ³»¿ëÇù»óÀ»
      ¸·´Â´Ù. ½ÇÁ¦·Î Çù»óÀÇ ÀÌµæÀº ¼º´ÉÀúÇÏº¸´Ù ÀÛ´Ù. ¼­¹ö¸¦
      ºü¸£°Ô ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½°ú °°ÀÌ ¿ÍÀÏµåÄ«µå¸¦ »ç¿ëÇÏ´Â ´ë½Å:</p>

      <example>
        DirectoryIndex index
      </example>

      <p>¿ÏÀüÇÑ ¸ñ·ÏÀ» »ç¿ëÇÑ´Ù:</p>

      <example>
        DirectoryIndex index.cgi index.pl index.shtml index.html
      </example>

      <p>°¡Àå ÈçÇÑ °ÍÀ» ¾Õ¿¡ µÐ´Ù.</p>

      <p>¶Ç, µð·ºÅä¸®¿¡¼­ ÆÄÀÏµéÀ» Ã£´Â <code>MultiViews</code>
      º¸´Ù´Â, ÇÑ ÆÄÀÏ¸¸ ÀÐÀ¸¸é ÇÊ¿äÇÑ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Â
      <code>type-map</code> ÆÄÀÏÀ» Á÷Á¢ ¸¸µå´Â °ÍÀÌ ´õ ºü¸§À»
      ¸í½ÉÇÏ¶ó.</p>

    <p>»çÀÌÆ®¿¡ ³»¿ëÇù»óÀÌ ÇÊ¿äÇÏ´Ù¸é Çù»óÀ» À§ÇØ <code>Options
    MultiViews</code> Áö½Ã¾î¸¦ »ç¿ëÇÏ±âº¸´Ù <code>type-map</code>
    ÆÄÀÏÀ» °í·ÁÇÏ¶ó. Çù»ó¹æ¹ý¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸í°ú
    <code>type-map</code> ÆÄÀÏÀ» ¸¸µå´Â ¹æ¹ýÀº <a
    href="../content-negotiation.html">³»¿ëÇù»ó</a> ¹®¼­¸¦ Âü°íÇÏ¶ó.</p>

    </section>

    <section>

      <title>¸Þ¸ð¸®´ëÀÀ (memory-mapping)</title>

      <p>¿¹¸¦ µé¾î, server-side-include¸¦ Ã³¸®ÇÏ´Â µî ¾ÆÆÄÄ¡
      2.0ÀÌ Àü¼ÛÇÒ ÆÄÀÏÀ» ÀÐÀ»¶§ ¿î¿µÃ¼Á¦°¡ <code>mmap(2)</code>
      µîÀ» Áö¿øÇÑ´Ù¸é ÆÄÀÏÀ» ¸Þ¸ð¸®´ëÀÀÇÑ´Ù.</p>

      <p>¿©·¯ ÇÃ·¡Æû¿¡¼­ ¸Þ¸ð¸®´ëÀÀÀ» ¼º´ÉÀ» Çâ»óÇÑ´Ù. ±×·¯³ª
      ¸Þ¸ð¸®´ëÀÀÀÌ ¼­¹öÀÇ ¼º´ÉÀ» ¶³¾îÆ®¸®°í ½ÉÁö¾î ¾ÈÁ¤¼ºÀ»
      ÇØÄ¡´Â °æ¿ì°¡ ÀÖ´Ù:</p>

      <ul>
        <li>
          <p>¾î¶² ¿î¿µÃ¼Á¦¿¡¼­ <code>mmap</code>Àº CPU °³¼ö°¡
          ¸¹¾ÆÁú¶§ <code>read(2)</code> ¸¸Å­ È®Àå¼ºÀÌ ÁÁÁö ¾Ê´Ù.
          ¿¹¸¦ µé¾î, ´ÙÁßÇÁ·Î¼¼¼­ Solaris ¼­¹ö¿¡¼­ ¾ÆÆÄÄ¡ 2.0Àº
          Á¾Á¾ <code>mmap</code>À» »ç¿ëÇÏÁö ¾ÊÀ»¶§ ¼­¹ö°¡ Ã³¸®ÇÑ
          ÆÄÀÏÀ» ´õ »¡¸® Àü¼ÛÇÑ´Ù.</p>
        </li>

        <li>
          <p>NFS ¸¶¿îÆ®ÇÑ ÆÄÀÏ½Ã½ºÅÛ¿¡ ÀÖ´Â ÆÄÀÏÀ» ¸Þ¸ð¸®´ëÀÀÇÏ´Â
          µµÁß¿¡ ´Ù¸¥ NFS Å¬¶óÀÌ¾ðÆ®¿¡ ÀÖ´Â ÇÁ·Î¼¼½º°¡ ÆÄÀÏÀ»
          Áö¿ì°Å³ª ÆÄÀÏÅ©±â¸¦ ÁÙÀÌ¸é, À¥¼­¹ö ÇÁ·Î¼¼½º°¡ ´ÙÀ½
          ¹ø¿¡ ¸Þ¸ð¸®´ëÀÀÇÑ ÆÄÀÏ³»¿ëÀ» ÀÐÀ»¶§ bus error°¡ ¹ß»ýÇÒ
          ¼ö ÀÖ´Ù.</p>
        </li>
      </ul>

      <p>À§ÀÇ Á¶°Ç¿¡ ÇØ´çÇÏ¸é Àü¼ÛÇÏ´Â ÆÄÀÏÀ» ¸Þ¸ð¸®´ëÀÀÇÏÁö
      ¾Êµµ·Ï <code>EnableMMAP off</code>¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. (ÁÖÀÇ:
      ÀÌ Áö½Ã¾î´Â µð·ºÅä¸®º°·Î º¯°æÇÒ ¼ö ÀÖ´Ù.)</p>

    </section>

    <section>

      <title>Sendfile</title>

      <p>¾ÆÆÄÄ¡´Â ¿î¿µÃ¼Á¦°¡ <code>sendfile(2)</code>À» Áö¿øÇÏ¸é
      Ä¿³Î sendfileÀ» »ç¿ëÇÏ¿© -- ¿¹¸¦ µé¾î, Á¤Àû ÆÄÀÏÀ» ¼­ºñ½ºÇÒ¶§
      -- Àü¼ÛÇÒ ÆÄÀÏÀ» Á÷Á¢ ÀÐÁö¾ÊÀ» ¼ö ÀÖ´Ù.</p>

      <p>¿©·¯ ÇÃ·¡Æû¿¡¼­ sendfileÀ» »ç¿ëÇÏ¸é read¿Í send¸¦ µû·Î
      ÇÒ ÇÊ¿ä°¡ ¾ø¾î¼­ »¡¶óÁø´Ù. ±×·¯³ª sendfileÀ» »ç¿ëÇÏ¸é
      À¥¼­¹öÀÇ ¾ÈÁ¤¼ºÀ» ÇØÄ¡°ÔµÇ´Â °æ¿ì°¡ ÀÖ´Ù:</p>

      <ul>
        <li>
          <p>sendfile Áö¿øÀÌ Àß¸øµÇ¾ú°í ÄÄÆÄÀÏ ½Ã½ºÅÛÀÌ ÀÌÁ¡À»
          ¹ß°ßÇÏÁö ¸øÇÏ´Â ÇÃ·¡ÆûÀÌ ÀÖ´Ù. Æ¯È÷ ´Ù¸¥ ÄÄÇ»ÅÍ¿¡¼­
          ½ÇÇàÆÄÀÏÀ» ÄÄÆÄÀÏÇÏ¿© sendfile Áö¿øÀÌ Àß¸øµÈ ÄÄÇ»ÅÍ·Î
          °¡Á®¿Â °æ¿ì¿¡ °¡´ÉÇÏ´Ù.</p>
        </li>
        <li>
          <p>Ä¿³ÎÀº ÀÚ½ÅÀÇ Ä³½¬¸¦ »ç¿ëÇÏ¿© NFS·Î ¸¶¿îÆ®ÇÑ ÆÄÀÏÀ»
          ¾ÈÁ¤ÀûÀ¸·Î ¼­ºñ½ºÇÒ ¼ö ¾ø´Â °æ¿ì°¡ ÀÖ´Ù.</p>
        </li>
      </ul>

      <p>À§ÀÇ Á¶°Ç¿¡ ÇØ´çÇÏ¸é ÆÄÀÏÀ» sendfile Àü¼ÛÇÏÁö ¾Êµµ·Ï
      <code>EnableSendfile off</code>¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. (ÁÖÀÇ:
      ÀÌ Áö½Ã¾î´Â µð·ºÅä¸®º°·Î º¯°æÇÒ ¼ö ÀÖ´Ù.)</p>

    </section>

    <section id="process">

      <title>ÇÁ·Î¼¼½º »ý¼º</title>

      <p>¾ÆÆÄÄ¡ 1.3 ÀÌÀü¿¡´Â <directive
      module="prefork">MinSpareServers</directive>, <directive
      module="prefork">MaxSpareServers</directive>, <directive
      module="mpm_common">StartServers</directive> ¼³Á¤ÀÌ ¸ðµÎ
      º¥Ä¡¸¶Å© °á°ú¿¡ Å« ¿µÇâÀ» ¹ÌÃÆ´Ù. Æ¯È÷ ¾ÆÆÄÄ¡´Â ÀÛ¾÷À»
      ¼­ºñ½ºÇÏ±âÀ§ÇØ ÃæºÐÇÑ ÀÚ½Ä¼ö¿¡ ´Ù´Ù¸¦ ¶§±îÁö "µµ´Þ" ±â°£ÀÌ
      ÇÊ¿äÇß´Ù. Ã³À½ <directive
      module="mpm_common">StartServers</directive>°³ ÀÚ½ÄÀ»
      ¸¸µçÈÄ, <directive module="prefork">MinSpareServers</directive>
      ¼³Á¤°ª±îÁö ÃÊ´ç ÀÚ½ÄÀ» ÇÏ³ª¾¿ ¸¸µé¾ú´Ù. ±×·¡¼­ <directive
      module="mpm_common">StartServers</directive> ±âº»°ªÀÌ
      <code>5</code>ÀÎ ¼­¹ö¿¡ Å¬¶óÀÌ¾ðÆ® 100°³°¡ µ¿½Ã¿¡ Á¢¼ÓÇÏ¸é
      ºÎÇÏ¸¦ Ã³¸®ÇÏ±â¿¡ ÃæºÐÇÑ ÀÚ½ÄÀ» ¸¸µé±â±îÁö 95ÃÊ°¡ °É·È´Ù.
      ÀÚÁÖ Àç½ÃÀÛÇÏÁö ¾Ê´Â ½ÇÁ¦ ¼­¹ö¿¡¼­´Â Àß µ¿ÀÛÇÏÁö¸¸, 10ºÐ°£¸¸
      ½ÇÇàÇÏ´Â º¥Ä¡¸¶Å© °á°ú´Â ¸Å¿ì ³ª»Ú°Ô ³ª¿Â´Ù.</p>

      <p>ÃÊ´ç ÇÑ°³ ±ÔÄ¢Àº ÀÚ½ÄÀ» »õ·Î ½ÃÀÛÇÏ¸é¼­ ¼­¹ö¿¡ ¹«¸®¸¦
      ÁÖÁö ¾ÊÀ¸·Á°í Á¤Çß´Ù. ÄÄÇ»ÅÍ°¡ ÀÚ½ÄÀ» ½ÃÀÛÇÏ´À¶ó ¹Ù»Ú¸é
      ¿äÃ»À» ¼­ºñ½ºÇÒ ¼ö ¾ø´Ù. ±×·¯³ª ÀÌ ±ÔÄ¢ÀÌ ¾ÆÆÄÄ¡ÀÇ Ã¼°¨
      ¼º´É¿¡ ¾Ç¿µÇâÀ» ÁÖ¾î º¯°æÇÏ¿´´Ù. ¾ÆÆÄÄ¡ 1.3¿¡¼­ ÃÊ´ç ÇÑ°³
      ±ÔÄ¢Àº ¿ÏÈ­µÇ¾ú´Ù. ÄÚµå´Â ÀÚ½Ä ÇÑ°³¸¦ ¸¸µé°í, 1ÃÊ ½¬°í,
      µÎ°³¸¦ ¸¸µé°í, 1ÃÊ ½¬°í, ³×°³¸¦ ¸¸µé°í, ÀÌ·± ½ÄÀ¸·Î ÃÊ´ç
      ÀÚ½ÄÀ» 32°³ ¸¸µé¶§±îÁö Áö¼ö·Î Áõ°¡ÇÑ´Ù. ÀÚ½Ä¼ö°¡ <directive
      module="prefork">MinSpareServers</directive> ¼³Á¤¿¡ ´Ù´Ù¸£¸é
      Áõ°¡¸¦ Áß´ÜÇÑ´Ù.</p>

      <p>ÀÌ °æ¿ì ¹ÝÀÀ¼Óµµ°¡ »¡¶óÁ®¼­ <directive module="prefork"
      >MinSpareServers</directive>, <directive module="prefork"
      >MaxSpareServers</directive>, <directive module="mpm_common"
      >StartServers</directive>¸¦ °ÅÀÇ ¼³Á¤ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ÀÏÃÊ¿¡
      ÀÚ½ÄÀ» 4°³ ÀÌ»ó »ý¼ºÇÏ¸é <directive
      module="core">ErrorLog</directive>¿¡ ±â·ÏÇÑ´Ù. ÀÌ·± ¿À·ù¹®ÀÌ
      ¸¹ÀÌ º¸ÀÌ¸é ÀÌ ¼³Á¤µéÀ» Á¶ÀýÇÏ±æ ¹Ù¶õ´Ù.
      <module>mod_status</module> °á°ú°¡ µµ¿òÀÌ µÉ °ÍÀÌ´Ù.</p>

    <p>ÇÁ·Î¼¼½º »ý¼º°ú °ü·ÃÇÏ¿© <directive
    module="mpm_common">MaxRequestsPerChild</directive> ¼³Á¤Àº
    ÇÁ·Î¼¼½º¸¦ Á¾·áÇÑ´Ù. ±âº»°ªÀº ÀÚ½Ä´ç Ã³¸®ÇÒ ¿äÃ»¼ö¿¡ Á¦ÇÑÀÌ
    ¾ø´Ù´Â <code>0</code>ÀÌ´Ù. ÇöÀç ¼³Á¤ÀÌ <code>30</code>°ú
    °°ÀÌ ¸Å¿ì ÀÛÀº °ªÀ¸·Î ¼³Á¤µÇÀÖ´Ù¸é, °ªÀ» »ó´çÈ÷ ³ôÈú ÇÊ¿ä°¡
    ÀÖ´Ù. SunOS³ª ¿À·¡µÈ Solaris ¹öÀüÀ» »ç¿ëÇÑ´Ù¸é, ¸Þ¸ð¸®À¯Ãâ¶§¹®¿¡
    ÀÌ °ªÀ» <code>10000</code> Á¤µµ·Î ¼³Á¤ÇÏ¶ó.</p>

    <p>¿¬°áÀ¯Áö(keep-alive)¸¦ »ç¿ëÇÑ´Ù¸é ÀÚ½ÄµéÀº ÀÌ¹Ì ¿­¸°
    ¿¬°á¿¡¼­ Ãß°¡ ¿äÃ»À» ±â´Ù¸®¸ç ¾Æ¹«°Íµµ ÇÏÁö¾Ê±â¶§¹®¿¡ °è¼Ó
    ¹Ù»Ú´Ù. <directive module="core">KeepAliveTimeout</directive>ÀÇ
    ±âº»°ª <code>15</code> ÃÊ´Â ÀÌ·± Çö»óÀ» ÃÖ¼ÒÈ­ÇÑ´Ù. ³×Æ®¿÷
    ´ë¿ªÆø°ú ¼­¹ö ÀÚ¿ø °£ÀÇ ±ÕÇüÀÌ ¸Â°Ô ¼³Á¤ÇÑ´Ù. <a
    href="http://www.research.digital.com/wrl/techreports/abstracts/95.4.html">
    ¿¬°áÀ¯ÁöÀÇ ´ëºÎºÐÀÇ ÀÌÁ¡ÀÌ »ç¶óÁö±â¶§¹®¿¡</a> ¾î¶² °æ¿ì¿¡µµ
    ÀÌ °ªÀ» <code>60</code> ÃÊ ÀÌ»óÀ¸·Î ¿Ã¸®Áö ¸¶¶ó.</p>

    </section>

  </section>

  <section id="compiletime">

    <title>ÄÄÆÄÀÏ½Ã ¼³Á¤¿¡ ´ëÇØ¼­</title>

    <section>

      <title>MPM ¼±ÅÃ</title>

      <p>¾ÆÆÄÄ¡ 2.x´Â <a href="../mpm.html">´ÙÁßÃ³¸®¸ðµâ</a>
      (MPMs)ÀÌ¶ó´Â ±³Ã¼ÇÒ ¼ö ÀÖ´Â µ¿±âÈ­ ¸ðµ¨À» Áö¿øÇÑ´Ù. ¾ÆÆÄÄ¡¸¦
      ÄÄÆÄÀÏÇÒ¶§ MPMÀ» ¼±ÅÃÇØ¾ß ÇÑ´Ù. <module>beos</module>,
      <module>mpm_netware</module>, <module>mpmt_os2</module>,
      <module>mpm_winnt</module>¿Í °°ÀÌ Æ¯Á¤ ÇÃ·¡Æû¿¡¼­¸¸ »ç¿ëÇÒ
      ¼ö ÀÖ´Â MPMµµ ÀÖ´Ù. ÀÏ¹ÝÀûÀÎ À¯´Ð½º·ù ½Ã½ºÅÛÀº ¿©·¯ MPM
      Áß¿¡ ÇÏ³ª¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. À¥¼­¹öÀÇ ¼Óµµ¿Í
      È®Àå¼º(scalability)Àº ¾î¶² MPMÀ» ¼±ÅÃÇß³Ä¿¡ ´Þ·È´Ù:</p>

      <ul>

        <li><module>worker</module> MPMÀº ¿©·¯ ÀÚ½Ä ÇÁ·Î¼¼½º°¡
        °¢°¢ ¿©·¯ ¾²·¹µå¸¦ »ç¿ëÇÑ´Ù. °¢ ¾²·¹µå´Â ÇÑ¹ø¿¡ ÇÑ ¿¬°áÀ»
        ´ã´çÇÑ´Ù. ÀÏ¹ÝÀûÀ¸·Î worker´Â prefork MPM º¸´Ù ÀûÀº
        ¸Þ¸ð¸®¸¦ »ç¿ëÇÏ¹Ç·Î Åë½Å·®ÀÌ ¸¹Àº ¼­¹ö¿¡ ÀûÀýÇÏ´Ù.</li>

        <li><module>prefork</module> MPMÀº ¾²·¹µå°¡ ÇÑ°³ÀÎ ÀÚ½Ä
        ÇÁ·Î¼¼½º¸¦ ¿©·¯°³ »ç¿ëÇÑ´Ù. °¢ ÇÁ·Î¼¼½º´Â ÇÑ¹ø¿¡ ÇÑ
        ¿¬°áÀ» ´ã´çÇÑ´Ù. ¿©·¯ ½Ã½ºÅÛ¿¡¼­ preforkÀÇ ¼Óµµ´Â worker¿Í
        ºñ½ÁÇÏÁö¸¸, ´õ ¸¹Àº ¸Þ¸ð¸®¸¦ »ç¿ëÇÑ´Ù. ´ÙÀ½°ú °°Àº »óÈ²¿¡¼­
        ¾²·¹µå¸¦ »ç¿ëÇÏÁö ¾Ê´Â prefork ¹æ½ÄÀÌ worker¿¡ ºñÇØ
        ÀÌÁ¡À» °¡Áø´Ù: ¾²·¹µå¿¡ ¾ÈÀüÇÏÁö (thread-safe) ¾ÊÀº
        Á¦»ïÀÚ°¡ ¸¸µç ¸ðµâÀ» »ç¿ëÇÒ ¼ö ÀÖ°í, ¾²·¹µå µð¹ö±ë Áö¿øÀÌ
        ºó¾àÇÑ ÇÃ·¡Æû¿¡¼­ ½±°Ô µð¹ö±ëÇÒ ¼ö ÀÖ´Ù.</li>

      </ul>

      <p>ÀÌ MPMµé°ú ´Ù¸¥ MPM¿¡ ´ëÇØ ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â MPM <a
      href="../mpm.html">¹®¼­</a>¸¦ Âü°íÇÏ±æ ¹Ù¶õ´Ù.</p>

    </section>

    <section id="modules">

        <title>¸ðµâ</title>

        <p>¸Þ¸ð¸® »ç¿ë·®ÀÌ ¼º´É¿¡¼­ °¡Àå Áß¿äÇÑ ¿äÀÎÀÌ±â¶§¹®¿¡
        ½ÇÁ¦·Î »ç¿ëÇÏÁö ¾Ê´Â ¸ðµâÀ» Á¦°ÅÇØº¸ÀÚ. ¸ðµâÀ» <a
        href="../dso.html">DSO</a>·Î ÄÄÆÄÀÏÇß´Ù¸é °£´ÜÈ÷ ±×
        ¸ðµâ¿¡ ´ëÇÑ <directive
        module="mod_so">LoadModule</directive> Áö½Ã¾î¸¦ ÁÖ¼®Ã³¸®ÇÏ¸é
        µÈ´Ù. ±×·¡¼­ ¸ðµâÀ» Á¦°ÅÇÏ°í ½ÇÇàÇÏ¿© »çÀÌÆ®°¡ ¸ðµâ¾øÀÌµµ
        Á¤»óÀûÀ¸·Î µ¿ÀÛÇÏ´ÂÁö »ìÆìº¼ ¼ö ÀÖ´Ù.</p>

        <p>¹Ý´ë·Î ¸ðµâÀÌ ¾ÆÆÄÄ¡ ½ÇÇàÆÄÀÏ¿¡ Á¤ÀûÀ¸·Î ¸µÅ©µÇÀÖ´Ù¸é
        ¿øÇÏÁö ¾Ê´Â ¸ðµâÀ» Á¦°ÅÇÏ±âÀ§ÇØ ¾ÆÆÄÄ¡¸¦ ÀçÄÄÆÄÀÏÇØ¾ß
        ÇÑ´Ù.</p>

        <p>¿©±â¼­ ´ç¿¬È÷ ¾î¶² ¸ðµâÀ» »ç¿ëÇÏ°í »ç¿ëÇÏÁö ¸»Áö
        ÀÇ¹®ÀÌ »ý±ä´Ù. Á¤´äÀº À¥»çÀÌÆ®¸¶´Ù ´Ù¸£´Ù. ±×·¯³ª ¾Æ¸¶µµ
        <em>ÃÖ¼ÒÇÑ</em> <module>mod_mime</module>,
        <module>mod_dir</module>, <module>mod_log_config</module>
        ¸ðµâÀº »ç¿ëÇÒ °ÍÀÌ´Ù. ¹°·Ð À¥»çÀÌÆ®¿¡ ·Î±×ÆÄÀÏÀÌ ÇÊ¿ä¾ø´Ù¸é
        <code>mod_log_config</code>´Â ¾ø¾îµµ µÈ´Ù. ±×·¯³ª ÃßÃµÇÏÁö
        ¾Ê´Â´Ù.</p>

    </section>

    <section>

      <title>Atomic ¸í·É</title>

      <p><module>mod_cache</module> °°Àº ¸ðµâ°ú ÃÖ±Ù °³¹ßÁßÀÎ
      worker MPMÀº APRÀÇ atomic API¸¦ »ç¿ëÇÑ´Ù. ÀÌ API´Â °æ·®±Þ
      ¾²·¹µå µ¿±âÈ­¸¦ À§ÇÒ atomic ¸í·ÉÀ» Á¦°øÇÑ´Ù.</p>

      <p>±âº»ÀûÀ¸·Î APRÀº °¢ ¿î¿µÃ¼Á¦/CPU ÇÃ·¡Æû¿¡¼­ °¡Àå È¿À²ÀûÀÎ
      ¹æ¹ýÀ» »ç¿ëÇÏ¿© ÀÌ ¸í·ÉÀ» ±¸ÇöÇÑ´Ù. ¿¹¸¦ µé¾î, ¿©·¯ ÃÖ½Å
      CPU¿¡´Â ÇÏµå¿þ¾î·Î atomic compare-and-swap (CAS) ¿¬»êÀ»
      ÇÏ´Â ¸í·É¾î°¡ ÀÖ´Ù. ±×·¯³ª ¾î¶² ÇÃ·¡Æû¿¡¼­ APRÀº ÀÌ·±
      ¸í·É¾î°¡ ¾ø´Â ¿À·¡µÈ CPU¿Í È£È¯¼ºÀ» À§ÇØ ´õ ´À¸° mutex±â¹Ý
      ±¸ÇöÀ» ±âº»ÀûÀ¸·Î »ç¿ëÇÑ´Ù. ÀÌ·± ÇÃ·¡Æû¿¡¼­ ¾ÆÆÄÄ¡¸¦
      ÄÄÆÄÀÏÇÒ¶§ ¾ÆÆÄÄ¡¸¦ ÃÖ½Å CPU¿¡¼­¸¸ ½ÇÇàÇÒ °èÈ¹ÀÌ¶ó¸é,
      ¾ÆÆÄÄ¡¸¦ ±¸¼ºÇÒ¶§ <code>--enable-nonportable-atomics</code>
      ¿É¼ÇÀ» »ç¿ëÇÏ¿© ´õ ºü¸¥ atomic ±¸ÇöÀ» ¼±ÅÃÇÒ ¼ö ÀÖ´Ù:</p>

      <example>
        ./buildconf<br />
        ./configure --with-mpm=worker --enable-nonportable-atomics=yes
      </example>

      <p><code>--enable-nonportable-atomics</code> ¿É¼ÇÀº ´ÙÀ½°ú
      °°Àº ÇÃ·¡Æû¿¡ ¿µÇâÀÌ ÀÖ´Ù:</p>

      <ul>

        <li>SPARC¿¡¼­ Solaris<br />
            ±âº»ÀûÀ¸·Î APRÀº Solaris/SPARC¿¡¼­ mutex±â¹Ý atomicÀ»
            »ç¿ëÇÑ´Ù. ±×·¯³ª ±¸¼ºÇÒ¶§
            <code>--enable-nonportable-atomics</code>¸¦ »ç¿ëÇÏ¸é
            APRÀº ºü¸¥ ÇÏµå¿þ¾î compare-and-swapÀ» À§ÇÑ SPARC
            v8plus ¸í·É¾î¸¦ »ç¿ëÇÑ´Ù. ÀÌ ¿É¼ÇÀ» »ç¿ëÇÏ¸é atomic
            ¸í·ÉÀÌ ´õ È¿À²ÀûÀÌÁö¸¸ (CPU¸¦ ´ú »ç¿ëÇÏ°í ´õ ³ôÀº
            µ¿±âÈ­°¡ °¡´ÉÇÏ´Ù), ÄÄÆÄÀÏÇÑ ½ÇÇàÆÄÀÏÀº UltraSPARC
            Ä¨¿¡¼­¸¸ ½ÇÇàÇÒ ¼ö ÀÖ´Ù.
        </li>

        <li>Linux on x86<br />
            ±âº»ÀûÀ¸·Î APRÀº ¸®´ª½º¿¡¼­ mutex±â¹Ý atomicÀ»
            »ç¿ëÇÑ´Ù. ±×·¯³ª ±¸¼ºÇÒ¶§
            <code>--enable-nonportable-atomics</code>¸¦ »ç¿ëÇÏ¸é
            APRÀº ºü¸¥ ÇÏµå¿þ¾î compare-and-swapÀ» À§ÇÑ 486
            ¸í·É¾î¸¦ »ç¿ëÇÑ´Ù. ´õ È¿À²ÀûÀÎ atomic ¸í·ÉÀÌ °¡´ÉÇÏÁö¸¸,
            ÄÄÆÄÀÏÇÑ ½ÇÇàÆÄÀÏÀº 486 ÀÌ»ó Ä¨¿¡¼­¸¸ (386Àº ¾ÈµÈ´Ù)
            ½ÇÇàÇÒ ¼ö ÀÖ´Ù.
        </li>

      </ul>

    </section>

    <section>

      <title>mod_status¿Í ExtendedStatus On</title>

      <p>¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇÒ¶§ <module>mod_status</module>¸¦ Æ÷ÇÔÇÏ°í
      ½ÇÇàÇÒ¶§ <code>ExtendedStatus On</code>À» ¼³Á¤ÇÏ¸é ¾ÆÆÄÄ¡´Â
      ¿äÃ»À» ¹ÞÀ»¶§¸¶´Ù <code>gettimeofday(2)</code>(È¤Àº ¿î¿µÃ¼Á¦¿¡
      µû¶ó <code>times(2)</code>)¸¦ µÎ¹ø È£ÃâÇÏ°í (1.3 ÀÌÀü¿¡´Â)
      <code>time(2)</code>µµ Ãß°¡·Î ¿©·¯¹ø È£ÃâÇÑ´Ù. »óÅÂ º¸°í¼­¿¡
      µ¿ÀÛ½Ã°£ÀÌ ÇÊ¿äÇÏ±â ¶§¹®ÀÌ´Ù. ÃÖ»óÀÇ ¼º´ÉÀ» ¾òÀ¸·Á¸é
      (±âº»°ªÀÎ) <code>ExtendedStatus off</code>¸¦ ¼³Á¤ÇÑ´Ù.</p>

    </section>

    <section>

      <title>accept Á÷·ÄÈ­ - ¿©·¯ ¼ÒÄÏ</title>

    <note type="warning"><title>ÁÖÀÇ:</title>
      <p> ¾Æ·¡ ¹®¼­´Â ¾ÆÆÄÄ¡ À¥¼­¹ö 2.0 ¹öÀü¿¡¼­ º¯°æµÈ ³»¿ëÀ»
      ´ã°í ÀÖÁö ¾Ê´Ù. ¾ÆÁ÷µµ À¯È¿ÇÑ Á¤º¸°¡ ÀÖÁö¸¸, ÁÖÀÇÇØ¼­
      »ç¿ëÇÏ±æ ¹Ù¶õ´Ù.</p>
    </note>

      <p>À¯´Ð½º ¼ÒÄÏ APIÀÇ ´ÜÁ¡À» ¼³¸íÇÑ´Ù. À¥¼­¹ö°¡ ¿©·¯ Æ÷Æ®
      È¤Àº ¿©·¯ ÁÖ¼Ò¸¦ ±â´Ù¸®±âÀ§ÇØ ¿©·¯ <directive
      module="mpm_common">Listen</directive>À» »ç¿ëÇÑ´Ù°í °¡Á¤ÇÏÀÚ.
      ¿¬°áÀÌ °¡´ÉÇÑÁö °¢ ¼ÒÄÏÀ» °Ë»çÇÏ±âÀ§ÇØ ¾ÆÆÄÄ¡´Â
      <code>select(2)</code>¸¦ »ç¿ëÇÑ´Ù. <code>select(2)</code>´Â
      ¼ÒÄÏ¿¡ ±â´Ù¸®°í ÀÖ´Â ¿¬°áÀÌ <em>¾ø´ÂÁö</em> È¤Àº <em>ÃÖ¼ÒÇÑ
      ÇÑ°³</em> ÀÖ´ÂÁö ¾Ë·ÁÁØ´Ù. ¾ÆÆÄÄ¡¿¡´Â ¿©·¯ ÀÚ½ÄÀÌ ÀÖ°í,
      ½¬°í ÀÖ´Â ¸ðµç ÀÚ½ÄÀº µ¿½Ã¿¡ »õ·Î¿î ¿¬°áÀ» °Ë»çÇÑ´Ù. ¿ø·¡
      ±¸ÇöÀº ´ÙÀ½°ú ºñ½ÁÇÏ´Ù (ÀÌ ¿¹´Â ÄÚµå¿¡¼­ °¡Á®¿ÀÁö ¾Ê¾Ò´Ù.
      ´ÜÁö ¼³¸íÇÏ±âÀ§ÇÑ ¿ëµµ·Î ¸¸µé¾ú´Ù.):</p>

      <example>
        for (;;) {<br />
        <indent>
          for (;;) {<br />
          <indent>
            fd_set accept_fds;<br />
            <br />
            FD_ZERO (&amp;accept_fds);<br />
            for (i = first_socket; i &lt;= last_socket; ++i) {<br />
            <indent>
              FD_SET (i, &amp;accept_fds);<br />
            </indent>
            }<br />
            rc = select (last_socket+1, &amp;accept_fds, NULL, NULL, NULL);<br />
            if (rc &lt; 1) continue;<br />
            new_connection = -1;<br />
            for (i = first_socket; i &lt;= last_socket; ++i) {<br />
            <indent>
              if (FD_ISSET (i, &amp;accept_fds)) {<br />
              <indent>
                new_connection = accept (i, NULL, NULL);<br />
                if (new_connection != -1) break;<br />
              </indent>
              }<br />
            </indent>
            }<br />
            if (new_connection != -1) break;<br />
          </indent>
          }<br />
          process the new_connection;<br />
        </indent>
        }
      </example>

      <p>±×·¯³ª À§ÀÇ ´Ü¼øÇÑ ±¸Çö¿¡´Â ½É°¢ÇÑ °í°¥(starvation)
      ¹®Á¦°¡ ÀÖ´Ù. ¿©·¯ ÀÚ½ÄÀÌ µ¿½Ã¿¡ ÀÌ ¹Ýº¹¹®À» ½ÇÇàÇÏ¸é,
      ¿äÃ»À» ±â´Ù¸®¸ç ¸ðµÎ <code>select</code>¿¡¼­ ¸ØÃá´Ù. ÀÌ¶§
      ¾î¶² ¼ÒÄÏ¿¡ ¿äÃ»ÀÌ ÇÏ³ª¶óµµ µé¾î¿À¸é ¸ðµç ÀÚ½ÄÀÌ ±ú¾î³­´Ù
      (±ú¾î³ª´Â ÀÚ½ÄÀÇ °³¼ö´Â ¿î¿µÃ¼Á¦¿Í Å¸ÀÌ¹Ö¿¡ µû¶ó ´Ù¸£´Ù).
      ÀÌµéÀº ¸ðµÎ ¿¬°áÀ» <code>accept</code>ÇÏ±æ ½ÃµµÇÑ´Ù. ±×·¯³ª
      (¾ÆÁ÷µµ ÇÑ ¿¬°á¸¸ ´ë±âÁßÀÌ¶ó¸é) ÇÑ ÀÚ½Ä¸¸ ¼º°øÇÏ°í, ³ª¸ÓÁö´Â
      <code>accept</code>¿¡¼­ <em>¸ØÃá´Ù.</em> ±×·¯¸é ÀÌ ÀÚ½ÄµéÀº
      ÇÑ ¼ÒÄÏÀÇ ¿äÃ»¸¸À» ¼­ºñ½ºÇÏµµ·Ï ¹­¿©¼­, ±× ¼ÒÄÏÀ¸·Î »õ·Î¿î
      ¿äÃ»ÀÌ ÃæºÐÈ÷ µé¾î¿Í¼­ ¸ðµç ÀÚ½ÄÀ» ±ú¿ï¶§±îÁö Á¤ÁöÇØÀÖ´Ù.
      ÀÌ·± °í°¥ ¹®Á¦´Â <a
      href="http://bugs.apache.org/index/full/467">PR#467</a>¿¡
      Ã³À½ º¸°íµÇ¾ú´Ù. ÃÖ¼ÒÇÑ µÎ°¡Áö ÇØ°áÃ¥ÀÌ ÀÖ´Ù.</p>

      <p>ÇÑ°¡Áö´Â ¼ÒÄÏÀ» ´ë±âÇÏÁö ¾Êµµ·Ï (non-blocking) ¸¸µå´Â
      ¹æ¹ýÀÌ´Ù. ÀÌ °æ¿ì ÀÚ½ÄÀÌ <code>accept</code>¸¦ ÇØµµ ¸ØÃßÁö
      ¾Ê°í, Áï½Ã ÁøÇàÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª CPU ½Ã°£À» ³¶ºñÇÑ´Ù.
      <code>select</code>¿¡¼­ ½¬´Â ÀÚ½ÄÀÌ 10°³ ÀÖ°í, »õ·Î ¿¬°áÀÌ
      ÇÑ°³ µé¾î¿Ô´Ù°í °¡Á¤ÇÏÀÚ. ±×·¯¸é ÀÌ ÀÚ½ÄÁß 9°³´Â ±ú¾î³ª¼­
      ¿¬°áÀ» <code>accept</code>ÇÏ±æ ½ÃµµÇÏ°í ½ÇÆÐÇÏ¸é ¾Æ¹«
      ÀÏµµ ÇÏÁö ¾Ê°í ´Ù½Ã <code>select</code>¸¦ ¹Ýº¹ÇÑ´Ù. ´Ù½Ã
      <code>select</code>·Î µ¹¾Æ¿Ã ¶§±îÁö ¾î¶² ÀÚ½Äµµ ´Ù¸¥ ¼ÒÄÏ¿¡
      µé¾î¿Â ¿äÃ»À» ¼­ºñ½ºÇÏÁö ¾Ê´Â´Ù. (´ÙÁßÇÁ·Î¼¼¼­ ÄÄÇ»ÅÍ¿¡¼­)
      ½¬´Â ÀÚ½Ä °³¼ö¸¸Å­ CPU °³¼ö°¡ ÀÖ´Â µå¹® °æ¿ì°¡ ¾Æ´Ï¶ó¸é
      ÀÌ ÇØ°áÃ¥Àº º°·Î ÁÁ¾Æº¸ÀÌÁö ¾Ê´Â´Ù.</p>

      <p>´Ù¸¥ ¹æ¹ýÀº ¾ÆÆÄÄ¡°¡ »ç¿ëÇÏ´Â ¹æ¹ýÀ¸·Î ³»ºÎ ¹Ýº¹¹®¿¡
      ÇÑ ÀÚ½Ä¸¸À» µé¿©º¸³½´Ù. ¹Ýº¹¹®Àº ´ÙÀ½°ú °°´Ù (Â÷ÀÌ¸¦
      °­Á¶ÇßÀ½):</p>

      <example>
        for (;;) {<br />
        <indent>
          <strong>accept_mutex_on ();</strong><br />
          for (;;) {<br />
          <indent>
            fd_set accept_fds;<br />
            <br />
            FD_ZERO (&amp;accept_fds);<br />
            for (i = first_socket; i &lt;= last_socket; ++i) {<br />
            <indent>
              FD_SET (i, &amp;accept_fds);<br />
            </indent>
            }<br />
            rc = select (last_socket+1, &amp;accept_fds, NULL, NULL, NULL);<br />
            if (rc &lt; 1) continue;<br />
            new_connection = -1;<br />
            for (i = first_socket; i &lt;= last_socket; ++i) {<br />
            <indent>
              if (FD_ISSET (i, &amp;accept_fds)) {<br />
              <indent>
                new_connection = accept (i, NULL, NULL);<br />
                if (new_connection != -1) break;<br />
              </indent>
              }<br />
            </indent>
            }<br />
            if (new_connection != -1) break;<br />
          </indent>
          }<br />
          <strong>accept_mutex_off ();</strong><br />
          process the new_connection;<br />
        </indent>
        }
      </example>

      <p><code>accept_mutex_on</code>°ú <code>accept_mutex_off</code>
      <a id="serialize" name="serialize">ÇÔ¼ö</a>´Â mutex ¼¼¸¶Æ÷¾î¸¦
      ±¸ÇöÇÑ´Ù. ÇÑ¹ø¿¡ ¿ÀÁ÷ ÇÑ ÀÚ½Ä¸¸ÀÌ mutex¸¦ °¡Áú ¼ö ÀÖ´Ù.
      mutex¸¦ ±¸ÇöÇÏ´Â ¹æ¹ýÀº ¿©·¯°¡ÁöÀÌ´Ù. ±¸Çö ¹æ¹ýÀº (1.3
      ÀÌÀü) <code>src/conf.h</code>³ª (1.3°ú ±× ÀÌÈÄ)
      <code>src/include/ap_config.h</code>¿¡ Á¤ÀÇµÇÀÖ´Ù. ¾î¶²
      ¾ÆÅ°ÅØÃÄ´Â Àá±Ý(locking) ¹æ¹ýÀ» ¼±ÅÃÇÏÁö ¾Ê±â¶§¹®¿¡, ÀÌ·±
      ¾ÆÅ°ÅØÃÄ¿¡¼­ ¿©·¯ <directive
      module="mpm_common">Listen</directive> Áö½Ã¾î¸¦ »ç¿ëÇÏ¸é
      À§ÇèÇÏ´Ù.</p>

      <p>½ÇÇà½Ã <directive
      module="mpm_common">AcceptMutex</directive> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
      mutex ±¸ÇöÀ» º¯°æÇÒ ¼ö ÀÖ´Ù.</p>

      <dl>
        <dt><code>AcceptMutex flock</code></dt>

        <dd>
          <p>ÀÌ ¹æ¹ýÀº Àá±ÝÆÄÀÏÀ» Àá±×±âÀ§ÇØ <code>flock(2)</code>
          ½Ã½ºÅÛÈ£ÃâÀ» »ç¿ëÇÑ´Ù (Àá±ÝÆÄÀÏ À§Ä¡´Â <directive
          module="mpm_common">LockFile</directive> Áö½Ã¾î·Î ÁöÁ¤).</p>
        </dd>

        <dt><code>AcceptMutex fcntl</code></dt>

        <dd>
          <p>ÀÌ ¹æ¹ýÀº Àá±ÝÆÄÀÏÀ» Àá±×±âÀ§ÇØ <code>fcntl(2)</code>
          ½Ã½ºÅÛÈ£ÃâÀ» »ç¿ëÇÑ´Ù (Àá±ÝÆÄÀÏ À§Ä¡´Â <directive
          module="mpm_common">LockFile</directive> Áö½Ã¾î·Î ÁöÁ¤).</p>
        </dd>

        <dt><code>AcceptMutex sysvsem</code></dt>

        <dd>
          <p>(1.3°ú ±× ÀÌÈÄ) ÀÌ ¹æ¹ýÀ» SysV½Ä ¼¼¸¶Æ÷¾î¸¦ »ç¿ëÇÏ¿©
          mutex¸¦ ±¸ÇöÇÑ´Ù. ºÒÇàÈ÷µµ SysV½Ä ¼¼¸¶Æ÷¾î´Â ³ª»Û
          ºÎÀÛ¿ëÀÌ ÀÖ´Ù. ÇÏ³ª´Â ¾ÆÆÄÄ¡°¡ ¼¼¸¶Æ÷¾î¸¦ Á¤¸®ÇÏÁö
          ¾Ê°í Á×À» ¼ö ÀÖ´Â Á¡ÀÌ´Ù (<code>ipcs(8)</code> manpage
          Âü°í). ´Ù¸¥ ÇÏ³ª´Â À¥¼­¹ö¿Í µ¿ÀÏÇÑ uid·Î ½ÇÇàÇÏ´Â
          CGI°¡ (<em>Áï,</em> <code>suexec</code>³ª
          <code>cgiwrapper</code>¸¦ »ç¿ëÇÏÁö¾Ê´Â ÇÑ ¸ðµç CGI)
          ¼¼¸¶Æ÷¾î API¸¦ »ç¿ëÇÏ¿© ¼­ºñ½º°ÅºÎ°ø°ÝÀ» ÇÒ ¼ö ÀÖ´Â
          Á¡ÀÌ´Ù. ÀÌ·± ÀÌÀ¯¶§¹®¿¡ IRIX¸¦ Á¦¿ÜÇÑ ¾ÆÅ°ÅØÃÄ¿¡¼­
          ÀÌ ¹æ¹ýÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù (´ëºÎºÐÀÇ IRIX ÄÄÇ»ÅÍ¿¡¼­
          ¾ÕÀÇ µÎ ¹æ¹ýÀº Áö³ªÄ¡°Ô ¹ö°Ì´Ù).</p>
        </dd>

        <dt><code>AcceptMutex pthread</code></dt>

        <dd>
          <p>(1.3°ú ±× ÀÌÈÄ) ÀÌ ¹æ¹ýÀº POSIX mutex¸¦ »ç¿ëÇÏ±â¶§¹®¿¡
          POSIX ¾²·¹µå ±Ô¾àÀ» ¿ÏÀüÈ÷ ±¸ÇöÇÑ ¾ÆÅ°ÅØÃÄ¶ó¸é ¸ðµÎ
          »ç¿ë°¡´ÉÇÏÁö¸¸, (2.5 ÀÌÈÄ) Solaris¿¡¼­¸¸ ±×°Íµµ Æ¯Á¤
          ±¸¼º¿¡¼­¸¸ µ¿ÀÛÇÏ´Â µíÇÏ´Ù. ÀÌ ¹æ¹ýÀ» ½ÃµµÇØº»´Ù¸é
          ¼­¹ö°¡ ¸ØÃç¼­ ÀÀ´äÀ» ¾ÈÇÏ´ÂÁö »ìÆìºÁ¾ß ÇÑ´Ù. Á¤Àû
          ³»¿ë¸¸ ¼­ºñ½ºÇÏ´Â ¼­¹ö´Â Àß µ¿ÀÛÇÏ´Â °Í °°´Ù.</p>
        </dd>

        <dt><code>AcceptMutex posixsem</code></dt>

        <dd>
          <p>(2.0°ú ±× ÀÌÈÄ) ÀÌ ¹æ¹ýÀº POSIX ¼¼¸¶Æ÷¾î¸¦ »ç¿ëÇÑ´Ù.
          mutex¸¦ °¡Áø ÇÁ·Î¼¼½ºÀÇ ¾²·¹µå°¡ Á×´Â´Ù¸é(segfault)
          ¼¼¸¶Æ÷¾î ¼ÒÀ¯±ÇÀÌ È¸º¹µÇÁö ¾Ê¾Æ¼­ À¥¼­¹ö°¡ ¸ØÃá´Ù.</p>
        </dd>

      </dl>

      <p>½Ã½ºÅÛ¿¡ À§ ¸ñ·Ï¿¡ ¾ø´Â Á÷·ÄÈ­(serialization) ¹æ¹ýÀÌ
      ÀÖ´Ù¸é ±× ¹æ¹ýÀ» »ç¿ëÇÏ´Â ÄÚµå¸¦ APR¿¡ Ãß°¡ÇÒ °¡Ä¡°¡ ÀÖ´Ù.</p>

      <p>°í·Á´Â ÇØºÃÁö¸¸ ±¸ÇöÇÏÁö¾ÊÀº ´Ù¸¥ ¹æ¹ýÀº ºÎºÐÀûÀ¸·Î
      ¹Ýº¹¹®À» Á÷·ÄÈ­ÇÏ´Â ¹æ¹ýÀÌ´Ù. Áï, ÇÁ·Î¼¼¼­¸¦ ¸î°³¸¸ µé¿©º¸³»´Â
      °ÍÀÌ´Ù. ÀÌ ¹æ¹ýÀº ¿©·¯ ÀÚ½ÄÀ» µ¿½Ã¿¡ ½ÇÇàÇÒ ¼ö ÀÖ¾î¼­
      Á÷·ÄÈ­¶§¹®¿¡ ÀüÃ¼ ´ë¿ªÆøÀ» È°¿ëÇÏÁö ¸øÇÏ´Â ´ÙÁßÇÁ·Î¼¼¼­
      ÄÄÇ»ÅÍ¿¡¼­¸¸ °ü½ÉÀ» °¡Á®º¼ ¼ö ÀÖ´Ù. ¾ÕÀ¸·Î »ìÆìº¼ ºÎºÐÀÌÁö¸¸,
      ¸Å¿ì º´·ÄÈ­µÈ À¥¼­¹ö°¡ ÈçÇÏÁö ¾Ê¾Æ¼­ ¿ì¼±¼øÀ§°¡ ³·´Ù.</p>

      <p>ÃÖ»óÀÇ ¼º´ÉÀ» ¾ò±âÀ§ÇØ¼­´Â ¿©·¯ <directive
      module="mpm_common">Listen</directive> ¹®À» »ç¿ëÇÏÁö ¾Ê´Â
      °ÍÀÌ ÀÌ»óÀûÀÌ´Ù. ±×·¯³ª °è¼Ó ¼³¸íÇÑ´Ù.</p>

    </section>

    <section>

      <title>accept Á÷·ÄÈ­ - ¼ÒÄÏ ÇÑ°³</title>

      <p>¾ÕÀÇ ¼³¸íÀº ´ÙÁß¼ÒÄÏ ¼­¹ö¿¡´Â ÁÁÁö¸¸, ¼ÒÄÏÀÌ ÇÑ°³ÀÎ
      ¼­¹ö´Â ¾î¶²°¡? ¿¬°áÀÌ µµÂøÇÒ¶§±îÁö ¸ðµç ÀÚ½ÄÀÌ
      <code>accept(2)</code>¿¡¼­ ¸ØÃçÀÖ±â¶§¹®¿¡ ÀÌ·Ð»ó °°Àº
      ¹®Á¦°¡ ¹ß»ýÇÏÁö ¾Ê°í, °í°¥ ¹®Á¦µµ ¾ø´Ù. ±×·¯³ª ½ÇÁ¦·Î´Â
      ¾Õ¿¡¼­ ¸»ÇÑ ´ë±âÇÏÁö ¾Ê´Â (non-blocking) ¹æ¹ý¿¡¼­ ¹ß»ýÇÏ´Â
      "°øÈ¸Àü(spinning)" Çö»óÀ» °¨Ãß°í ÀÖ´Ù. ´ëºÎºÐÀÇ TCP ½ºÅÃÀº
      ¿¬°áÀÌ µµÂøÇÏ¸é Ä¿³ÎÀÌ <code>accept</code>¿¡¼­ ¸ØÃçÀÖ´Â
      ¸ðµç ÀÚ½ÄÀ» ±ú¿ìµµ·Ï ±¸ÇöµÇÀÖ´Ù. ÇÁ·Î¼¼½ºÁß ÇÑ°³°¡ ¿¬°áÀ»
      ¾ò°í »ç¿ëÀÚ¿µ¿ªÀ¸·Î µ¹¾Æ°¡°í, ³ª¸ÓÁö´Â Ä¿³Î¿¡¼­ °øÈ¸ÀüÇÏ¿©
      ¿¬°áÀÌ ¾øÀ½À» ¹ß°ßÇÏ¸é ´Ù½Ã ÀáÀ» ÀÜ´Ù. »ç¿ëÀÚ¿µ¿ª ÄÚµå¿¡¼­´Â
      ÀÌ·± °øÈ¸ÀüÀ» ¾Ë ¼ö ¾øÁö¸¸, ºÐ¸íÈ÷ Á¸ÀçÇÑ´Ù. ±×·¡¼­ ´ÙÁß¼ÒÄÏÀÇ
      ´ë±âÇÏÁö ¾Ê´Â ¹æ¹ý°ú µ¿ÀÏÇÏ°Ô ºÎÇÏ¸¦ ³ôÀÌ´Â ºÒÇÊ¿äÇÑ Çàµ¿ÀÌ
      ÀÏ¾î³­´Ù.</p>

      <p>±×·¡¼­ ¿ì¸®´Â ¿©·¯ ¾ÆÅ°ÅØÃÄ¿¡¼­ ¼ÒÄÏÀÌ ÇÑ°³ÀÎ °æ¿ì¿¡µµ
      Á÷·ÄÈ­ÇÏ¸é ´õ "Àß" µ¿ÀÛÇÔÀ» ¹ß°ßÇß´Ù. ±×·¡¼­ °ÅÀÇ ´ëºÎºÐÀÇ
      °æ¿ì ±âº»ÀûÀ¸·Î Á÷·ÄÈ­¸¦ »ç¿ëÇÑ´Ù. ¸®´ª½º¿¡¼­ (Ä¿³Î 2.0.30,
      128Mb ¸Þ¸ð¸®¿¡ µà¾ó Pentium pro) ½ÇÇèÇÑ °á°ú ¼ÒÄÏ ÇÑ°³¸¦
      Á÷·ÄÈ­ÇÏ¸é ÇÏÁö ¾ÊÀº °æ¿ì¿¡ ºñÇØ ÃÊ´ç ¿äÃ»ÀÌ 3% ¹Ì¸¸
      ÁÙ¾îµé¾ú´Ù. ±×·¯³ª Á÷·ÄÈ­¸¦ ÇÏÁö ¾ÊÀº °æ¿ì ¿äÃ»´ç 100ms
      Áö¿¬ÀÌ ¹ß»ýÇß´Ù. ÀÌ Áö¿¬Àº ¾Æ¸¶µµ LAN¿¡¼­ ¹ß»ýÇÏ´Â ±ä
      ¿¬°á¼±¶§¹®ÀÏ °ÍÀÌ´Ù. ¼ÒÄÏÀÌ ÇÑ°³ÀÎ °æ¿ì Á÷·ÄÈ­¸¦ »ç¿ëÇÏÁö
      ¾ÊÀ¸·Á¸é <code>SINGLE_LISTEN_UNSERIALIZED_ACCEPT</code>¸¦
      Á¤ÀÇÇÑ´Ù.</p>

    </section>

    <section>

      <title>Close Áö¿¬(lingering)</title>

      <p><a
      href="http://www.ics.uci.edu/pub/ietf/http/draft-ietf-http-connection-00.txt">
      draft-ietf-http-connection-00.txt</a> 8Àý¿¡¼­ ¼³¸íÇÏµíÀÌ
      <strong>¾ÈÁ¤ÀûÀÎ</strong> À¥¼­¹ö°¡ µÇ·Á¸é, Åë½ÅÀÇ ¾ç ¹æÇâÀ»
      µ¶¸³ÀûÀ¸·Î ´ÝÀ» ¼ö ÀÖ¾î¾ß ÇÑ´Ù (TCP ¿¬°áÀº ½Ö¹æÇâÀÌ°í,
      ¹æÇâÀº ¼­·Î µ¶¸³ÀûÀÌ´Ù). ÀÌÁ¡À» ´Ù¸¥ ¼­¹ö¿¡¼­´Â ÀÚÁÖ
      °£°úÇÏÁö¸¸, ¾ÆÆÄÄ¡´Â 1.2ºÎÅÍ Á¤È®È÷ ±¸ÇöÇØ¿Ô´Ù.</p>

      <p>ÀÌ ±â´ÉÀ» ºÎÁÖÀÇÇÏ°Ô ¾ÆÆÄÄ¡¿¡ Ãß°¡ÇßÀ»¶§ ¿©·¯ À¯´Ð½º
      ¹öÀü¿¡¼­ ¸¹Àº ¹®Á¦°¡ ¹ß»ýÇß´Ù. TCP ±Ô¾àÀº
      <code>FIN_WAIT_2</code>¿¡ Å¸ÀÓ¾Æ¿ôÀÌ ÀÖ´Ù°í Á¤ÇÏÁö ¾Ê¾ÒÁö¸¸,
      ±ÝÁöÇÏÁöµµ ¾Ê¾Ò´Ù. Å¸ÀÓ¾Æ¿ôÀÌ ¾ø´Â ½Ã½ºÅÛ¿¡¼­ ¾ÆÆÄÄ¡ 1.2´Â
      ¸¹Àº ¼ÒÄÏÀ» ¿µ¿øÈ÷ <code>FIN_WAIT_2</code> »óÅÂ·Î ¸¸µé¾ú´Ù.
      ¸¹Àº °æ¿ì ÀÌ ¹®Á¦´Â Á¦ÀÛ»ç°¡ Á¦°øÇÏ´Â ÃÖ½Å TCP/IP ÆÐÄ¡¸¦
      Àû¿ëÇÏ¿© ÇØ°áÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª Á¦ÀÛ»ç°¡ ÆÐÄ¡¸¦ ¹ßÇ¥ÇÏÁö
      ¾Ê´Â °æ¿ì°¡ (<em>Áï,</em> SunOS4 -- ¼Ò½º ¶óÀÌ¼±½º°¡ ÀÖ´Â
      »ç¶÷Àº Á÷Á¢ ÆÐÄ¡ÇÒ ¼ö ÀÖÁö¸¸) ÀÖ±â¶§¹®¿¡ ÀÌ ±â´ÉÀ» »ç¿ëÇÏÁö
      ¾Ê±â·Î °áÁ¤Çß´Ù.</p>

      <p>¹æ¹ýÀº µÎ°¡Áö´Ù. ÇÏ³ª´Â ¼ÒÄÏ ¿É¼Ç <code>SO_LINGER</code>¸¦
      »ç¿ëÇÏ´Â ¹æ¹ýÀÌ´Ù. ±×·¯³ª ºÒÇàÈ÷µµ ´ëºÎºÐÀÇ TCP/IP ½ºÅÃÀº
      ÀÌ ¿É¼ÇÀ» ¿Ã¹Ù·Î ±¸ÇöÇÏÁö ¾Ê¾Ò´Ù. ¿Ã¹Ù·Î ±¸ÇöÇÑ ½ºÅÃ¿¡¼­
      Á¶Â÷µµ (<em>Áï,</em> ¸®´ª½º 2.0.31) ÀÌ ¹æ¹ýÀº ´ÙÀ½ ¹æ¹ýº¸´Ù
      ´õ cpu¸¦ Àâ¾Æ¸Ô´Â´Ù.</p>

      <p>¾ÆÆÄÄ¡´Â º¸Åë (<code>http_main.c</code>¿¡ ÀÖ´Â)
      <code>lingering_close</code>¶ó´Â ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. ÀÌ ÇÔ¼ö´Â
      ´ëÃæ ´ÙÀ½°ú °°´Ù:</p>

      <example>
        void lingering_close (int s)<br />
        {<br />
        <indent>
          char junk_buffer[2048];<br />
          <br />
          /* shutdown the sending side */<br />
          shutdown (s, 1);<br />
          <br />
          signal (SIGALRM, lingering_death);<br />
          alarm (30);<br />
          <br />
          for (;;) {<br />
          <indent>
            select (s for reading, 2 second timeout);<br />
            if (error) break;<br />
            if (s is ready for reading) {<br />
            <indent>
              if (read (s, junk_buffer, sizeof (junk_buffer)) &lt;= 0) {<br />
              <indent>
                break;<br />
              </indent>
              }<br />
              /* just toss away whatever is here */<br />
            </indent>
            }<br />
          </indent>
          }<br />
          <br />
          close (s);<br />
        </indent>
        }
      </example>

      <p>ÀÌ ÄÚµå´Â ¿¬°áÀ» ´ÝÀ»¶§ ´õ CPU¸¦ »ç¿ëÇÏÁö¸¸, ¾ÈÁ¤ÀûÀÎ
      ±¸ÇöÀ» À§ÇØ ÇÊ¿äÇÏ´Ù. HTTP/1.1ÀÌ ´õ ³Î¸® ÆÛÁö°í ¸ðµç ¿¬°áÀ»
      À¯ÁöÇÑ´Ù¸é(persistent), ¿¬°áÀ» ¹Þ´Â ºñ¿ëÀº ¿©·¯ ¿äÃ»À»
      Ã³¸®ÇÏ¸é¼­ »ó¼âµÉ °ÍÀÌ´Ù. À§ÇèÇÏ°Ôµµ
      <code>NO_LINGCLOSE</code>¸¦ Á¤ÀÇÇÏ¿© ÀÌ ±â´ÉÀ» »ç¿ëÇÏÁö
      ¾ÊÀ» ¼ö ÀÖÁö¸¸, Àý´ë·Î ±ÇÇÏÁö ¾Ê´Â´Ù. Æ¯È÷ HTTP/1.1
      ÆÄÀÌÇÁ¶óÀÎ <transnote>¿¬°áÀ¯Áö »óÅÂ¿¡¼­ ÀÀ´äÀ» ±â´Ù¸®Áö
      ¾Ê°í ¿©·¯ ¿äÃ»À» º¸³»´Â ±â¼ú</transnote> ¿¬°áÀ¯Áö¿¡´Â
      <code>lingering_close</code>°¡ ÇÊ¼öÀûÀÌ´Ù (±×¸®°í <a
      href="http://www.w3.org/Protocols/HTTP/Performance/Pipeline.html">
      ÆÄÀÌÇÁ¶óÀÎ ¿¬°áÀÌ ´õ ºü¸£±â¶§¹®¿¡</a> »ç¿ëÇÏ±æ ¹Ù¶ö °ÍÀÌ´Ù).</p>

    </section>

    <section>

      <title>Scoreboard ÆÄÀÏ</title>

      <p>¾ÆÆÄÄ¡ÀÇ ºÎ¸ð¿Í ÀÚ½ÄÀº scoreboard¶ó´Â °ÍÀ» ÅëÇØ ¼­·Î
      Åë½ÅÇÑ´Ù. ÀÌ»óÀûÀ¸·Î´Â scoreboard¸¦ °øÀ¯¸Þ¸ð¸®·Î ±¸ÇöÇØ¾ß
      ÇÑ´Ù. ¿ì¸® °³¹ßÀÚ°¡ ÇØ´ç ¿î¿µÃ¼Á¦¿¡ Á¢±ÙÇÒ ¼ö ÀÖ°Å³ª »ó¼¼ÇÑ
      Æ÷ÆÃ °á°ú¸¦ ¹ÞÀº °æ¿ì º¸Åë °øÀ¯¸Þ¸ð¸®¸¦ »ç¿ëÇÏ¿© ±¸ÇöÇÑ´Ù.
      ³ª¸ÓÁö´Â µð½ºÅ©¿¡ ÀÖ´Â ÆÄÀÏÀ» »ç¿ëÇÏ¿© ±¸ÇöÇÑ´Ù. µð½ºÅ©¿¡
      ÀÖ´Â ÆÄÀÏÀº ´À¸®°í ½Å·Úµµ°¡ ¶³¾îÁø´Ù (±â´Éµµ ´õ Àû´Ù).
      <code>src/main/conf.h</code> ÆÄÀÏ¿¡¼­ »ç¿ëÇÏ´Â ¾ÆÅ°ÅØÃÄ¸¦
      Ã£¾Æ¼­ <code>USE_MMAP_SCOREBOARD</code> È¤Àº
      <code>USE_SHMGET_SCOREBOARD</code>ÀÎÁö È®ÀÎÇÑ´Ù. µÑÁß
      ÇÏ³ª¸¦ (°¢°¢ ÇÔ²² »ç¿ëÇÒ <code>HAVE_MMAP</code>ÀÌ³ª
      <code>HAVE_SHMGET</code>µµ °°ÀÌ) Á¤ÀÇÇÏ¸é °øÀ¯¸Þ¸ð¸® ÄÚµå¸¦
      »ç¿ëÇÑ´Ù. ½Ã½ºÅÛÀÌ ´Ù¸¥ Á¾·ùÀÇ °øÀ¯¸Þ¸ð¸®¸¦ »ç¿ëÇÑ´Ù¸é
      <code>src/main/http_main.c</code> ÆÄÀÏÀ» ¼öÁ¤ÇÏ¿© ¾ÆÆÄÄ¡¿¡¼­
      °øÀ¯¸Þ¸ð¸®¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÈÅ(hook)À» Ãß°¡ÇÏ¶ó. (¶ÇÇÑ
      ÆÐÄ¡¸¦ ¿ì¸®¿¡°Ô º¸³»ÁÖ±æ ¹Ù¶õ´Ù.)</p>

      <note>¿ª»çÀû ¼³¸í: ¾ÆÆÄÄ¡ÀÇ ¸®´ª½º ¹öÀüÀº ¾ÆÆÄÄ¡ 1.2 ¹öÀüºÎÅÍ
      °øÀ¯¸Þ¸ð¸®¸¦ »ç¿ëÇÏ±â ½ÃÀÛÇß´Ù. ¸®´ª½º¿¡¼­ ÃÊ±â ¾ÆÆÄÄ¡
      ¹öÀüÀÌ ´À¸®°í ½Å·Úµµ°¡ ¶³¾îÁ³±â ¶§¹®ÀÌ´Ù.</note>

    </section>

    <section>

      <title>DYNAMIC_MODULE_LIMIT</title>

      <p>¸ðµâÀ» µ¿ÀûÀ¸·Î ÀÐ¾îµéÀÌÁö ¾Ê´Â´Ù¸é (°¡´ÉÇÑ Á¶±ÝÀÌ¶óµµ
      ¼º´ÉÀ» ³ôÀÌ±âÀ§ÇØ ÀÌ ±ÛÀ» ÀÐ´Â´Ù¸é ¾Æ¸¶µµ ¸ðµâÀ» µ¿ÀûÀ¸·Î
      ÀÐ¾îµéÀÌÁö ¾ÊÀ» °ÍÀÌ´Ù), ¼­¹ö¸¦ ÄÄÆÄÀÏÇÒ¶§
      <code>-DDYNAMIC_MODULE_LIMIT=0</code>À» Ãß°¡ÇÑ´Ù. ±×·¯¸é
      ¸ðµâÀ» µ¿ÀûÀ¸·Î ÀÐ¾îµéÀÌ±âÀ§ÇØ ÇÒ´çÇÏ´Â ¸Þ¸ð¸®¸¦ Àý¾àÇÑ´Ù.</p>

    </section>

  </section>

  <section id="trace">

    <title>ºÎ·Ï: ½Ã½ºÅÛÈ£Ãâ ±â·ÏÀ» ÀÚ¼¼È÷ ºÐ¼®ÇÏ±â</title>

    <p>´ÙÀ½Àº Solaris 8¿¡¼­ worker MPMÀ» »ç¿ëÇÑ ¾ÆÆÄÄ¡ 2.0.38ÀÇ
    ½Ã½ºÅÛÈ£Ãâ ±â·Ï(trace)ÀÌ´Ù. ¾Æ·¡ ¸í·É¾î¸¦ »ç¿ëÇÏ¿© ±â·ÏÀ»
    ¾ò¾ú´Ù:</p>

    <example>
      truss -l -p <var>httpd_child_pid</var>.
    </example>

    <p><code>-l</code> ¿É¼ÇÀ» »ç¿ëÇÏ¸é truss´Â ½Ã½ºÅÛÈ£ÃâÀ»
    ÇÏ´Â LWP (lightweight process, °æ·®±Þ ÇÁ·Î¼¼½º--SolarisÀÇ
    Ä¿³Î¼öÁØ ¾²·¹µå) ID¸¦ °°ÀÌ ±â·ÏÇÑ´Ù.</p>

    <p>´Ù¸¥ ½Ã½ºÅÛ¿¡´Â <code>strace</code>, <code>ktrace</code>,
    <code>par</code> °°Àº ½Ã½ºÅÛÈ£Ãâ ÃßÀû µµ±¸°¡ ÀÖ´Ù. °á°ú´Â
    ºñ½ÁÇÏ´Ù.</p>

    <p>Å¬¶óÀÌ¾ðÆ®´Â À¥¼­¹ö¿¡°Ô Å©±â°¡ 10KBÀÎ Á¤Àû ÆÄÀÏÀ» ¿äÃ»ÇÑ´Ù.
    Á¤ÀûÀÎ ÆÄÀÏÀ» ¿äÃ»ÇÏÁö ¾Ê°Å³ª ³»¿ëÇù»óÇÏ´Â ¿äÃ»À» ÇÑ °æ¿ì
    ±â·ÏÀÌ ¸Å¿ì ´Ù¸£´Ù (¶§·Î´Â ¸Å¿ì ¾Ë¾Æº¸±â Èûµé´Ù).</p>

    <example>
<pre>/67:    accept(3, 0x00200BEC, 0x00200C0C, 1) (sleeping...)
/67:    accept(3, 0x00200BEC, 0x00200C0C, 1)            = 9</pre>
    </example>

    <p>À§¿¡¼­ ¿¬°á´ë±â(listener) ¾²·¹µå°¡ LWP #67¿¡¼­ ½ÇÇàµÊÀ»
    ¾Ë ¼ö ÀÖ´Ù.</p>

    <note><code>accept(2)</code> Á÷·ÄÈ­¸¦ »ç¿ëÇÏÁö ¾ÊÀ½À» ÁÖ¸ñÇÏ¶ó.
    ¿©·¯ Æ÷Æ®¸¦ ±â´Ù¸®Áö¾Ê´Â °æ¿ì ÀÌ ÇÃ·¡ÆûÀÇ worker MPMÀº
    ±âº»ÀûÀ¸·Î Á÷·ÄÈ­ÇÏÁö ¾ÊÀº accept¸¦ »ç¿ëÇÑ´Ù.</note>

    <example>
<pre>/65:    lwp_park(0x00000000, 0)                         = 0
/67:    lwp_unpark(65, 1)                               = 0</pre>
    </example>

    <p>¿¬°áÀº ¹Þ¾ÆµéÀÌ°í(accept) ¿¬°á´ë±â ¾²·¹µå´Â
    worker ¾²·¹µå¸¦ ±ú¿ö¼­ ¿äÃ»À» Ã³¸®ÇÏ°Ô ÇÑ´Ù. ¾Æ·¡ ±â·Ï¿¡¼­
    ¿äÃ»À» Ã³¸®ÇÏ´Â worker ¾²·¹µå°¡ LWP #65ÀÓÀ» ¾Ë ¼ö ÀÖ´Ù.</p>

    <example>
<pre>/65:    getsockname(9, 0x00200BA4, 0x00200BC4, 1)       = 0</pre>
    </example>

    <p>°¡»óÈ£½ºÆ®¸¦ ±¸ÇöÇÏ±âÀ§ÇØ ¾ÆÆÄÄ¡´Â ¿¬°áÀ» ¹Þ¾ÆµéÀÎ
    Áö¿ª(local) ¼ÒÄÏ ÁÖ¼Ò¸¦ ¾Ë¾Æ¾ß ÇÑ´Ù. (°¡»óÈ£½ºÆ®¸¦ »ç¿ëÇÏÁö
    ¾Ê°Å³ª <directive module="mpm_common">Listen</directive>
    Áö½Ã¾î¿¡ ¿ÍÀÏµåÄ«µå ÁÖ¼Ò¸¦ »ç¿ëÇÏÁö ¾ÊÀº °æ¿ì µî) ¸¹Àº °æ¿ì
    ÀÌ È£ÃâÀ» ¾ø¾Ù ¼ö ÀÖ´Ù. ±×·¯³ª ¾ÆÁ÷ ÀÌ·± ÃÖÀûÈ­ ÀÛ¾÷ÀÌ
    ¾ÈµÇÀÖ´Ù. </p>

    <example>
<pre>/65:    brk(0x002170E8)                                 = 0
/65:    brk(0x002190E8)                                 = 0</pre>
    </example>

    <p><code>brk(2)</code> È£ÃâÀº Èü(heap)¿¡¼­ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÑ´Ù.
    À¥¼­¹ö´Â ´ëºÎºÐÀÇ ¿äÃ» Ã³¸®½Ã ÀÚÃ¼ ¸Þ¸ð¸®
    ÇÒ´çÀÚ(<code>apr_pool</code>°ú <code>apr_bucket_alloc</code>)¸¦
    »ç¿ëÇÏ±â¶§¹®¿¡ ½Ã½ºÅÛÈ£Ãâ ±â·Ï¿¡¼­ ÀÌ ½Ã½ºÅÛÈ£ÃâÀ» º¸±â°¡
    µå¹°´Ù. ÀÌ ±â·Ï¿¡¼­ À¥¼­¹ö´Â ½ÃÀÛÇÏÀÚ¸¶ÀÚ ÀÚÃ¼ ¸Þ¸ð¸® ÇÒ´çÀÚ°¡
    »ç¿ëÇÒ ¸Þ¸ð¸®ºí·ÏÀ» ¾ò±âÀ§ÇØ <code>malloc(3)</code>À» È£ÃâÇÑ´Ù.</p>

    <example>
<pre>/65:    fcntl(9, F_GETFL, 0x00000000)                   = 2
/65:    fstat64(9, 0xFAF7B818)                          = 0
/65:    getsockopt(9, 65535, 8192, 0xFAF7B918, 0xFAF7B910, 2190656) = 0
/65:    fstat64(9, 0xFAF7B818)                          = 0
/65:    getsockopt(9, 65535, 8192, 0xFAF7B918, 0xFAF7B914, 2190656) = 0
/65:    setsockopt(9, 65535, 8192, 0xFAF7B918, 4, 2190656) = 0
/65:    fcntl(9, F_SETFL, 0x00000082)                   = 0</pre>
    </example>

    <p>´ÙÀ½ worker ¾²·¹µå´Â Å¬¶óÀÌ¾ðÆ®ÀÇ ¿¬°á(ÆÄÀÏ±â¼úÀÚ 9)À»
    ´ë±â¾ÈÇÔ(non-blocking) »óÅÂ·Î ¹Ù²Û´Ù. <code>setsockopt(2)</code>¿Í
    <code>getsockopt(2)</code> È£ÃâÀº SolarisÀÇ libc°¡ ¼ÒÄÏ¿¡
    ´ëÇÑ <code>fcntl(2)</code>À» ¾î¶»°Ô Ã³¸®ÇÏ´ÂÁö º¸¿©ÁØ´Ù.</p>

    <example>
<pre>/65:    read(9, " G E T   / 1 0 k . h t m".., 8000)     = 97</pre>
    </example>

    <p>worker ¾²·¹µå´Â Å¬¶óÀÌ¾ðÆ®·Î ºÎÅÍ ¿äÃ»À» ÀÐ´Â´Ù.</p>

    <example>
<pre>/65:    stat("/var/httpd/apache/httpd-8999/htdocs/10k.html", 0xFAF7B978) = 0
/65:    open("/var/httpd/apache/httpd-8999/htdocs/10k.html", O_RDONLY) = 10</pre>
    </example>

    <p>À¥¼­¹ö ¼³Á¤Àº <code>Options FollowSymLinks</code>¿Í
    <code>AllowOverride None</code>ÀÌ´Ù. ±×·¡¼­ ¿äÃ»ÇÑ ÆÄÀÏ°æ·ÎÀÇ
    °¢ µð·ºÅä¸®¿¡ ´ëÇØ <code>lstat(2)</code>ÇÏ°Å³ª
    <code>.htaccess</code> ÆÄÀÏÀ» °Ë»çÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ÆÄÀÏÀ»
    °Ë»çÇÏ±âÀ§ÇØ, 1) ÆÄÀÏÀÌ ÀÖ´ÂÁö, 2) µð·ºÅä¸®°¡ ¾Æ´Ñ ÀÏ¹ÝÆÄÀÏÀÎÁö,
    <code>stat(2)</code> È£Ãâ¸¸ ÇÏ¸é µÈ´Ù.</p>

    <example>
<pre>/65:    sendfilev(0, 9, 0x00200F90, 2, 0xFAF7B53C)      = 10269</pre>
    </example>

    <p>ÀÌ °æ¿ì À¥¼­¹ö´Â ÇÑ¹øÀÇ <code>sendfilev(2)</code> ½Ã½ºÅÛÈ£Ãâ·Î
    HTTP ÀÀ´äÇì´õ¿Í ¿äÃ»ÇÑ ÆÄÀÏÀ» Àü¼ÛÇÒ ¼ö ÀÖ´Ù. Sendfile Áö¿ø¿©ºÎ´Â
    ¿î¿µÃ¼Á¦¸¶´Ù ´Ù¸£´Ù. ´Ù¸¥ ½Ã½ºÅÛÀÌ¶ó¸é <code>sendfile(2)</code>À»
    È£ÃâÇÏ±â Àü¿¡ Çì´õ¸¦ º¸³»±âÀ§ÇØ <code>write(2)</code>³ª
    <code>writev(2)</code> È£ÃâÀ» ÇÑ´Ù.</p>

    <example>
<pre>/65:    write(4, " 1 2 7 . 0 . 0 . 1   -  ".., 78)      = 78</pre>
    </example>

    <p><code>write(2)</code> È£ÃâÀº Á¢±Ù·Î±×(access log)¿¡ ¿äÃ»À»
    ±â·ÏÇÑ´Ù. ÀÌ ±â·Ï¿¡ <code>time(2)</code> È£ÃâÀÌ ¾øÀ½À» ÁÖ¸ñÇÏ¶ó.
    ¾ÆÆÄÄ¡ 1.3°ú ´Þ¸® ¾ÆÆÄÄ¡ 2.0Àº ½Ã°£À» ¾Ë±âÀ§ÇØ
    <code>gettimeofday(3)</code>¸¦ »ç¿ëÇÑ´Ù.
    <code>gettimeofday</code>¸¦ ÃÖÀûÈ­ÇÑ ¸®´ª½º¿Í Solaris °°Àº
    ¸î¸î ¿î¿µÃ¼Á¦¿¡¼­´Â ÀÏ¹ÝÀûÀÎ ½Ã½ºÅÛÈ£Ãâ ºÎ´ãÀÌ ¾ø´Ù.</p>

    <example>
<pre>/65:    shutdown(9, 1, 1)                               = 0
/65:    poll(0xFAF7B980, 1, 2000)                       = 1
/65:    read(9, 0xFAF7BC20, 512)                        = 0
/65:    close(9)                                        = 0</pre>
    </example>

    <p>worker ¾²·¹µå´Â ¿¬°áÀ» Áö¿¬´Ý±â(lingering close)ÇÑ´Ù.</p>

    <example>
<pre>/65:    close(10)                                       = 0
/65:    lwp_park(0x00000000, 0)         (sleeping...)</pre>
    </example>

    <p>¸¶Áö¸·À¸·Î worker ¾²·¹µå´Â ¹æ±Ý Àü¼ÛÇÑ ÆÄÀÏÀ» ´Ý°í,
    ¿¬°á´ë±â(listener) ¾²·¹µå°¡ ´Ù¸¥ ¿¬°áÀ» ÇÒ´çÇÒ ¶§±îÁö
    Á¤ÁöÇÑ´Ù.</p>

    <example>
<pre>/67:    accept(3, 0x001FEB74, 0x001FEB94, 1) (sleeping...)</pre>
    </example>

    <p>±×µ¿¾È ¿¬°á´ë±â ¾²·¹µå´Â ¿¬°áÀ» (¸ðµç worker°¡ ÀÛ¾÷ÁßÀÌ¸é
    ¿¬°á´ë±â ¾²·¹µå¸¦ ¸ØÃß´Â worker MPMÀÇ Èå¸§Á¦¾î ±â´É¿¡ µû¶ó)
    worker ¾²·¹µå¿¡ ÇÒ´çÇÏÀÚ¸¶ÀÚ ´Ù¸¥ ¿¬°áÀ» ¹Þ¾ÆµéÀÏ ¼ö ÀÖ´Ù.
    ÀÌ ±â·Ï¿¡´Â ³ª¿ÀÁö ¾ÊÁö¸¸, worker ¾²·¹µå°¡ ¹æ±Ý ¹ÞÀº ¿¬°áÀ»
    Ã³¸®ÇÏ´Â µ¿¾È ´ÙÀ½ <code>accept(2)</code>°¡ (¿äÃ»ÀÌ ¸Å¿ì
    ¸¹Àº °æ¿ì Ç×»ó) ÀÏ¾î³¯ ¼ö ÀÖ´Ù.</p>

  </section>

</manualpage>

