dso.html.ko.euc-kr revision db93f1f441db5c05e281f4ed3738a3660527cd8e
<?xml version="1.0" encoding="EUC-KR"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko">
<!-- ��� ���� ���� -->
<head>
<meta name="generator" content="HTML Tidy, see www.w3.org" />
<title>���������ü (DSO) ����</title>
</head>
<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
<body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
vlink="#000080" alink="#FF0000">
<!--#include virtual="header.html" -->
<h1 align="center">���������ü (DSO) ����</h1>
<p>����ġ �������� ���ڰ� ������ �����Ͽ� ������ ������
����� ������ �� �ִ� ���ȭ�� ���α׷��̴�. ����� ������ �����ϵɶ�
<code>httpd</code> �������Ͽ� �������� �����ϵ� �� �ִ�.
�ƴϸ� ����� �߽��� �Ǵ� <code>httpd</code> �������ϰ� ������
���������ü(Dynamic Shared Objects, DSOs)�� �����ϵ� �� �ִ�.
DSO ����� ������ �����ϵɶ� �������ϰų� Apache Extension
Tool (<a href="programs/apxs.html">apxs</a>)�� ����Ͽ� ���߿�
�������ϰ� �߰��� �� �ִ�.</p>
<p>�� ������ DSO ��� ����� ��õ� �̷��� �����Ѵ�.</p>
<ul>
<li><a href="#implementation">����</a></li>
<li><a href="#usage">���� ���</a></li>
<li><a href="#background">�������</a></li>
<li><a href="#advantages">������ ����</a></li>
</ul>
<hr />
<table border="1">
<tr>
<td valign="top"><strong>��õ� ���</strong><br />
<br />
<a href="mod/mod_so.html">mod_so</a><br />
</td>
<td valign="top"><strong>��õ� ���þ�</strong><br />
<br />
<a href="mod/mod_so.html#loadmodule">LoadModule</a><br />
</td>
</tr>
</table>
<h2><a id="implementation"
name="implementation">����</a></h2>
<p>����ġ ����� �о���̱����� DSO ������ ����ġ �ٽɿ�
�������� �����ϵǾ���
<a href="mod/mod_so.html"><code>mod_so.c</code></a>���
����� �����Ѵ�. �̴� <code>core.c</code>�� �����ϰ�
DSO�� �� �� ��� ������ ����̴�. ������ �ٸ� ��� ����ġ �����
���� <a href="install.html">��ġ ����</a>���� ������
<code>configure</code>�� <code>--enable-<i>module</i>=shared</code>
�ɼ��� ����Ͽ� DSO�� �������� �� �ִ�. �����
<code>mod_foo.so</code>�� ���� DSO�� �����ϵ��� <code>httpd.conf</code>
���Ͽ� <a href="mod/mod_so.html"><code>mod_so</code></a>��
<a href="mod/mod_so.html#loadmodule"><code>LoadModule</code></a>
��ɾ ����Ͽ� ���� ���۽� Ȥ�� ����۽� �� ����� �о����
�� �ִ�.</p>
<p>����ġ ���(Ư�� ������ ���)�� ����� DSO ������ ����
��������� <a href="programs/apxs.html">apxs</a> (<em>APache
eXtenSion</em>)��� ���ο� ���� ���α׷��� �ִ�.
�̴� ����ġ �ҽ� Ʈ�� <em>�ۿ���</em> DSO�� ����� �����
�������Ҷ� ����Ѵ�. ������ ����. ����ġ�� ��ġ�Ҷ�
<code>configure</code>�� <code>make install</code>��
����ġ C ��������� ��ġ�ϰ�, DSO ������ �������ϱ�����
�÷��� Ư���� �����Ϸ� �ɼǰ� ��Ŀ �ɼ��� <code>apxs</code>
���α׷��� ����. �׷��� ����ڴ� <code>apxs</code>��
����Ͽ� ����ġ ������ �ҽ� Ʈ������, �� DSO ������ ���� �÷���
Ư���� �����Ϸ� �ɼǿ� ��Ŀ �ɼǿ� �Ű��� �����ʰ� �ڽ���
����ġ ��� �ҽ��� �������� �� �ִ�.</p>
<h2><a id="usage" name="usage">���� ���</a></h2>
<p>Apache 2.0�� DSO ��ɿ� ���� ª�� ������ ����̴�:</p>
<ol>
<li>
<em>�������� �ִ�</em> ����ġ ����� �������ϰ� ��ġ�ϴ� ���.
���� ��� <code>mod_foo.c</code>�� DSO <code>mod_foo.so</code>��:
<table bgcolor="#f0f0f0" cellpadding="10">
<tr>
<td>
<pre>
$ /configure --prefix=/path/to/install
--enable-foo=shared
$ make install
</pre>
</td>
</tr>
</table>
</li>
<li>
<em>������</em> ����ġ ����� �������ϰ� ��ġ�ϴ� ���. ���� ���
<code>mod_foo.c</code>�� DSO <code>mod_foo.so</code>��:
<table bgcolor="#f0f0f0" cellpadding="10">
<tr>
<td>
<pre>
$ /configure --add-module=module_type:/path/to/3rdparty/mod_foo.c
--enable-foo=shared
$ make install
</pre>
</td>
</tr>
</table>
</li>
<li>
���� ����� <em>������ ��ġ�ϱ�����</em> ����ġ�� �����ϴ� ���:
<table bgcolor="#f0f0f0" cellpadding="10">
<tr>
<td>
<pre>
$ /configure --enable-so
$ make install
</pre>
</td>
</tr>
</table>
</li>
<li>
<em>������</em> ����ġ ����� �������ϰ� ��ġ�ϴ� ���.
<code>mod_foo.c</code>�� <a href="programs/apxs.html">apxs</a>��
����Ͽ� ����ġ �ҽ� Ʈ�� <em>�ۿ���</em> DSO
<code>mod_foo.so</code>��:
<table bgcolor="#f0f0f0" cellpadding="10">
<tr>
<td>
<pre>
$ cd /path/to/3rdparty
$ apxs -c mod_foo.c
$ apxs -i -a -n foo mod_foo.so
</pre>
</td>
</tr>
</table>
</li>
</ol>
<p>��� ��� �ϴ� ���� ����� �����ϵǸ�, <code>httpd.conf</code>��
<a href="mod/mod_so.html#loadmodule"><code>LoadModule</code></a>
���þ ����Ͽ� ����ġ�� �� ����� Ȱ��ȭ�ϰ� �ؾ��Ѵ�.</p>
<h2><a id="background" name="background">�������</a></h2>
<p>�������� ���н���� <em>���������ü</em> (DSO)��
���� ��ŷ/�ε��̶�� �Ͽ�, Ư���� ����� �����ڵ� ������ �����
������ �������α׷��� �ּҰ� �о���̴� ���� ����� �ִ�.</p>
<p>�� �ε��� ���� �ΰ��� ������� �����ϴ�. �ϳ��� �������α׷���
�����Ҷ� <code>ld.so</code>��� �ý��� ���α׷��� �ε���
�ڵ����� �ϴ� ����, �ٸ� �ϳ��� �������� ���α׷�����
<code>dlopen()/dlsym()</code> �ý����ݷ� ���н� �δ���
�ý��� �������̽��� ����Ͽ� ���� �ε��ϴ� ����.</p>
<p>ù��° ��� DSO�� ���� <em>�������̺귯��(shared libraries)</em> Ȥ��
<em>DSO ���̺귯��</em>��� �θ���, ������ <code>libfoo.so</code>��
<code>libfoo.so.1.2</code> ���� �̸��� �����. �̵���
�ý��� ���丮(���� <code>/usr/lib</code>)�� �ְ�,
�����Ͻ� ��Ŀ ��ɾ <code>-lfoo</code>�� �־� �������ϰ�
����ȴ�. �̷��� ���� ���� ���̺귯���� �������Ͽ� �����ǿ���,
��Ŀ �ɼ� <code>-R</code>�� ���� �����Ͽ��ų� ȯ�溯��
<code>LD_LIBRARY_PATH</code>�� ������ ����� <code>/usr/lib</code>����
���н� �δ��� ���α׷��� �����Ҷ� <code>libfoo.so</code>��
ã��(resolve) �� �ִ�. �׷��� �������α׷��� (���� ��ã��)
�ɺ�(symbol)�� DSO���� ã�Եȴ�.</p>
<p>DSO�� ���� �������α׷��� �ɺ��� ã���ʱ� ������ (DSO��
���밡���� �Ϲ����� �ڵ��� ���̺귯���̹Ƿ�) ã��� ���⼭ ������.
���н� �δ��� �ɺ� ã�⸦ ������ ����ϹǷ� �������α׷��� ����
DSO���� �ɺ��� ã�� �ʿ䰡 ���. (��� <code>ld.so</code>��
�θ��� �ڵ�� ������ �ƴ� ��� �������α׷��� ��ũ�Ǵ� �����
�����ڵ��� �Ϻδ�.) ����� ���̺귯�� �ڵ带 �������� �о���̴�
������ ��Ȯ�ϴ�. ���̺귯�� �ڵ尡 ��� ���α׷��� ����Ǵ� ���
<code>libc.so</code>�� ���� �ý��� ���̺귯���� �ѹ� ����DZ�
������ ��ũ ���� ���ȴ�.</p>
<p>�ι�° ��� DSO�� ���� <em>������ü(shared objects)</em> Ȥ��
<em>DSO ����</em>�̶�� �θ���, (��Ģ�� �̸��� <code>foo.so</code>������)
������ Ȯ���ڴ� �����Ӵ�. �� ���ϵ��� ���� ���α׷� ��ü ���丮��
��ġ�ϰ� �������α׷��� �ڵ����� ������� �ʴ´�. ��� �������α׷���
<code>dlopen()</code>�� ����Ͽ� DSO�� ����� �ּҰ� ����
�о�鿩�� �Ѵ�. �̶� �������α׷��� DSO���� �ɺ��� ã�� �ʴ´�.
��� ���н� �δ��� �ڵ����� �������ϰ� ���������� �̹� �о���� DSO
���̺귯��(Ư�� �׻��ִ� <code>libc.so</code>�� ��� �ɺ�)����
DSO�� (���� ��ã��) �ɺ��� ã�´�. �׷��� DSO�� ��ġ ó������
�������α׷��� �������� ��ũ�ȰͰ� ���� ���������� �ɺ���
�˰Եȴ�.</p>
<p>DSO�� API�� �̿��ϱ����ؼ� ���������� �������α׷���
<code>dlsym()</code>�� DSO���� Ư�� �ɺ��� ã�Ƽ�,
������ ����ϱ����� ����ġ(dispatch) ǥ <em>��</em>��
�����Ѵ�. �ٸ� ���� �������α׷��� ����� ��� �Ǻ��� ����
ã�ƾ��Ѵ�. �̷� ������ ������ ���α׷��� �������� �Ϻ���
���α׷��� �ʿ��Ҷ����� �о������ �ʾƵ� (�׷���
�޸𸮸� �������� �ʰ�) �ȴٴ� ���̴�. �⺻ ���α׷��� �����
Ȯ���ϱ����� �ʿ��Ҷ� �� �κ��� �������� �о���� �� �ִ�.</p>
<p>�̷� DSO ������ �ڿ������� ��������, �ּ��� ����� ����
�ϳ��ִ�. �̴� ���α׷��� Ȯ���ϱ����� DSO�� ����Ҷ�
DSO�� �������α׷��� �ɺ��� ã�� ���̴�. ��? DSO�� �������α׷���
�ɺ��� "������ ã�� ��"�� (���̺귯���� ���Ǵ� ���α׷��� ����
�𸥴ٴ�) ���̺귯�� ���迡 ���ϸ�, ��� �÷��� �������
�ʰ� ǥ��ȭ������ �ʾұ� �����̴�. ������ ����������
��ɺ�(global symbol)�� ���� �ͽ���Ʈ(export)���� �ʱ⶧����
DSO�� ����� �� ���. DSO�� ����Ͽ� ������ ���α׷��� Ȯ���Ϸ���
��Ŀ���� ��� ��ɺ��� �ͽ���Ʈ�ϵ��� �����ϴ� ���� �ֿ���
�ذ�å�̴�.</p>
<p>�������̺귯���� DSO ������ ���� ����Ǿ�⶧���� �������̰�,
�ü���� �����ϴ� ���� ��� ������ ���̺귯���� ���ȴ�.
�ݴ�� ���� ���α׷��� ���α׷��� Ȯ���ϱ����� ������ü��
������� �ʴ´�.</p>
<p>1998�� ������ ������ ����� Ȯ���ϱ�����
DSO ������ ����� ����Ʈ���� ��Ű���� (XS ������ DynaLoader �����
�����) Perl 5, Netscape Server <em>��</em>���� �幰���.
����ġ�� �̹� ����� Ȯ���ϱ����� ��� ������ ����߰� �ܺ�
����� ����ġ �ٽɱ�ɿ� �����ϱ����� ���������� ����ġ����� �̿���
���ٹ���� ����߱⶧���� 1.3 ������� ���⿡ �շ��ߴ�. �׷���
����ġ�� ������ ����� �о���̴µ� DSO�� ����ϵ��� �����������.</p>
<h2><a id="advantages" name="advantages">�����</a></h2>
<p>�տ��� ���� DSO�� ����ϸ� ������ ���� ������ �ִ�:</p>
<ul>
<li>���� ���� ���μ����� �����Ͻ� <code>configure</code>
�ɼǴ�� <code>httpd.conf</code>�� <a
href="mod/mod_so.html#loadmodule"><code>LoadModule</code></a>��
�����߿� ���յǹǷ� ���� ��Ű���� ����� �� �����ϴ�. ���� ���
�ѹ��� ����ġ ��ġ������ �ٸ� ����(ǥ�� ����� SSL ����, �ּ�ȭ �����
����߰� ���� [mod_perl, PHP3] <em>��</em>)�� ������ �� �ִ�.</li>
<li>������ ��ġ�Ŀ��� ������ ���� ���� Ȯ���� �����ϴ�.
�ּ��� ����� ��Ű�� �����ڴ� ����ġ �ٽ� ��Ű���� ������ PHP3, mod_perl,
mod_fastcgi ���� �߰� ��Ű���� ���� �� �־ ū �̵��� �ȴ�.</li>
<li>DSO�� <code>apxs</code>�� ������ ����ġ �ҽ� Ʈ��
�ۿ��� �۾��ϰ� <code>apxs -i</code>��
<code>apachectl restart</code> ��ɾ���� ���� ������
����� �� ������ �������� ����ġ ������ �ݿ��� �� �־ �� ����
����ġ ����� ������ �� �ִ�.</li>
</ul>
<p>DSO�� ������ ���� ������ �ִ�:</p>
<ul>
<li>���α׷��� �ּҰ� �ڵ带 �������� �о���̴� �����
���������ʴ� �ü���� �ֱ� ������ ��� �÷��� DSO��
����� �� ���.</li>
<li>������ ���۽� �� 20% ���� �ʴ�.
because of the symbol resolving overhead the Unix loader now
has to do.</li>
<li>������ ��ġ�����ڵ�(position independent code, PIC)������
����ּ�����(absolute addressing)��ŭ ���� �ʴ� ����ּ�����(relative
addressing)�� ������ ����? ����� �ʿ��ϹǷ� � �÷���
����� �� 5% ���� �ʴ�.</li>
<li>DSO ����� �ٸ� DSO��� ���̺귯��(<code>ld -lfoo</code>)��
��ũ�� �� ��� �÷����� �ֱ⶧���� (���� ��� ELF��� �÷�����
���������� a.out��� �÷����� ���� �� ����� �������� �ʴ´�)
��� ������ ��⿡ DSO�� ����� �� ���. �ٸ� ����
DSO ���Ϸ� �����ϵǴ� ����� ����ġ �ٽɰ� ����ġ �ٽ���
����ϴ� C ���̺귯��(<code>libc</code>)�� �ٸ� ����/����
���̺귯��, ��ġ�����ڵ带 ��� �ִ� ���� ���̺귯��
��ī�̺�(<code>libfoo.a</code>)�� �ɺ����� ����� �� �ִ�.
�ٸ� �ڵ带 ����ϴ� ����� ����ġ �ٽ��� �װ��� �����ϴ���,
<code>dlopen()</code>���� ���� �ڵ带 �о���̴� ���̴�.</li>
</ul>
<!--#include virtual="footer.html" -->
</body>
</html>