221102 TIL

고먐미·2022년 11월 2일

지옥의 좋아요 버튼

오늘은.. 좋아요 버튼을 하루종일 만들었다.

우리의 페이지에는 로그인이 없어 좋아요 버튼을 누르면 무한히 좋아요 갯수가 올라가는 것을 만들어야 했고, 생각보다 쉽지 않았다.

백엔드 3명이서 따로 만들어보는 중 '맨93'님이 어느정도 완성?한 코드를 보여주며 "여기까지 만들었는데, 완성은 아니고 같이 고민해보면 만들 수 있을 것 같다." 라고 말씀하셨다.

나와 '희희'님은 '맨93'님의 [ 좋아요 버튼 시연 ] 을 보았고, 문제가 있다는 것도 알게 되었다.

일단 댓글이 1개 있을 때에는 상관 없었다.
좋아요를 누르면 갯수가 올라가고, DB에서도 정상 작동 했다.

그런데 댓글이 2개 이상이면 문제가 생겼다.
첫번째 댓글의 좋아요 이상으로 좋아요가 올라가지 않았다.

예시를 들자면,

  • 힘내세요! 좋아요 3
  • 잘 됐으면 좋겠다. 좋아요 3

이 상태일 때, 잘 됐으면 좋겠다 의 좋아요 버튼을 누르면 힘내세요의 갯수가 올라갔다.

그 전까지는 서로 간섭 없이 알아서 잘 올라가고 있었는데, 좋아요 갯수가 같아지면 첫 번째 댓글의 좋아요가 올라간다는 뜻이다.

@app.route("/comments/like", methods=["POST"])
def comment_like():
    like_receive = request.form['like_give']
    db.comments.update_one({'like': int(like_receive)}, {'$set': {'like': int(like_receive) + 1 }})
    return jsonify({'msg': '좋아요!'})

( 해당 코드 )

아무튼 '희희'님과 나는 코드에 오류부분을 찾기 시작했고, 먼저 내가 의견을 내놓았다.

아마 좋아요를 눌렀을 때, 어떤 댓글에 좋아요를 눌러야 하는지 몰라서 제일 먼저 나오는 댓글에 좋아요를 누르는거 같다! 라고 했고, 이는 결국 맞았지만 코드를 어떻게 짜야 하는지 몰라 코드를 완성시키진 못했다.

그렇게 백엔드 담당 3명이서 머리를 짜내다가 결국 튜터님에게 도움을 요청했고, 튜터님은 금방 코드를 완벽하게 짜주셨다.

@app.route("/comments/like", methods=["POST"])
def comment_like():
    like_receive = request.form['like_give']
    like = db.comments.find_one({'num': int(like_receive)})
    db.comments.update_one({'num': int(like_receive)}, {'$set': {'like': int(like['like']) + 1 }})
    return jsonify({'msg': '좋아요!'})

( 고쳐진 코드 / 물론 html부분도 약간 손봤다 )

이런식으로 like 변수에 num (이미 삭제버튼을 만들어 댓글마다 고유 번호가 있었다.) 키로 like 밸류값을 받아오는 것을 넣어줬다.
그 다음 DB 업데이트를 해주는데, like 키가 아닌 num 키로 !! like 값을 받아왔고, like 키의 like변수의 like값 (맞나?) 에 +1을 해줬다.

마침내.. 우리는 좋아요 버튼을 만들었고 내일은 좋아요 값을 get 방식으로 받아오는 코드를 짜야한다.

내가 짠 코드는 딱히 없는거 같아 슬프다.. ㅠㅠ... 좀 더 열심히 공부하자..

profile
개념을 이해하고 다른사람에게도 알려줄 수 있는 개발자가 되고 싶어요..

1개의 댓글

comment-user-thumbnail
2022년 11월 3일

우와... 결과물을 내셨다는거 자체가 정말 대단하고 멋집니다
끝까지 화이팅!

답글 달기