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