인프런 커뮤니티 질문&답변

띵똥님의 프로필 이미지
띵똥

작성한 질문수

비전공자도 이해할 수 있는 DB 설계 입문/실전

[실습] 요구사항을 보고 DB 설계해보기 - JSCODE 커뮤니티 (2)

조회수

해결된 질문

작성

·

56

·

수정됨

2

강의를 보다가 궁금증이 생겨서 질문합니다.

만약 로그인 안 한 사용자(회원X)도 볼 수 있는 게시글이라고 할 때, 조회수를 어떻게 해야하는 건가요?

로그인 한 사람(회원O)만 게시글을 볼 경우 중간테이블을 만들어 이미 봤다면 조회수를 안 올리기 위해 만든 다는 것까지는 이해했습니다.

제가 생각한 방식은

  1. 게시글에 컬럼에 로그인 안 한 사용자의 조회수 넣기(그냥 수로 관리)

  2. 로그인한 사용자의 경우는 중간테이블로 조회수 관리

     

데이터를 따로 관리해서 이 둘을 합산해서 총 조회수로 만든다 인데

제가 너무 복잡하게 생각한 건지, 다른 좋은 방법이 있는지 궁금합니다

답변 1

1

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

안녕하세요 띵똥님! 좋은 질문 해주셨네요😊

 

조회수를 구현할 때는

특정 유저가 악의적으로 매번 새로고침을 통해 조회수를 올리는 행위를 막을 수 있어야 합니다.

말씀해주신 1번째 방식(게시글 컬럼에 로그인 안 한 사용자의 조회수 넣기)으로 구현하게 되면

악의적으로 조회수를 올려버릴 수 있게 됩니다.

 

그래서 이걸 방지하기 위해 로그인 안 한 사용자를 구별하기 위해서

일반적으로 IP 주소를 같이 기록해놓기도 합니다.

 

그럼 중간 테이블을 아래와 같이 구성할 수 있습니다.

views (조회수 테이블)

  • id : PK

  • postId : 게시글 id (FK)

  • userId : 사용자 id (FK), Null 허용

  • ipAddress : IP 주소

 

이 외로 궁금하신 점 있으시면 또 질문 남겨주세요:)

띵똥님의 프로필 이미지
띵똥
질문자

오 ip주소 넣는 방법이 있었군요. 찾아보니 세션 id를 사용하는 경우도 있다고 하는데 현업에서는 보통 ip 주소를 사용하나요?

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

IP 주소, 세션 정보, 디바이스 정보 이렇게 다양하게 수집해서 구별하는 서비스도 있고

IP 주소 또는 세션 정보만 수집하는 경우도 있습니다~!

일반적인 서비스에서는 IP 주소 정보를 가지고 구별을 많이 하는 걸로 알고 있습니다:)

띵똥님의 프로필 이미지
띵똥
질문자

답변 감사합니다~

띵똥님의 프로필 이미지
띵똥

작성한 질문수

질문하기