인프런 커뮤니티 질문&답변
조회수 어뷰징 방지 질문
해결된 질문
작성
·
96
0
안녕하세요~
어뷰징 방지에 대한 질문을 드리고 싶습니다.
현재, 어뷰징 방지를 위해 분산락을 잡고 해당 유저가 특정 게시물에 대한 조회수를 10분 동안 1만 올릴 수 있도록 설계해주셨는데요.
레디스의 키-벨류 로도 충분히 위와 같은 어뷰징 방지를 설계할 수 있지 않나요?
SETNX (key=유저+게시글, value=1, TTL=10분)
만약 이 값이 이미 존재한다면 조회수를 올리지 않는 방식으로 구현해도 충분할 거 같은데, 분산락으로 이 로직을 구현하신 이유가 궁금합니다.
감사합니다!
답변 2
0
amoa님, 안녕하세요!
만약 이 값이 이미 존재한다면 조회수를 올리지 않는 방식으로 구현해도 충분할 거 같은데, 분산락으로 이 로직을 구현하신 이유가 궁금합니다.
강의에서 진행한 setIfAbsent가 내부적으로 SETNX 명령어를 사용하기 때문에 동일한 방식입니다.
두 가지가 다른 방식이 아닙니다.
분산락에 대한 구현 방식을 SETNX로 처리했다고 봐주시면 됩니다!
0
안녕하세요, 인프런 AI 인턴입니다. amoa님.
어뷰징 방지 정책을 설계할 때, 특히 조회수 증가와 관련된 로직에서 분산락을 사용하는 이유와 Redis의 키-값 쌍을 활용하는 방법에 대해 자세히 설명해드릴게요.
Redis를 활용한 어뷰징 방지 방법
Redis의 키-값을 활용한 방법:
SETNX명령과TTL을 사용하여 특정 사용자가 일정 시간 동안 특정 글에 대해 조회수를 한 번만 증가시키도록 할 수 있습니다. 예를 들어,SETNX (key=유저+게시글, value=1, TTL=10분)으로 설정하면 최초 접속 시에만 값이 설정되고, TTL이 지나기 전까지는 동일한 키 생성이 방지됩니다.
분산락을 사용하는 이유:
- 데이터 일관성 및 충돌 방지: 분산락은 여러 서버나 인스턴스에서 동시에 같은 작업이 실행되지 않도록 보장합니다. 특정 사용자가 여러 분산 환경(예: 다양한 서버, 클라우드 인스턴스)에서 동시에 접근할 때 발생할 수 있는 동시성 문제를 해결하는데 유효합니다.
- 복잡한 트랜잭션 관리: 분산락은 더 복잡한 트랜잭션 구조에서 데이터의 원자성을 보장하는데 유리합니다. 즉, 여러 데이터를 동시에 변경해야 하는 상황에서는 분산락이 큰 도움이 됩니다.
- 데이터 일관성 및 충돌 방지: 분산락은 여러 서버나 인스턴스에서 동시에 같은 작업이 실행되지 않도록 보장합니다. 특정 사용자가 여러 분산 환경(예: 다양한 서버, 클라우드 인스턴스)에서 동시에 접근할 때 발생할 수 있는 동시성 문제를 해결하는데 유효합니다.
결론
- Redis의
SETNX와TTL을 활용하여 간단히 어뷰징을 방지할 수 있지만, 분산 환경에서의 동시성 문제나 복잡한 트랜잭션 관리가 필요할 때는 분산락을 병행하는 것이 데이터의 일관성을 유지하는 데 더 효과적일 수 있습니다.
완벽한 해결책은 아니지만, 환경에 맞게 적절한 해결책을 찾아가는 것이 중요합니다. 유사한 주제를 다룬 게시글이 있으면 참조하실 수 있도록 안내해 드리겠습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





