본문 바로가기

C++/Libraries, Plugins, 3rd-Party

(Redis) hiredis를 사용한 C++ 프로젝트와 Redis 서버 연동

더보기

이 프로젝트의 개발 환경

  • 개발 언어 및 주요 환경
    • Visual Studio 2017
    • C++ 17
  • 기타 환경
    • Redis 3.0.504
    • CMake 3.29.0
    • Windows OS 10

hiredis란?

hiredis는 C 언어용 라이브러리로 Redis 서버와의 연결과 명령문 실행을 위한 주요 함수를 제공합니다.

hiredis를 C++ 프로젝트에 포함시키려면 make를 통해 libdll 파일을 구성하여 외부 종속성으로 연결합니다.

hiredis 설치 및 빌드

hiredis를 사용해 C++ 환경에서 Redis 서버를 연동하려면 우선 다음 환경 구성이 필요합니다.

기본 환경 구성을 마쳤다면 github.com: redis/hiredis에서 hiredis를 설치합니다.

다운로드한 zip 파일을 압축 해제하고 CMake에서 VS 솔루션을 생성합니다.

Where is the source code Where to build the binaries Configure
압축 해제한 hiredis 루트 디렉토리입니다. VS 솔루션이 새로 생성되는 경로입니다. VS 솔루션 생성을 위한 설정을 마칩니다.

설정을 마치고 configuring done이 표시되면 Generate를 클릭합니다.

지정된 경로에서 VS 솔루션이 생성되면 호환되는 IDE에서 프로젝트를 엽니다.

빌드에 앞서 IDE 상단 툴바 | 프로젝트 | 속성 | 구성 속성 | 일반 탭에서 다음과 같이 변경합니다.

  • 문자 집합을 기본 멀티 바이트 문자 집합에서 유니코드 문자 집합 사용으로 변경
  • 정적 lib 출력만을 원한다면 고급 속성 | 대상 파일 확장명을 .dll에서 .lib으로 변경

프로젝트 속성을 변경 후 빌드합니다.

빌드가 완료되면 프로젝트 루트 디렉토리 기준 Release 디렉토리가 생성되며 hiredis.lib 파일이 추출됩니다.

프로젝트 구성 및 실행

Redis 클라이언트를 구현하려는 프로젝트에서 IDE 상단 툴바 | 프로젝트 | 속성 | 구성 속성 탭에서 다음과 같이 변경합니다.

C/C++ | 일반 | 추가 포함 디렉터리 링커 | 일반 링커 | 입력
헤더 파일(hiredis.h)이 포함된 make 이전의 원본 프로젝트 경로입니다. make 후 빌드로 추출된 hiredis.lib 파일이 포함된 디렉토리 경로입니다. hiredis.lib을 입력합니다.

소스 코드를 다음과 같이 작성하고 로컬 Redis 서버와의 연결을 확인합니다.

#include <iostream>
#include <hiredis.h>

#ifdef _MSC_VER
#include <winsock2.h>
#endif

int main(int argc, char** argv)
{
	std::cout << "Let's start hiredis world" << std::endl;

	redisContext* context;
	redisReply* reply;

	const char* host = "127.0.0.1";
	const int port = 6379;

	context = redisConnect(host, port);

	if (NULL == context || context->err)
	{
		std::cout << "Connection to redis server refused!!" << std::endl;
		if (context)
		{
			redisFree(context);
		}
	}

	reply = (redisReply*)redisCommand(context, "PING");
	std::cout << "PING: " << reply->str << std::endl;
	freeReplyObject(reply);
}
코드 비고
Line 18 context = redisConnect(host, port) Redis 기본 포트 6379를 사용해 로컬 호스트에 연결합니다.
Line 29 redisCommand(context, "PING") 연결된 Redis 서버에 PING 요청을 보냅니다.
Line 30 reply->str PING 요청에 따른 PONG 응답을 읽어와 콘솔에 출력합니다.