IOCP 게임서버

IOCP 실습 9단계 진행 전 C++에서 Redis 사용법 알아보기

묭묭.cpp 2023. 9. 4. 22:47

IOCP 실습 9단계는 Redis를 사용하여 로그인을 처리하는 것이다.

해당 실습을 진행하기 전에 앞서 간단하게 Redis가 무엇인지 알아보고 C++에서 Redis를 어떻게 사용하는지 직접 사용해보았다.

 

#출처 https://github.com/jacking75/examples_cpp_redis/tree/master

 

GitHub - jacking75/examples_cpp_redis: C++ Redis 사용 방법 정리

C++ Redis 사용 방법 정리. Contribute to jacking75/examples_cpp_redis development by creating an account on GitHub.

github.com

 

1. Redis 란?

먼저 Redis가 무엇인지 가볍게 알아보고 넘어가겠다.

  1. Redis는 다른 RDBMS와는 달리 인 메모리 DB이다.
  2. 즉, 데이터를 하드에 저장하는 것이 아닌 메모리에 저장한다.
  3. 몇 십 몇 백배는 빠르다.
  4. 용량이 작기 때문에 메인 DB(RDBMS)를 두고 Redis에 사용할 데이터를 미리 저장해둔 뒤 요청이 들어오면 그 데이터를 꺼내준다.
  5. Key - Value (키 - 값) 쌍으로 이루어진다.
  6. Redis는 다음과 같은 상황에서 주로 쓰인다.
    • 자주 사용하는 데이터 캐싱
    • 영상 스트리밍
    • 로그인 기록 저장

위와 같은 장점 때문에 사용된다고 한다.

간단하게 사용하기엔 공부할 양이 많지 않다고 하는데

직접 사용해본 결과 명령어나 C++과의 연동하는 것이 별로 어렵지 않고 내용이 많지는 않았다.

Redis를 잘 활용하는 것이 관건인 것 같다.

 

2. Redis 명령어 모음

자주 사용할 것 같은 명령어를 정리해보겠다.

명령어 설명
set (key) (value) key-value 형식으로 저장
mset (key) (value) (key) (value) 여러 개의 값을 한번에 저장
hset (field) (value) 해시 키 밑에 지정한 필드에 값을 저장
get (key) key 값으로 value를 찾아 반환
mget (key) (key) 여러개의 value를 찾고 싶을 때 사용
hget (key) (field) 입력한 해시 키 밑에 지정한 필드 값을 반환
del (key) 입력한 해시 키 삭제
hdel (key) (field) 입력한 해시 키 밑에 필드를 삭제

삽입/조회/삭제의 명령어 정도만 알아둬도 유용할 것 같다.

나중에 기회가 된다면 더 깊이 알아보도록 하겠다.

 

3. Redis 설치와 실행 확인

  1. https://github.com/microsoftarchive/redis/releases 해당 경로에서 Redis 설치 파일을 받는다. (.msi)
  2. msi 파일을 클릭하여 설치한다.
  3. redis-server.exe 파일을 실행해서 Redis 서버를 실행시킨다.
  4. redis-cli.exe 파일을 실행시켜 Redis 터미널을 연다.
  5. ping 명령어를 입력하여 PONG 텍스트가 돌아오면 성공적으로 설치가 마무리 된다.

4. Redis Password 설정

  1. redis.windows-service.conf 파일을 연다.
  2. requirepass를 검색해서
  3. #requirepass foobared 의 주석을 제거하고
  4. requirepass (원하는 비밀번호) 를 입력하고 Redis를 재시작하면 설정이 완료된다.

3. C++ 과의 연동 hiredis

이제부터는 본격적으로 C++과 연동을 해보겠다.

hiredis라는 윈도우 전용 redis 라이브러리를 설치하고 진행하겠다.

1. hiredis 설치 과정

  1. https://github.com/redis/hiredis 해당 리포지토리를 클론한다.
  2. CMake GUI를 실행하고 해당 프로젝트 경로를 설정해준다. hiredis 폴더
  3. 자신의 VS 환경에 맞게 설정해준 뒤
  4. Configure -> Generate -> Open Project 순서로 실행시킨다.
  5. Visual Studio 솔루션이 생성되었다.
  6. 솔루션을 열고 ALL_BUILD 프로젝트를 Debug 모드로 한번 Release 모드로 한번 빌드한다.
  7. 해당 빌드의 결과로 나온 폴더를 내 프로젝트 폴더로 옮긴다. (필수는 아님)
  8. hiredis 폴더도 내 프로젝트 폴더로 옮긴다. (필수는 아님)
  9. VS 추가 라이브러리 설정을 진행한다.
  10. VC++ 디렉터리 -> 포함 디렉터리 : 소스 디렉터리(hiredis 폴더)의 경로를 지정
  11. VC++ 디렉터리 -> 라이브러리 디렉터리 : lib 파일이 있는 경로를 지정

위 과정으로 C++에서 hiredis 라이브러리를 사용하여 redis를 사용할 준비가 완료됐다.

 

2. hiredis 라이브러리 사용해서 redis 연결하고 명령 보내기

1. 연결 요청하기

redisConnectWithTimeout(_host.c_str(), _port, timeoutVal);

다음과 같이 호출하면 된다.

return 값으로는 redisContext가 반환되고 이것을 저장해서 명령을 전송할 때 인자로 넣어주면 된다.

 

2. Redis 명령을 좀 더 편하게 보낼 수 있도록 도와주는 함수

redisReply* redisCmd(const char* format, ...)
{
	va_list ap;
	va_start(ap, format);
	redisReply* reply = static_cast<redisReply*>(redisvCommand(_redCtx, format, ap));
	va_end(ap);
	return reply;
}

해당 함수를 정의함으로 좀 더 직관적이고 쉽게 명령을 보낼 수 있도록 한다.

 

3. redisCmd 함수 사용 예시

set 명령

redisCmd("SET %s %s", key.c_str(), value.c_str());

get 명령

redisCmd("GET %s", key.c_str());

위와 같은 방법으로 다른 명령들도 똑같은 방식으로 호출하면 된다.

 

지금까지 Redis를 간단하게 알아보고, Redis를 C++에서 사용하는 방법을 알아보았다.

Redis라는 이름을 듣고 어려울 것이라 겁을 먹었었는데 일단 사용하는 단계까지는 어렵지 않았다.

이것을 잘 사용하는 것이 핵심인 것 같다.

다음 실습부터는 Redis를 사용하여 로그인 처리를 하는 실습을 진행 하는데 이 예제를 바탕으로 Redis에 대한 사용법의 감을 잡을 수 있었으면 좋겠다.

반응형