티스토리 뷰

데이터베이스로 데이터를 조회하는 데, 성능을 꾀하기 위해 redis와 연동을 한다. 신규 기능에 적용하는 것은 어렵지 않을 것 같다. 하지만 기존 legacy 코드를 db에서 redis로 변경 한다면 새로운 전략이 필요할 것이다.

이런 경우가 얼마나 많겠냐마는 때때로 미션 크리티컬한 시스템 문제가 발생하면 한 번쯤 고려해 볼 만한 시나리오다.

db에서 redis로 변경한다면

  1. redis client 코드로 db 데이터를 조회하고 redis 데이터를 조회하여 결과 셋을 조합
  2. proxy 객체를 생성하여 db/redis 중 데이터 조회
  3. redis 명령 추가

위의 몇 가지 전략 중 성능이 가장 좋은 것은 3 > 2 > 1 이 될 것이고, 수정해야 할 legacy 코드의 양은 2 > 3> 1 순서가 될 것이라 짐작된다.

필자는 prototyping으로 redis 명령을 추가하는 방법을 구현해 보았다.

이름하여 ’MyRedis’라고 이름을 붙였고, 필자의 github 저장소에 commit 해 놓았다..

MyRedis

기존 Redis에서 ‘mysql’ 명령을 추가하였고, 이 명령은 mysql 데이터베이스에서 query 결과를 반환한다.

테스트로 'temp_table' 테이블을 생성하여 다음과 같은 데이터를 넣었다.

id username age
1 Junil Um 25
2 Coupang 3
3 POWERUMC 35

아래는 MyRedis로 ‘mysql’ 명령을 이용하여 데이터베이스에서 결과를 조회하는 redis-cli 결과 화면이다.

127.0.0.1:6379> mysql "select * from temp_table"  
1) "1"  
2) "Junil Um"  
3) "25"  
4) "2"  
5) "Coupang"  
6) "3"  
7) "3"  
8) "POWERUMC"  
9) "35"  

아직 구현 못한 부분이 있으나 더 구현한다면 이런 모습이 되지 않을까 한다.

127.0.0.1:6379> set mysql.host "localhost"  
127.0.0.1:6379> set mysql.user "umc"  
127.0.0.1:6379> set mysql.password "!@#$%"  
127.0.0.1:6379> set mysql.db "db_name"  

127.0.0.1:6379> mysql query dbresult 3600 "select * from temp_table;"     # key expired query  

127.0.0.1:6379> mysql lock  
127.0.0.1:6379> mysql query "update temp_table set age=1 where ...생략..."  
127.0.0.1:6379> mysql unlock  


댓글