오늘 한 일
오늘은 Redis조회수 로직을 짰는데, 구조상 문제가 생겨 팀원들과 회의를 했다.
먼저 Redis를 이용해서 조회수 로직을 짠 이유는 조회수가 증가할 때마다 DB에 직접 조회수 증가(변경) 요청을 보내주는게 낭비라고 생각했다. 그리고 항상 조회수가 올라가는걸 방지하기위해 Redis에서 키밸류값으로 해당 게시글과 유저의 id를 가지고,
일정시간이 지나면 사라지도록 해두고 체크하여 같은 유저가 무한히 새로고침으로 조회수를 올릴 수 있는 문제를 해결하였다.(한 유저당 포스트마다 1시간에 한번씩만 조회수가 증가하도록 설정)
그래서 Redis라는 캐시메모리를 이용해서 성능을 개선해 조회수를 관리하기로 생각했다. 근데 문제는 Redis는 말 그대로 캐시 메모리기 때문에 다운되거나 꺼지는 순간 데이터가 휘발된다는 문제가 발생했다.
그래서 고민하다가 우린 스케줄려(scheduler)를 이용해서 6시간에 한번씩 자동으로 서버 DB로 조회수를 한번에 업데이트 해주기로 결정했다. 거기서 Redis가 다운되면 최대 6시간어치 조회수 데이터를 잃을 수 있다는 문제를 제기했는데, 조회수는 아주 중요한 데이터는 아니기 때문에 그런 서버문제가 발생했을 시 소량의 데이터 손실 정도는 성능개선을 위해 포기할 수 있다고 생각했다.
그리고 아마 Redis가 죽었다가 다시 켜지면 DB조회수 데이터로 Redis데이터를 초기화 해줘야하는데, 시간상 그걸 자동화로 만들기는 무리가 있고, 서버문제가 생겼을 시 그건 일단 수동으로 해결해야하는 부분으로 남겨둬야겠다...
그렇게 조회수 데이터를 갱신하는데 성공했다!
내일 할 일
내일은 다른 공부를 할 것 같다 주말이기 때문에 팀원들도 모두 모이지 않아 개발은 주말 중 일요일 하루만 하고, 내일은 알고리즘 문제와, 팀원들과 진행하는 테크톡 준비를 해야할것 같다!