게시물 좋아요, 댓글 좋아요 기능 개발할 때

조회수 9824회

node.js에 express 로 개발 중입니다.

게시판, 댓글 기능을 완성하였는데 좋아요 기능을 추가하려고 합니다.

회원, 비회원 모두 댓글 그리고 좋아요 기능을 사용할 수 있습니다.

회원, 비회원 각각 좋아요 버튼을 눌렀을 때 어떻게 처리해야 할지 모르겠습니다.

  1. 로직

회원은 1. ID 기준으로 체크 후 2. 누른 적 없다면 누를 수 있게 하고 3. 누른 적이 있다면 못 누르게 하고.

  1. 데이터베이스

그런데 db 관리도 좀 어렵습니다. 원래는 댓글 테이블에 like 컬럽을 0으로 생성하고 좋아요가 눌리면 이 숫자를 증가시키려고 했습니다. 그런데 이렇게 하면 각각 누른 사람들의 ID를 확인할 수 없잖아요? 그럼 좋아요 누른 이력 테이블도 또 관리해야 하나요?

대표 서비스 (페이스북 등) 나 일반적으로 어떻게 구현하는지 도움이 필요합니다.

많은 도움 바랍니다!

1 답변

  • 좋아요

    5

    싫어요
    채택 취소하기

    테이블 하나면 간단히 해결될것 같습니다

    이게 최선의 방법은 아니지만 구현하기 간단하고 좋습니다

    유저는 눌렀을때 아이디를 기록하고 비유저는 아이피를 기록해서 체크하는 방식이죠

    일단 예를들어 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 처리를 한다
    }
    
    

    이렇게 하시면됩니다

    참 쉽죠?

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 네! 아주 많은 도움 되었습니다. 결국 댓글 내용을 관리하는 테이블에 따라서 좋아요 이력 테이블이 필요 하군요!! 감사합니다 ^^! 상남자 2016.8.18 22:22

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)