[태호] 조회수 기능 구현 고민 - boostcampwm2023/web04-ALGOCEAN GitHub Wiki

고려 사항

  • 하나의 유저가 하나의 게시글을 볼 때마다 조회수를 증가시켜야하는지
    • 볼 때 마다 증가시킴
    • 하루에 한번만 증가시킴
    • 유저당 한번만 증가시킴

구현 방식

  • GET을 통해 증가시키는 방법 → 멱등성이 깨짐
  • PUT을 통해 증가시키는 방법 → API호출을 최소 2회 해야함(GET → PUT)

볼 때 마다 증가시킴

  • 게시글에 대한 요청을 받을 때 마다 DB의 값을 증가시키기

하루에 한번만 증가시킴

  • 쿠키와 세션정보를 활용
  • 유저의 쿠키와 세션정보를 통해 조회수를 증가시킬지 말지 결정하는 로직 필요

유저당 한번만 증가시킴

  • 조회수를 다루는 table이나 user의 column에 해당 글을 읽었는지 여부 추가
  • 이를 통해 조회수를 증가시킬지 말지 결정할 수 있음

잘못 생각했던 점

  • IP를 통해 조회수의 증가 여부를 결정하려고 했지만 대학교와 같은 곳은 여러명이 하나의 IP를 사용함
  • GET은 사용하면 안됨 왜냐하면 멱등성이 깨짐
    • 프로젝트 스펙에 따라 다름
  • 프로젝트 스펙을 고려하여 로직을 작성할 생각을 못했음
    • 쇼핑몰과 같은 사이트는 조회수가 중요하기 때문에 여러가지를 모두 고려하여 조회수 관련 로직을 작성해야 함
    • 우리 프로젝트에서는 조회수가 중요하지 않기 때문에 naive하게 구현해도 괜찮음
    • 다만 naive하게 구현한 이후 refactoring을 통한 spec-up 과정이 필요할 수도 있음
  • 하나의 사용자가 여러 device를 사용하는 경우를 고려하지 못함

구현 결과

  • GET 요청을 받을 때 마다 조회수를 증가시키는 방법을 선택함
  • 해당 게시글을 조회 하고 조회수를 증가시키는 것을 하나의 transaction으로 묶음

image