[c++] libuv와 웹 서버 구축

libuv는 이벤트 기반의 비동기 I/O 라이브러리로, Node.js의 핵심 엔진입니다. 이 라이브러리는 C 코드로 작성되었으며, 다양한 운영 체제에서 비동기 작업을 지원합니다.

libuv를 사용하여 C++로 간단한 웹 서버를 만들어 보겠습니다.

libuv 설치

libuv는 다양한 방법으로 설치할 수 있지만, 가장 간단한 방법은 패키지 관리자를 사용하여 설치하는 것입니다. 예를 들어, Ubuntu에서는 다음과 같이 설치할 수 있습니다:

sudo apt-get install libuv1-dev

웹 서버 만들기

다음은 libuv를 사용하여 간단한 웹 서버를 만드는 C++ 코드입니다.

#include <uv.h>

int main() {
    uv_loop_t* loop = uv_default_loop();

    uv_tcp_t server;
    uv_tcp_init(loop, &server);

    struct sockaddr_in addr;
    uv_ip4_addr("0.0.0.0", 3000, &addr);

    uv_tcp_bind(&server, (const struct sockaddr*)&addr, 0);
    uv_listen((uv_stream_t*)&server, 128, [](uv_stream_t* server, int status) {
        if (status < 0) {
            fprintf(stderr, "Listen error: %s\n", uv_strerror(status));
            return;
        }

        uv_tcp_t* client = (uv_tcp_t*)malloc(sizeof(uv_tcp_t));
        uv_tcp_init(uv_default_loop(), client);
        if (uv_accept(server, (uv_stream_t*)client) == 0) {
            uv_write_t* write_req = (uv_write_t*)malloc(sizeof(uv_write_t));
            uv_buf_t buf = uv_buf_init("Hello, world!\n", 13);
            uv_write(write_req, (uv_stream_t*)client, &buf, 1, [](uv_write_t* req, int status) {
                free(req);
            });
        } else {
            uv_close((uv_handle_t*)client, [](uv_handle_t* handle) {
                free(handle);
            });
        }
    });

    return uv_run(loop, UV_RUN_DEFAULT);
}

이 코드는 3000번 포트에서 들어오는 연결을 수락하고 “Hello, world!”를 응답하는 간단한 웹 서버를 만듭니다.

실행

위의 코드를 server.cpp 파일에 저장하고 다음과 같이 컴파일할 수 있습니다:

g++ -luv server.cpp -o server

그런 다음 실행 파일을 실행하면 웹 서버가 시작됩니다. 웹 브라우저를 열고 http://localhost:3000에 접속하여 “Hello, world!”를 확인할 수 있습니다.

libuv를 사용하여 C++로 웹 서버를 만드는 것은 간단하고 직관적입니다. 이 라이브러리를 사용하면 비동기 및 이벤트 기반 애플리케이션을 쉽게 작성할 수 있습니다.

이상으로 libuv를 사용하여 간단한 웹 서버를 만드는 방법에 대해 알아보았습니다. 더 많은 정보는 libuv 공식 문서에서 확인할 수 있습니다.