결론부터 말하면...
웹 프로젝트( SpringBoot ) 기본 구조는 MVC패턴 이였음
BO( @Service ), DAO( @Repository ) 이런 형식임
구현되 있는 좋아요 기능을 분석해보니
결정적으로 LikeDAO.java 만 변경해주면 되는 거였음
애초에 LikeDAO.java에 좋아요 관련 db작업들이 다 들어있었음
Controller랑 Frontend부분은 손댈 필요가 없게 잘 구성되 있었음
기존 MySQL 테이블들을 봐보니, 좋아요 기능에 해당하는 like테이블은 다른 테이블들에 영향을 주지 않고 있었음
LikeDAO.java에 Redis에 맞게 구현
이때 Redis에서 자료구조Set을 이용하는게 point임
( Redis에서 자료구조Set을 지원함, key-set형태로 저장 )
Redis의 명령어 scard, sismember, sadd, srem, del 를 이용해서 구현함
좋아요를 위한 DB는 5번( index 5 ) db를 사용함
LikeDAO.java 를 사용하는 다른 코드들( LikeBO.java 밖에 없었음 )을 LikeDAO 수정한거에 맞게 조금씩 수정해줌
SpringBoot에서 Redis사용해야 하니, 그에 필요한 설정들 추가해주고
좀 디테일 하게, 좋아요 기능은
게시글마다 (내가 좋아요 했는지 여부), (좋아요 개수) 있음
한사람당 좋아요 1개 or 0개
좋아요 버튼 누르면 바로 화면에 반영됨


좋아요 해당 기존 테이블
좋아요 > insert , 좋아요 취소 > delete
이렇게 처리
Redis에서는 key-set형태로 저장함
key를 type:postId 형태로 만들고 ex) invest:18
set에는 해당 게시물을 '좋아요' 한 userId값들을 넣었다
아래는 테스트후 Redis에 생긴 데이터들


아래는 상황에 맞는 명령어들
| MySQL | Redis | |
| 해당 글의 좋아요 개수 | select | scard |
| 해당글에 내가 좋아요 했는지 | select | sismember |
| 해당글에 사용자가 좋아요 | insert | sadd |
| 해당글에 사용자 좋아요 취소 | delete | srem |
| 해당글 삭제할때 좋아요된것들 삭제 | delete | del |
까다로울수 있었던 부분
맨 처음 글이 작성됐을땐 좋아요가 0개 이다
'좋아요' 를 sadd명령어로 처리했는데, 맨처음 글 작성했을땐 해당key값과 value값 아예 없다
맨 처음 글을 작성한뒤, 게시글을 불러올때
(내가 좋아요 했는지 여부)와 (좋아요 개수) 를 Redis에서 가져오게 되는데
(내가 좋아요 했는지 여부)는 명령어sismember , (좋아요 개수)는 명령어scard 처리하고 있었다
다행이 구현전에 먼저 Redis에서 테스트 해보니
, 해당 데이터가 아예 없을때 sismember는 false를 scard는 0을 반환해서
내가 생각했던 대로 깔끔하게 맞아 떨어졌다
( Redis 자체에서 오류를 띄워버리면 먼가 골치아파질수도 있던 상황 )
'Web Development > 웹' 카테고리의 다른 글
| 응답코드 01 (0) | 2024.07.17 |
|---|---|
| 로드밸런싱 할때, 로그인처리 문제 (1) | 2024.06.27 |
| 요청, 요청처리, 응답 (0) | 2024.06.05 |
| 웹 API( SpringBoot + Tomcat ) (0) | 2024.05.19 |
| 통신과 API, 그리고 웹개발 (1) | 2024.04.05 |