공부/인프런 - Rookiss

Part 5-4-6. 부록 : Redis 맛보기 #2

셩잇님 2024. 7. 24. 12:06
반응형

 

 

🌚 부록

 

 지난 시간에는 Redis에 대해서 알아보았다. Redis는 NoSQL의 한 종류이며 Key-Value 형태를 가진다. 지난 시간에는 깃허브 링크를 통해 레디스를 설치하고, 실행보았으며 마지막으로 헬로 월드를 찍는 것으로 마쳤다. Redis에 대해서 조금 더 자세히 알아가보자.

 


 

🍕 Redis

 

 가장 먼저 알아볼 것은 문자열이다. 기본적으로 우리가 사용하려고 하는 명령들은 이미 모두 구현이 되어있다. 따라서 지난 시간에 해봤던 set ~, get ~을 통해 데이터를 확인할 수 있다.

 

간단한 set, get

 

 당연히 문자열을 합치는 기능인 append도 사용 할 수 있다. 

 

append

 

 또한 값의 증가, 감소도 처리할 수 있다. increase, decrease 줄여서 incr, decr으로 사용한다.

 

incr, decr

 

 당연하지만 문자열에는 사용할 수 없는 것을 알 수 있다. (incr user:name) 또한 mset, mget을 이용하면 여러개의 값을 동시에 처리할 수 있다. 이 때 마찬가지로 값이 없는 애를 조회할경우 NULL과 같이 nil이 뜨는 것을 알 수 있다. 그리고 이미 있는 값이라도 덮어쓰기가 가능하다.

 

mset, mget
덮어쓰기

 


 

🍕 Redis 응용

 

 레디스의 기본적인 문법은 위와 같이 알아보았다. 그렇다면 레디스를 어디에서 응용해 사용할 수 있을까? 레디스는 변수, 즉 키-벨류의 수명시간을 직접적으로 정의할 수 있다. 이 때 사용하는것이 ttl과 expire이다. ttl은 현재 변수의 수명기간을 확인하고, expire는 수명기간을 설정한다.

 

-1은 무한대를 의미한다.
key1에 20초를 설정한다. 시간이 다 될경우 -2가 나타난다.

 

 이를 통해 활용할 수 있는 것이 바로 로그인이다. 로그인의 플로우는 다음과 같다. 

 

1. ID/PW를 치는 로그인(어카운트) 웹 서버 ↔ DB

2. 로그인 성공 시 sessionToken 획득

3. 획득한 sessionToken을 바탕으로 GameServer 접속

 

그러나 이렇게 될 경우 게임 서버는 이 사람이 진짜로 인증받은 사람인지, 아닌지 구분할 수 없다. 그렇다면 어떻게 처리해야 할까?

 

방안 1. 웹 서버가 클라에게 응답을 주는 시점에 게임 서버에도 응답을 주어 인증 값을 주는 방법이 있다. 그러나 이 방법은 왔다갔다 통신해야 하기 떄문에 번거롭다.

 

방안 2. DB에다가 세션 토큰 정보를 넣어버리는 방법이 있다. 따라서 키 'Shung'의 토큰의 벨류값을 'asdf'으로 가지게 한다고 가정한다. 하지만 RDBMS는 로그인 성공 시 유효한 타이밍에 데이터를 설정할 수 없기 때문에 이 때 레디스를 사용한다.

 

 따라서 웹서버 ↔ DB / Redis [Shung : sessionToken]을 통해 직접적으로 통신하는게 아닌, 레디스를 통해 통신한다.

 

ttl을 이용한 로그인 유효기간 설정. 이를 활용한다.

 

 

반응형

'공부 > 인프런 - Rookiss' 카테고리의 다른 글

Part 6. 웹 서버  (0) 2024.07.25
Part 5-4-7. 부록 : Redis 맛보기 #3  (0) 2024.07.25
Part 5-4-5. 부록 : Redis 맛보기 #1  (3) 2024.07.23
Part 5-4-4. 부록 : 트랜잭션  (3) 2024.07.22
Part 5-4-3. 부록 : 대기와 락  (1) 2024.07.20