WIL 12주차

jathazp·2022년 4월 5일
0

실전프로젝트 5주차

실전 프로젝트 5주차가 마무리 되었다.
이번주는 기능 구현을 마무리하고 서비스를 런칭하는 주차였다. 또, API 개선 작업을 계속해서 진행했다.

랭킹 API 개선 작업이 이루어졌다. 원래 redis를 통해 캐싱을 하려고 했는데 redis 를 바로 적용하기에 시간이 부족해 다른 방법으로 성능 개선을 시켰다.
User 컬렉션에 착용한 아이템에 대한 정보를 스냅샷으로 저장해 둠으로써 쿼리 횟수를 줄였다.
부하 테스트 결과 300% 이상 성능이 개선된 것으로 확인되었다.

또, AWS Lambda와 sharp 라이브러리를 이용해 썸네일 이미지 리사이징 작업을 진행했다. 결과적으로 Light house 점수가 50점에서 80점으로 향상했다.

추가 (6.17)

프로젝트 종료 후 한달반이 지난 시점에 여유가 생겨 개인적으로 Redis를 이용해 개선작업을 다시 시도하였다.
기존에 아무리 레퍼런스를 참고해도 명령어가 동작하지 않아 답답했는데 알고보니 Redis 최신버전 설치 후 재시작을 하지 않아 버전이 적용되지 않아 발생한 문제였다... EC2인스턴스에서 redis-server --version 으로 확인한 버전 정보와 redis-cli 접속 후 info 명령어로 확인한 버전이 일치하지 않는것을 보고 깨달았다.
그 후에는 Redis의 SortedSet자료구조를 통해 인증 횟수를 기준으로 사용자가 역정렬이 되게끔 하였다. 또, 사용자마다 착용중인 캐릭터 아이템 정보가 필요한데, 이를 위해 사용자 이름을 키로, 착용중인 아이템 정보들을 stringify를 통해 변환 후 value에 저장했다.
그 후, 유저 착용 아이템 정보가 redis에 있으면 해당 아이템 정보를 가져오도록 했다.
없으면 새로 쿼리를 보내 아이템 정보를 불러오고 redis에 값을 저장했다.
redis에 값을 갱신 시키기 위해 아이템 착용 api에서 유저가 아이템을 착용할 때 redis도 함께 갱신했다.

추가적으로 개선이 필요한 부분은 redis에 만료기한을 1분정도로 설정하여 자주 사용하지 않는 키는 redis에서 제거되도록 하는것이다.

고민해야할 점은 만약 쓰기 작업이 자주 이루어진다면 db값과 redis값을 같이 갱신해야하기 때문에 비효율적이라는 점이다. 우리 프로젝트는 캐릭터 옷입히기 기능이있고, 이는 읽기보다 쓰기 기능이 빈번히 일어나는 기능이다. 결국 랭킹기능은 읽기기능, 옷입히기는 쓰기 기능이 자주 일어나므로 어떤게 효율적인 사용 방법인지 고민이 필요하다. 시간이 있을때 redis에 대해 더 공부해보고 효율적인 방법을 찾아봐야 겠다.

0개의 댓글