게시물 좋아요, 댓글 좋아요 기능 개발할 때
조회수 9876회
node.js에 express 로 개발 중입니다.
게시판, 댓글 기능을 완성하였는데 좋아요 기능을 추가하려고 합니다.
회원, 비회원 모두 댓글 그리고 좋아요 기능을 사용할 수 있습니다.
회원, 비회원 각각 좋아요 버튼을 눌렀을 때 어떻게 처리해야 할지 모르겠습니다.
- 로직
회원은 1. ID 기준으로 체크 후 2. 누른 적 없다면 누를 수 있게 하고 3. 누른 적이 있다면 못 누르게 하고.
- 데이터베이스
그런데 db 관리도 좀 어렵습니다. 원래는 댓글 테이블에 like 컬럽을 0으로 생성하고 좋아요가 눌리면 이 숫자를 증가시키려고 했습니다. 그런데 이렇게 하면 각각 누른 사람들의 ID를 확인할 수 없잖아요? 그럼 좋아요 누른 이력 테이블도 또 관리해야 하나요?
대표 서비스 (페이스북 등) 나 일반적으로 어떻게 구현하는지 도움이 필요합니다.
많은 도움 바랍니다!
1 답변
-
테이블 하나면 간단히 해결될것 같습니다
이게 최선의 방법은 아니지만 구현하기 간단하고 좋습니다
유저는 눌렀을때 아이디를 기록하고 비유저는 아이피를 기록해서 체크하는 방식이죠
일단 예를들어 history라는 테이블을 만든다고 가정할게요. 컬럼은
id // pk post_id // 글 아이디 fk 걸거나 그냥 숫자넣거나 user // 유저면 아이디 아니면 null ip // 아이피
가 있습니다.
좋아요 버튼을 눌렀을때 현재 글 id를 같이 보냅니다 (POST같은걸로)
그리고 서버에서 로그인한 상태인지 아닌지 체크한다음
로그인을 했다면
-> post_id에 글 pk를 user에 유저 pk나 아이디
로그인을 안했다면
-> post_id에 글 pk를 user에 null
을 넣어주고 좋아요에 +1 를 해주는겁니다.
이제 여기서 유저 아이디 기록이 남으니까 누가했는지 확인이 가능합니다.
일단 여기까지 만든다음에 이제 이미 좋아요를 했을경우에 못누르게 해야하니까
처음 게시글을 가져올때
-- 유저라면 SELECT 0 FROM history WHERE post_id = 현재 글 fk AND user = 현재유저 fk나 아이디 -- 유저가 아니라면 SELECT 0 FROM history WHERE post_id = 현재 글 fk AND ip = 현재 아이피
이런식으로 가져와서
if(history) { // 했던 기록이 있다면 $("#like").hide(); // 숨기거나 disabled 처리를 한다 }
이렇게 하시면됩니다
참 쉽죠?
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력