Apache HTTP Server Version 2.4
����ġ �������� �����ڰ� ������ �����Ͽ� ������ ������
����� ������ �� �ִ� ���ȭ�� ���α��̴�. ������ �����Ҷ�
httpd
�������Ͽ� �������� ����� ��������
�� �ִ�. �ƴϸ� ����� httpd
�������ϰ�
�и��Ͽ� ����������ü(Dynamic Shared Objects, DSO)�� ��������
�� �ִ�. DSO ����� ������ �������Ҷ� �������ϰų�, Apache
Extension Tool (apxs)��
����Ͽ� ���߿� �������Ͽ� �߰��� �� �ִ�.
�� ������ DSO ��� ������ ��� �̷��� �����Ѵ�.
���õ� ��� | ���õ� ���þ� |
---|---|
����ġ �ٽɿ� �������� �������ؾ���
mod_so.c
��� ����� ����ġ �����
�о���̱����� DSO�� �����Ѵ�.
�� ����� core
�� �����ϰ� DSO��
�� �� ���� ������ ����̴�. ������ �ٸ� ��� ����ġ �����
��ġ �������� ������
configure
�� --enable-module=shared
�ɼ��� ����Ͽ� DSO�� �������� �� �ִ�. �����
mod_foo.so
�� ���� DSO�� ���������� httpd.conf
���Ͽ� mod_so
��
LoadModule
���ɾ
����Ͽ� ���� ���۽� Ȥ�� ����۽� �� ����� �о���� ��
�ִ�.
����ġ ���(Ư�� �����ڰ� ���� ���)�� ����� DSO ������ ����
��������� apxs (APache
eXtenSion)��� ���ο� ���� ���α��� �ִ�. �� ���α���
����ġ �ҽ� Ʈ�� �ۿ��� DSO�� ����� �����
�������Ҷ� ����Ѵ�. ������ ����. ����ġ�� ��ġ�Ҷ�
configure
�� make install
��
����ġ C ��������� ��ġ�ϰ�, DSO ������ �������ϱ�����
�÷��� Ư���� �����Ϸ� �ɼǰ� ��Ŀ �ɼ��� apxs
���α��� ����Ѵ�. ���� apxs
�� ����ϴ� ����ڴ�
����ġ ������ �ҽ� Ʈ������, �� DSO ������ ���� �÷��� Ư����
�����Ϸ� �ɼǿ� ��Ŀ �ɼǿ� �Ű��� �����ʰ� �ڽ��� ����ġ
��� �ҽ��� �������� �� �ִ�.
Apache 2.2�� DSO ��ɿ� ���� ª�� ������ ����̴�:
mod_foo.c
�� DSO
mod_foo.so
��:
$ ./configure --prefix=/path/to/install --enable-foo=shared
$ make install
mod_foo.c
�� DSO
mod_foo.so
��:
$ ./configure --add-module=module_type:/path/to/3rdparty/mod_foo.c --enable-foo=shared
$ make install
$ ./configure --enable-so
$ make install
mod_foo.c
��
DSO mod_foo.so
��:
$ cd /path/to/3rdparty
$ apxs -c mod_foo.c
$ apxs -i -a -n foo mod_foo.la
��� ��� �ϴ� ���� ����� �����ϵǸ�, httpd.conf
��
LoadModule
���þ
����Ͽ� ����ġ�� �� ����� �о���̰� �����.
�������� ���н������� ����������ü (DSO)�� ���� ��ŷ/�ε�(dynamic linking/loading)�̶�� �Ͽ�, Ư���� ������ �����ڵ� ������ ����� �������� �������α��� �ּҰ����� �о���̴� ���� ����� �ִ�.
���� �ΰ��� ������� �о���� �� �ִ�. �ϳ��� �������α���
�����Ҷ� ld.so
��� �ý��� ���α��� �ڵ�����
�о���̴� ����, �ٸ� �ϳ��� �������� ���α���
dlopen()/dlsym()
�ý���ȣ��� ���н� �δ�(loader)��
�ý��� �������̽��� ����Ͽ� ���� �о���̴� ����.
ù��° ��� DSO�� ���� �������̺귯��(shared libraries)
Ȥ�� DSO ���̺귯����� �θ���, ������
libfoo.so
�� libfoo.so.1.2
����
�̸��� ������. �̵��� �ý��� ���丮(���� /usr/lib
)��
�ְ�, �����Ͻ� ��Ŀ ���ɾ -lfoo
�� �־�
�������ϰ� �����Ѵ�. �̷��� ���� ���� ���̺귯���� �������Ͽ�
�����ǿ���, ���α��� �����Ҷ� ��Ŀ �ɼ� -R
��
���� ������ ���, ȯ�溯�� LD_LIBRARY_PATH
��
������ ��� Ȥ�� /usr/lib
���� ���н� �δ���
libfoo.so
�� ã�� �� �ִ�. ���� �������α���
(���� ��ã��(unresolved)) �ɺ�(symbol)�� DSO���� ã�Եȴ�.
DSO�� ���� �������α��� �ɺ��� ã���ʱ� ������ (DSO��
���밡���� �Ϲ����� �ڵ� ���̺귯���̹Ƿ�) ã��� ���⼭
������. ���н� �δ��� �ɺ� ã�⸦ ������ ����ϹǷ� �������α���
���� DSO���� �ɺ��� ã�� �ʿ䰡 ����. (��� ld.so
��
�θ��� �ڵ�� ������ �ƴ� ��� �������α��� ��ũ�Ǵ� �����
�����ڵ��� �Ϻδ�.) ����� ���̺귯�� �ڵ带 �������� �о���̴�
������ ��Ȯ�ϴ�. ���̺귯�� �ڵ尡 ��� ���α��� �ߺ��ؼ�
����Ǵ� ��� libc.so
�� ���� �ý��� ���̺귯����
�ѹ��� ����DZ� ������ ��ũ ������ ����ȴ�.
�ι�° ��� DSO�� ���� ������ü(shared objects)
Ȥ�� DSO �����̶�� �θ���, (��Ģ�� �̸���
foo.so
������) ������ Ȯ���ڴ� �����Ӵ�. ��
���ϵ��� ���� ���α� ��ü ���丮�� ��ġ�ϰ� �������α���
�ڵ����� ������� �ʴ´�. ��� �������α��� �����
dlopen()
�� ����Ͽ� DSO�� �ּҰ�����
���� �о�鿩�� �Ѵ�. �̶� �������α��� DSO���� �ɺ���
ã�� �ʴ´�. ��� �տ��� �� ���н� �δ��� �ڵ����� �������ϰ�
���������� �̹� �о���� DSO ���̺귯��(Ư�� �� �����ϴ�
libc.so
�� ��� �ɺ�)���� DSO�� (���� ��ã��)
�ɺ��� ã�´�. ���� DSO�� ��ġ ó������ �������α���
�������� ��ũ�ȰͰ� ���� ���������� �ɺ��� �˰Եȴ�.
DSO�� API�� �̿��ϱ����ؼ� ���������� �������α���
dlsym()
���� DSO���� Ư�� �ɺ��� ã�Ƽ�, ������
����ϱ����� ����ġ(dispatch) ǥ ���� �����Ѵ�.
�ٸ� ���� �������α��� ����� ��� �Ǻ��� ���� ã�ƾ��Ѵ�.
�̷� ������ ������ ���α��� �Ϻθ� ���α���
�ʿ��Ҷ����� �о������ �ʾƵ� (���� �� ��������
�ʰ�) �ȴٴ� ���̴�. �⺻ ���α��� ����� Ȯ���ϱ�����
�ʿ��� ��� �� �κ��� �������� �о���� �� �ִ�.
�̷� DSO ������ �ڿ������� ��������, �ּ��� ����� ���� �Ѱ����ִ�. ���α��� Ȯ���ϱ����� DSO�� ����Ҷ� DSO�� �������α��� �ɺ��� ã�� ���̴�. ��? DSO�� �������α��� �ɺ��� "������ ã�� ��"�� (���̺귯���� �ڽ��� ����ϴ� ���α��� ���� �ٴ�) ���̺귯�� ���迡 ���ϸ�, ��� �÷������� ���������ʰ� ǥ��ȭ������ �ʾұ� �����̴�. ������ ���������� �����ɺ�(global symbol)�� ���� �ͽ���Ʈ(export)���� �ʱ���� DSO�� ����� �� ����. DSO�� ����Ͽ� ������ ���α��� Ȯ���Ϸ��� ��Ŀ���� ��� �����ɺ��� �ͽ���Ʈ�ϵ��� �����ϴ� ���� �ֵ� �ذ�å�̴�.
�������̺귯���� DSO ����� �����Ģ��� �������̱���� �ü���� �����ϴ� ���� ��� ������ ���̺귯���� ����Ѵ�. �ݴ�� ���� ���α��� ���α��� Ȯ���ϱ����� ������ü�� ������� �ʴ´�.
1998�� ������ ������ ����� Ȯ���ϱ����� DSO ������ ����� ����Ʈ���� ��Ű���� (XS ������ DynaLoader ����� �����) Perl 5, Netscape Server ������ �幰����. ����ġ�� �̹� ����� Ȯ���ϱ����� ��� ������ ����߰� �ܺ� ����� ����ġ �ٽɱ�ɿ� �����ϱ����� ���������� ����ġ����� �̿��� ���ٹ���� ����߱���� 1.3 �������� �� �뿭�� �շ��ߴ�. ���� ����ġ�� ������ ����� �о���̴µ� DSO�� ����ϵ��� �����������.
�տ��� ���� DSO�� ����ϸ� ������ ���� ������ �ִ�:
configure
�ɼǴ�� httpd.conf
�� LoadModule
�� ����Ͽ� �����߿�
���յǹǷ� ���� ��Ű�� ������ �� �����ϴ�. ���� ��� �ѹ���
����ġ ��ġ������ �ٸ� ����(ǥ�� ������ SSL ����, �ּ�ȭ
������ ����߰� ���� [mod_perl, PHP3] ��)�� ������
�� �ִ�.apxs
�� ������ ����ġ �ҽ� Ʈ�� �ۿ���
�۾��ϰ� apxs -i
�� apachectl restart
���ɾ���� ���� ������ ����� �� ������ �������� ����ġ
������ �ݿ��� �� �־ �� ���� ����ġ ����� ������ ��
�ִ�.DSO�� ������ ���� ������ �ִ�:
ld -lfoo
)��
��ũ�� �� ���� �÷����� �ֱ���� (���� ��� ELF���
�÷����� ���������� a.out��� �÷����� ���� �� �����
�������� �ʴ´�) ��� ������ �� DSO�� ����� �� ����.
�ٸ� ���� DSO ���Ϸ� �������ϴ� ����� ����ġ �ٽɰ� ����ġ
�ٽ��� ����ϴ� C ���̺귯��(libc
)�� �ٸ�
����/���� ���̺귯��, ��ġ�����ڵ带 ��� �ִ� ���� ���̺귯��
��ī�̺�(libfoo.a
)�� �ɺ����� ����� �� �ִ�.
�ٸ� �ڵ带 ����Ϸ��� ����ġ �ٽ��� �װ��� �����ϴ���,
dlopen()
���� ���� �ڵ带 �о�鿩�� �Ѵ�.