Devlog

[C언어로 웹서버 만들기 (1-1)] - Hello Apache! [구현편] 본문

Backend/C언어 + 아파치 모듈

[C언어로 웹서버 만들기 (1-1)] - Hello Apache! [구현편]

recoma 2022. 4. 25. 03:42

이번 장의 예제 코드

 

GitHub - Vector-7/apache2-module-programming-practice: C로 웹서버를 구현할 생각을 하는 걸 보니 니가 제정신

C로 웹서버를 구현할 생각을 하는 걸 보니 니가 제정신이 아니구나? Contribute to Vector-7/apache2-module-programming-practice development by creating an account on GitHub.

github.com

 

이번 장에서는 아파치 모듈을 이용한 간단한 웹서버 구현 방법에 대해 알아보려고 합니다. OS는 Ubuntu를 기준으로 합니다.

1. 개발도구 설치

웹서버를 개발하기 위해 Apache와 Apache개발 도구를 설치합니다.

아파치, 아파치 개발도구 설치

sudo apt update
sudo apt install apache2
sudo apt install apache2-dev

아파치 정상작동 확인

sudo apachectl start

위의 명령어를 이용해 Apache를 켜서 크롬 브라우저에 들어 간 다음, url 창에 localhost를 입력해서 접속할 때

대략 위와 같은 화면이 등장하면 성공적으로 설치를 완료했다고 보면 됩니다.

2. 프로젝트 생성 및 개발

apxs명령어를 이용해 모듈 프로젝트를 생성합니다. 여기서 example은 프로젝트 이름이니, 원하시는 네이밍을 사용하셔도 괜찮습니다. 여기서는 example이라는 이름을 사용하겠습니다.

$ apxs2 -g -n example
Creating [DIR]  example
Creating [FILE] example/Makefile
Creating [FILE] example/modules.mk
Creating [FILE] example/mod_example.c
Creating [FILE] example/.deps
$

여기서 example디렉터리에 들어간 다음 mod_example.c에 example_handler 함수를 아래와 같이 수정합니다. mod_example.c이 바로 아파치 모듈을 구현하기 위한 최상위 소스코드입니다.

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("Hello Apache!\n", r);
    return OK;
}

다시 돌아가서 완성된 모듈을 컴파일/설치를 합니다.

sudo make
sudo make install

이렇게 해서 설치된 모듈은 .so 형태의 동적 라이브러리 형태로 생성이 되며 컴파일 한 자리에서 생성되는 것이 아닌 /usr/lib/apache2/modules에 저장이 됩니다 (우분투 기준이므로 OS에 따라 루트가 달라질 수 있습니다. 만약에 이 루트에 없다면 "whereis apache2"명령어를 이용해 모듈이 저장되어 있는 위치를 파악합시다). 이때 모듈 명은 mod_[프로젝트명].so 형태로 저장되어 있습니다. 물론 ls명령어를 쳐보면 chmod가 기존 모듈과는 다르네 설정되어 있기 때문에 확 눈에 띄니 금방 찾을 수 있을 겁니다.

눈에 띄게 초랭이로 빛나는 파일이 방금 컴파일한 모듈

3. 모듈 세팅

이제 모듈이 설치되어있는 것까지 확인했으니, apache 설정 파일에 만든 모듈을 사용하겠다는 내용을 적어야 합니다. /etc/apache2로 이동한 다음, apache2.conf의 내용을 수정합니다.

sudo /etc/apache2
sudo vim apache2.conf

그리고 맨 밑에 아래와 같은 내용을 추가합니다.

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

추가를 하고 "sudo apachectl restart"를 실행한 다음 크롬 브라우저로 들어가서 url 창에 /localhost/example을 입력해서...

위의 문구가 뜨면, 웹서버가 성공적으로 구현되었다는 것을 확인할 수가 있습니다.

다음 장에서는 모듈 개발환경이 어떻게 되어 있는지, 그리고 모듈 소스 코드에 대한 분석을 주제로 포스팅할 예정입니다.

반응형

'Backend > C언어 + 아파치 모듈' 카테고리의 다른 글

[C언어로 웹서버 만들기 (0)] - 소개  (0) 2022.04.24