Skip to content

Commit cd89462

Browse files
committed
redis 라이브러리 사용하기 관련 글 예제 코드 추가
1 parent 44a484f commit cd89462

220 files changed

Lines changed: 43618 additions & 1 deletion

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,12 +190,12 @@
190190

191191
### Redis
192192
- [글 모음](https://gist.github.com/jacking75/5d9927851b22a539774301017e0cefd7)
193+
- C++, C#, Golang Redis 라이브러리 사용 방법 정리: `how_to_use_redis_lib` 디렉토리
193194
- [레디스 게이트](http://www.redisgate.com/redis/command/latency.php ) 기능 설명
194195
- [(영상) Redis 야무지게 사용하기](https://forward.nhn.com/2021/sessions/16 )
195196
- [Redis 글 모음](https://gist.github.com/jacking75/5d9927851b22a539774301017e0cefd7 )
196197
- [(유튜브) C++를 이용한 Redis 프로그래밍](https://www.youtube.com/watch?v=pGo1TnPH43Y&t=16s )
197198
- [(유튜브) Redis C# 프로그래밍](https://www.youtube.com/watch?v=09ufiNEWynk )
198-
- [redis 라이브러리 사용 방법 정리](https://github.com/jacking75/how_to_use_redis_lib )
199199
- [Redis를 활용한 다양한 시스템 설계](https://devs0n.tistory.com/92 )
200200
- [Redis의 기본 데이터 유형 및 명령](https://docs.google.com/document/d/10mHFq-kTpGBk1-id5Z-zoseiLnTKr_T8N3byBZP5mEg/edit?usp=sharing )
201201
- [Redis로 방문자수 구현하기](https://docs.google.com/document/d/e/2PACX-1vQFFSlvGJuDIjeEJM7UZdKRAC0Ps-CiBGFJQfZs_dLwko5cuIYMcbYWUZYeyb-K7M3pdMs9WAv7WD8B/pub )

how_to_use_redis_lib/LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2023 Choi HeungBae
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

how_to_use_redis_lib/README.md

Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
# redis 라이브러리 사용 방법 정리
2+
3+
# C++
4+
`cpp` 디렉토리에 정리 되어 있다.
5+
6+
7+
<br>
8+
9+
# C#
10+
`csharp` 디렉토리에 정리 되어 있다.
11+
12+
- `CloudStructures` 라이브러리 사용 방법
13+
14+
15+
<br>
16+
17+
# Golang
18+
`golang` 디렉토리에 정리 되어 있다.
19+
20+
- `go-redis` 라이브러리 사용 방법
21+
22+
23+
<br>
24+
<br>
25+
26+
27+
# 학습을 위해 실습하기
28+
레디스 프로그래밍을 학습하기 위해 제시한 과제에 맞게 구현해야 한다.
29+
30+
## 각 언어별 사용 라이브러리
31+
- C#: CloudStructures
32+
- Golang: go-redis
33+
- C++: 레디스 공식 사이트
34+
35+
36+
## 구현 조건
37+
- 사례 별 요청과 응답을 편리하게 조작하기 위해 API 서버 기반에서 구현한다.
38+
- DB(MySQL 같은)는 사용하지 않고, 오직 Redis만 사용하거나 더미 데이터를 사용한다.
39+
- Redis는 1대만 사용한다고 가정한다.
40+
- Redis의 영구 저장 기능은 사용하지 않는다.
41+
- Redis는 서비스 중 절대 죽지 않는다고 가정한다.
42+
- 웹소켓은 사용하지 않는다. 오직 HTTP만 사용한다.
43+
- Redis 버전은 6.0 이상을 사용한다. 단 기본 기능만을 사용할 때는 Windows에 설치하기 위해 3.0 버전을 사용해도 된다.
44+
45+
46+
## 과제
47+
48+
### 로그인
49+
저장할 것: 인증키, 앱버전, 데이터버전
50+
```
51+
public class PkLoginReq
52+
{
53+
public string ID { get; set; }
54+
public string Password { get; set; }
55+
56+
public int AppVersion { get; set; }
57+
public int DataVersion { get; set; }
58+
}
59+
60+
public class PkLoginRes
61+
{
62+
public int Result { get; set; } = 0; // 0 성공, 0 이외는 모두 실패
63+
public string AuthKey { get; set; }
64+
}
65+
```
66+
67+
### 로그인 때 저장한 유저 정보 가져오기
68+
사전에 유저의 게임 데이터를 Redis에 넣어 놓는다.
69+
로그인 때 넣으면 좋을 듯
70+
예) api url: RequestLoadUserGameData
71+
```
72+
public class PkLoadUserGameDatsReq
73+
{
74+
public string ID { get; set; }
75+
}
76+
77+
public class PkLoadUserGameDatsReq
78+
{
79+
public int Result { get; set; } = 0; // 0 성공, 0 이외는 모두 실패
80+
public int Level { get; set; }
81+
public int Exp { get; set; }
82+
public int Money { get; set; }
83+
}
84+
```
85+
86+
87+
### 동일 유저 요청는 순차적으로 처리되도록 하기(Lock 걸기)
88+
- 유저가 동시에 요청하더라도 한번에 하나만 처리해야 한다.
89+
- 게임 서버가 요청을 받아서 처리하는 중에 또 요청이 오면 이 요청은 에러 처리가 되어야 한다.
90+
- 테스트를 위해 서버는 이 요청을 받으면 내부에서 Sleep을 10초 건다.
91+
- 요청을 처리 중 서버가 크래시 되더라도 게임서버가 재 시작되면 유저는 요청을 할 수 있어야 한다.
92+
93+
94+
### 방문자 수 기록하기
95+
- 로그인을 기준으로 한다. 1일 1회의 로그인만 방문자 수로 집계한다.
96+
97+
98+
### 요청을 2분 단위로 3회만 가능하도록 제한걸기
99+
- 게임 서버에 2분 동안 3회만 요청 가능하다
100+
- 2분이 지나면 요청 가능 횟수는 다시 3회가 된다.
101+
- 요청과 응답 데이터는 자유롭게 만든다
102+
103+
104+
105+
### 하루에 한 번만 참여 가능한 이벤트
106+
- 경험치 업 이벤트는 1일 1회만 참여가능
107+
- 이력 측면에서 특정 유저가 특정 날짜에 이 이벤트를 참여 했는지 여부를 알 수 있어야 한다.
108+
109+
110+
111+
### 인증 문자를 받고나서 다음 인증 문자를 받으려면 1분의 대기 시간을 주기
112+
113+
114+
### 링크드 리스트 구현하기
115+
- Redis만을 사용하여 유저ID를 데이터로 하는 링크드 리스트 구현하기
116+
- 유저 추가, 삭제
117+
- 순회: 유저 앞에 있는 유저, A 유저 뒤에 있는 유저
118+
119+
120+
121+
### 좋아요
122+
- 유저를 상대로 좋아요 하기/취소하기
123+
- 누가 좋아요를 했는지 확인하기
124+
- 좋아요를 한 개수 조회하기
125+
126+
127+
128+
### 최근에 본 인앱 상품 목록 보여주기(최근 순서대로 3개)
129+
130+
131+
132+
### 랭킹 구현
133+
- 1~10등
134+
- 자신의 등수
135+
- 자신의 등수를 기준으로 상하 각각 2명씩
136+
- 선택: 동접자 처리
137+
138+
139+
140+
### 배틀
141+
- 클라이언트는 배틀 시작을 요청하고, 응답을 서버로부터 받아야 한다
142+
- NPC 정보를 보낸다. NPC 코드, NPC 이름, NPC 보상 경험치
143+
- 배틀 클리어 후 받는 보상 정보를 보낸다.
144+
- 클라이언트는 배틀 중 처치한 NPC 정보를 알려준다.
145+
- 클라이언트는 배틀가 완료되면 서버에 알린다.
146+
- 배틀 클리어 조건은 배틀 시작에서 받은 모든 NPC를 다 처치해야 한다.
147+
- 서버는 배틀가 완료되면 이 때 처치한 모든 NPC로 부터 얻을 수 있는 경험치와 보상을 계산해서 알려준다.
148+
- 배틀 정보는 삭제 되어야 한다.
149+
150+
151+
152+
### 배틀 - 보스 레이드
153+
- 특정 보스를 여러 유저가 동시에 같이 공격한다
154+
- 유저는 최대 5명까지만 참여 가능하다
155+
- 보스를 처리하면 보상을 받는다
156+
- 보상은 공격에 가장 크게 기여를 한 유저 순서로 차등 지급한다
157+
- 보상과 각 유저 별 공격 히스토리(어떤 공격, 데미지 수치)도 보여줘야 한다
158+
159+
160+
161+
### 채팅
162+
- 웹서버만으로 채팅을 구현한다. 웹소켓은 사용하지 않는다
163+
- 채팅은 로비 단위로 구분된다. 로비 번호는 1~ 100개.
164+
- 각 로비당 최대 인원은 100명까지
165+
- 유저는 로그인 시에 자동으로 로비에 입장해야 한다. 즉 서버에서 자동으로 넣는다.
166+
- 유저는 로그인 이후 로비 번호를 선택해서 로비 입장을 요청할 수도 있다.
167+
- 채팅 창을 통해서 이전 채팅 히스토리를 볼 수 있어야 한다. 단 현재 채팅에서 50개까지만 가능하다.
168+
169+
170+
### Job Queue
171+
- 다른 프로세스로 실행 중인 worker에 작업 요청하기
172+
173+
174+
175+
### 선착순 쿠폰 발행하기
176+
- 선착순 3명에게만 쿠폰을 발행한다
177+
178+

0 commit comments

Comments
 (0)