아파치 모듈 만들기


아파치 모듈 만들기 Apache 웹 서버에서 사용되는 모듈 개발 방법에 대해서 설명드립니다. 아파치 모듈 컴파일, 설치, 설정 하는 등 아파치 모듈 프로그래밍 방법에 대해서 예제 소스코드와 함께 알려드리도록 하겠습니다.

아파치 모듈 만들기

아파치 모듈 개발 환경

Apache 모듈을 개발하기 위해서는 Apache 개발관련 패키지를 설치해 주셔야 합니다. 우분투에서는 아래의 명령어로 apxs2 등의 개발 패키지를 한꺼번에 설치 하실 수 있습니다.

$ sudo apt install apache2-dev

아파치 모듈 프로그래밍 위해서는 C 프로그래밍 언어에 대한 이해가 필요합니다. 이 글에서는 자세한 API 에 대한 설명보다 어떻게 모듈을 생성하고, 컴파일 하고 설정하는지에 대해서 중심적으로 설명드리도록 하겠습니다.

아파치 모듈 만들기

먼저 example 이라는 모듈을 생성해 보도록 하겠습니다. 다음 명령어로 모듈 개발에 필요한 주요 파일들을 생성해 주시기 바랍니다.

$ apxs2 -g -n example
아파치 모듈 만들기

위의 명령어를 실행하면, 아래와 같이 Apache 모듈 개발에 필요한 주요 파일들이 생성된 것을 확인 할 수 있습니다.

Makefile 파일과 modules.mk 파일은 어떻게 모듈을 컴파일 하고 링크할 것인지 설정하는 파일이고, mod_example.c 파일은 실제 모듈의 기능이 구현되어 있는 소스코드 입니다.

자동으로 생성된 mod_example.c 모듈의 소스코드 내용은 아래와 같습니다.

#include "httpd.h"
#include "http_config.h"
#include "http_protocol.h"
#include "ap_config.h"

/* The sample content handler */
static int example_handler(request_rec *r)
{
    if (strcmp(r->handler, "example")) {
        return DECLINED;
    }
    r->content_type = "text/html";      

    if (!r->header_only)
        ap_rputs("The sample page from mod_example.c\n", r);
    return OK;
}

static void example_register_hooks(apr_pool_t *p)
{
    ap_hook_handler(example_handler, NULL, NULL, APR_HOOK_MIDDLE);
}

/* Dispatch list for API hooks */
module AP_MODULE_DECLARE_DATA example_module = {
    STANDARD20_MODULE_STUFF, 
    NULL,                  /* create per-dir    config structures */
    NULL,                  /* merge  per-dir    config structures */
    NULL,                  /* create per-server config structures */
    NULL,                  /* merge  per-server config structures */
    NULL,                  /* table of config file commands       */
    example_register_hooks  /* register hooks                      */
};

위의 소스코드의 주요 내용은 아래와 같습니다.

  • static int example_handler(request_rec *r) : mod_example 의 핸들러 함수. 실제 요청을 처리하는 기능이 구현되었습니다.
    이 글에서 설명 드릴 mod_example 의 기능은 단순히 메세지를 출력하고 종료하는 기능입니다.
  • static void example_register_hooks(apr_pool_t *p) : example_handler 핸들러 함수를 등록하는 register_hooks 함수입니다.
  • module AP_MODULE_DECLARE_DATA example_module : mod_example 모듈을 정의하는 내용입니다. 이 곳에서 정의된 모듈이름은 아파치 설정 파일에서 LoadModule 지시어에서 로드 되는 모듈 이름으로 사용되게 됩니다.

아파치 모듈 개발과 관련한 보다 자세한 내용은 아래의 페이지를 참고해 주시기 바랍니다. 보다 자세한 API 등의 내용을 확인 하실 수 있습니다.

https://httpd.apache.org/docs/2.4/developer/modguide.html

아파치 모듈 컴파일

Apache 모듈을 컴파일 하기 위해서는 모듈 디렉터리에서 다음과 같이 make 명령어를 실행합니다.

~/example$ make
아파치 모듈 만들기

모듈이 성공적으로 컴파일이 되면 아래의 위치에 모듈 파일이 생성되게 됩니다.

.libs/mod_example.so

모듈 파일을 설치하기 위해서는 다음과 같은 명령어를 실행합니다.

$ sudo make install

아파치 모듈 설정

설치된 아파치 모듈을 사용하기 위해서는 모듈을 로드하고 설정해 주셔야 합니다. 웹 서버 설정 파일에서 아래와 같은 내용을 추가합니다.

LoadModule example_module /usr/lib/apache2/modules/mod_example.so
<Location /example>
    SetHandler example
</Location>

그리고 다음 명령어로 Apache 웹 서버를 재실행 합니다.

$ sudo /etc/init.d/apache2 restart

다음 명령어로 /example 페이지를 요청하면 다음과 같이 mod_example 모듈이 실행 된 것을 알 수 있습니다.

$ curl "http://localhost/example"
아파치 모듈 만들기

( 본문 인용시 출처를 밝혀 주시면 감사하겠습니다.)