구현이 불가합니다.

ip 기준으로 좋아요를 구현하려고 했지만, ip를 이용해서 구현이 불가능하다는 결론이 나왔습니다..

사용자의 ip는 고유하지 않습니다. 와이파이, LET, 핫스팟 등을 사용하면 같은 기기라도 ip는 항상 변합니다. 그리고 와이파이를 사용하여 좋아요를누르게 되면 한 와이파이 안에 있는 사용자들은 모두 좋아요가 눌린 상태로 게시물 조회가 되어 좋아요에 대한 고유성을 잃게 됩니다.

비로그인 사용자에게도 좋아요를 누르게 하는 다른 방법은 토큰을 사용하는 방법이 있는데, 이 역시 사용자가 토큰을 삭제하거나 토큰이 만료되면 다시 좋아요를 누를 수 있게되어 신뢰성을 잃게 됩니다.

따라서 이런 고유성 및 신뢰성 문제를 해결하고자, 비로그인 사용자에게 좋아요 기능을 제공하지 않기로 결정했습니다. 추후 일반 회원 로그인 기능이 구현되면 도입하겠습니다.

좋아요 표시 화면

  • /
  • /posts
  • /posts/[id]
  • /categories/[id]


좋아요 기능 구현 계획

1. 정의

좋아요를 누르는 사용자(좋아요 단위)에 대해 정의를 내려야합니다.

제가 정의한 범위는 다음과 같습니다.

고유한 ip를 가진 사용자

관리자 뿐만 아니라 일반 회원 로그인도 확장에 염두해두고 있지만, 지금 당장은 계획에 없기 때문에 경우에서 배제하겠습니다.

동일한 ip로 접속하여 좋아요를 누른 사용자는 좋아요를 두 번 누를 수 없습니다.

또한 본인이 누른 좋아요에 대해 표시가 되어있어야 하고, 취소를 할 수 있어야 합니다.

<br>

2. 구현 사항

  1. 좋아요 조회 api
    • 별도의 API로 만들지 않고, 기존 PostResponse에 포함하여 전송합니다.

<br>

  1. 좋아요 누르기 api
    • 게시물의 좋아요를 1 증가시킵니다.
    • 좋아요를 누른 사용자의 ip를 저장합니다.
    • 같은 ip로 요청된 좋아요가 있으면 카운트하지 않는다.

<br>

  1. 좋아요 취소 api
    • 게시물의 좋아요를 1 감소시킵니다.
    • 좋아요를 취소한 사용자의 ip를 삭제합니다.

<br>

  1. 좋아요 확인 api
    • 사용자가 게시물의 좋아요를 눌렀는지 확인합니다.
    • 비로그인 사용자는 ip를 확인합니다.
    • (추가) 로그인 사용자는 아이디를 조회하여 확인합니다.

<br>

3. 고려사항

  1. 서버에서는 사용자의 ip를 식별하여 좋아요를 눌렀는지 누르지 않았는지 판별해야 합니다.

<br>

  1. 로그인한 일반 유저가 좋아요를 누르는 케이스에 대해 고려해야 합니다.
    • 비로그인 사용자: IP 기준으로 좋아요 판단
    • 로그인 사용자: 로그인 정보 기준으로 좋아요 판단
    • 로그인 사용자는 추후 고려하여 확장하겠습니다.