광고 차단 프로그램이 감지되었습니다

이 사이트는 광고 수익을 통해 무료로 콘텐츠와 서비스를 제공하고 있습니다.

더 나은 서비스를 위해 광고 차단 프로그램을 비활성화 해주세요.

광고 차단 해제 방법 보기
Loading...

Django에서 세션을 활용한 조회수 증가 로직 구현하기!

Django에서 세션을 활용한 조회수 증가 로직 구현하기!에 대한 img

세션으로 조회수 기능 구현하기

 

models.py 에서 조회수 필드를 추가해준다.

    views = models.PositiveIntegerField(default=0)  # 조회수 필드 추가


views.py 에서 post_detail 뷰를 수정하여 조회수를 증가시키는 로직을 추가한다

def post_detail(request, pk):
    post = get_object_or_404(Post, pk=pk)
    
    # 세션을 사용하여 중복 조회수 방지
    session_key = f'post_viewed_{pk}'
    if not request.session.get(session_key, False):
        # 조회수 증가
        post.views += 1
        post.save(update_fields=['views'])
        # 세션에 표시
        request.session[session_key] = True
        # 30분 후 세션 만료
        request.session.set_expiry(1800)  # 30분(초 단위)

 

post_list.html post_detail.html에도 각각 조회수 표시 코드를 삽입한다.

                   <i class="bi bi-eye"></i> {{ post.views }}
                            <i class="bi bi-calendar3 ms-2"></i> {{ post.created_date|date:"Y.m.d" }}

 

      <span class="ms-2">
                <i class="bi bi-eye"></i> {{ post.views }}
            </span>

 

30분 설정은 네이버 블로그가 30분까지 조회수 중복방지 설정시간으로 찾아져 그대로 따왔고,

쿠키보다 세션으로 공정성과 일관성을 위해 사용했다.

 

이 상황에서 쿠키와 세션의 차이는?

 

쿠키: 클라이언트(브라우저) 측에 저장

  • 사용자가 직접 수정 가능
  • 조회수 조작이 쉬움
  • 네트워크 상에서 노출될 수 있음

세션: 서버 측에 저장

  • 사용자가 직접 수정 불가
  • 조회수 조작 방지
  • 중요 데이터를 서버에서 안전하게 관리

 



ai가 추천한 추가 보완방법(미적용)

더욱 정교한 조회수 관리를 위해 다음과 같은 방법을 고려할 수 있습니다:
✅ IP + User-Agent 기반 조회수 제한request.META.get('REMOTE_ADDR', '')와 request.META.get('HTTP_USER_AGENT', '')를 활용하여 동일 사용자의 중복 조회 방지
✅ Redis 활용조회수를 데이터베이스 대신 Redis에 저장하여 성능 최적화 (cache.incr(cache_key, 1))
✅ 봇 트래픽 차단Django middleware를 활용하여 검색 엔진 크롤러나 봇의 조회수를 필터링
✅ Rate Limiting 적용django_ratelimit을 사용하여 짧은 시간 내 반복적인 조회 차단이러한 방법을 적용하면 조회수 조작을 방지하면서도 서버 성능을 최적화할 수 있습니다.


목차
목차를 불러오는 중...

댓글

Loading...

댓글 로딩 중...

구글 검색