redis 라이브러리 사용 방법 정리
C++
cpp
디렉토리에 정리 되어 있다.
C#
csharp
디렉토리에 정리 되어 있다.
CloudStructures
라이브러리 사용 방법
Golang
golang
디렉토리에 정리 되어 있다.
go-redis
라이브러리 사용 방법
학습을 위해 실습하기
레디스 프로그래밍을 학습하기 위해 제시한 과제에 맞게 구현해야 한다.
각 언어별 사용 라이브러리
- C#: CloudStructures
- Golang: go-redis
- C++: 레디스 공식 사이트
구현 조건
- 사례 별 요청과 응답을 편리하게 조작하기 위해 API 서버 기반에서 구현한다.
- DB(MySQL 같은)는 사용하지 않고, 오직 Redis만 사용하거나 더미 데이터를 사용한다.
- Redis는 1대만 사용한다고 가정한다.
- Redis의 영구 저장 기능은 사용하지 않는다.
- Redis는 서비스 중 절대 죽지 않는다고 가정한다.
- 웹소켓은 사용하지 않는다. 오직 HTTP만 사용한다.
- Redis 버전은 6.0 이상을 사용한다. 단 기본 기능만을 사용할 때는 Windows에 설치하기 위해 3.0 버전을 사용해도 된다.
과제
로그인
저장할 것: 인증키, 앱버전, 데이터버전
public class PkLoginReq
{
public string ID { get; set; }
public string Password { get; set; }
public int AppVersion { get; set; }
public int DataVersion { get; set; }
}
public class PkLoginRes
{
public int Result { get; set; } = 0; // 0 성공, 0 이외는 모두 실패
public string AuthKey { get; set; }
}
로그인 때 저장한 유저 정보 가져오기
사전에 유저의 게임 데이터를 Redis에 넣어 놓는다.
로그인 때 넣으면 좋을 듯
예) api url: RequestLoadUserGameData
public class PkLoadUserGameDatsReq
{
public string ID { get; set; }
}
public class PkLoadUserGameDatsReq
{
public int Result { get; set; } = 0; // 0 성공, 0 이외는 모두 실패
public int Level { get; set; }
public int Exp { get; set; }
public int Money { get; set; }
}
동일 유저 요청는 순차적으로 처리되도록 하기(Lock 걸기)
- 유저가 동시에 요청하더라도 한번에 하나만 처리해야 한다.
- 게임 서버가 요청을 받아서 처리하는 중에 또 요청이 오면 이 요청은 에러 처리가 되어야 한다.
- 테스트를 위해 서버는 이 요청을 받으면 내부에서 Sleep을 10초 건다.
- 요청을 처리 중 서버가 크래시 되더라도 게임서버가 재 시작되면 유저는 요청을 할 수 있어야 한다.
방문자 수 기록하기
- 로그인을 기준으로 한다. 1일 1회의 로그인만 방문자 수로 집계한다.
요청을 2분 단위로 3회만 가능하도록 제한걸기
- 게임 서버에 2분 동안 3회만 요청 가능하다
- 2분이 지나면 요청 가능 횟수는 다시 3회가 된다.
- 요청과 응답 데이터는 자유롭게 만든다
하루에 한 번만 참여 가능한 이벤트
- 경험치 업 이벤트는 1일 1회만 참여가능
- 이력 측면에서 특정 유저가 특정 날짜에 이 이벤트를 참여 했는지 여부를 알 수 있어야 한다.
인증 문자를 받고나서 다음 인증 문자를 받으려면 1분의 대기 시간을 주기
링크드 리스트 구현하기
- Redis만을 사용하여 유저ID를 데이터로 하는 링크드 리스트 구현하기
- 유저 추가, 삭제
- 순회: 유저 앞에 있는 유저, A 유저 뒤에 있는 유저
좋아요
- 유저를 상대로 좋아요 하기/취소하기
- 누가 좋아요를 했는지 확인하기
- 좋아요를 한 개수 조회하기
최근에 본 인앱 상품 목록 보여주기(최근 순서대로 3개)
랭킹 구현
- 1~10등
- 자신의 등수
- 자신의 등수를 기준으로 상하 각각 2명씩
- 선택: 동접자 처리
배틀
- 클라이언트는 배틀 시작을 요청하고, 응답을 서버로부터 받아야 한다
- NPC 정보를 보낸다. NPC 코드, NPC 이름, NPC 보상 경험치
- 배틀 클리어 후 받는 보상 정보를 보낸다.
- 클라이언트는 배틀 중 처치한 NPC 정보를 알려준다.
- 클라이언트는 배틀가 완료되면 서버에 알린다.
- 배틀 클리어 조건은 배틀 시작에서 받은 모든 NPC를 다 처치해야 한다.
- 서버는 배틀가 완료되면 이 때 처치한 모든 NPC로 부터 얻을 수 있는 경험치와 보상을 계산해서 알려준다.
- 배틀 정보는 삭제 되어야 한다.
배틀 - 보스 레이드
- 특정 보스를 여러 유저가 동시에 같이 공격한다
- 유저는 최대 5명까지만 참여 가능하다
- 보스를 처리하면 보상을 받는다
- 보상은 공격에 가장 크게 기여를 한 유저 순서로 차등 지급한다
- 보상과 각 유저 별 공격 히스토리(어떤 공격, 데미지 수치)도 보여줘야 한다
채팅
- 웹서버만으로 채팅을 구현한다. 웹소켓은 사용하지 않는다
- 채팅은 로비 단위로 구분된다. 로비 번호는 1~ 100개.
- 각 로비당 최대 인원은 100명까지
- 유저는 로그인 시에 자동으로 로비에 입장해야 한다. 즉 서버에서 자동으로 넣는다.
- 유저는 로그인 이후 로비 번호를 선택해서 로비 입장을 요청할 수도 있다.
- 채팅 창을 통해서 이전 채팅 히스토리를 볼 수 있어야 한다. 단 현재 채팅에서 50개까지만 가능하다.
Job Queue
- 다른 프로세스로 실행 중인 worker에 작업 요청하기
선착순 쿠폰 발행하기
- 선착순 3명에게만 쿠폰을 발행한다