규모 있는 서비스를 관리하다보면 unnormal case에 대한 처리가 batch 작업마다 꼭 생기곤 한다.
이런 이슈 중 상당 수는 user limit에 대한 제한이 없기 때문이 아닌가 싶다.

최근 회사에서 abusing user 이슈를 겪었다.
내가 관리하는 서비스 중 일정을 동기화 하는 서비스가 있는데,
batch 작업 중 사용자 한 명이 100만 개 이상의 일정을 가지고 있는 케이스를 발견했다.

반복 일정(매주 화요일 10시 회의) 같은건 하나의 일정으로 치는 것을 감안했을 때 일반 사용자가 만들어낸 일정이라고 볼 수 없었다.

  • 심지어 10분 만에 1000개의 일정을 만들기도 했다.

덕분에 batch 로직의 변경과 instance type 변경 등의 별도 작업과 시간을 써야했다.

전부터 우리 회사 서비스에서 아쉬웠던 것은 이런 정책적인 제한이 (거의) 없다는 것이다.
최근 인스타그램과 페이스북의 api를 보면서 우리 문제를 돌아보게 되었다.

인스타그램 사례

limits (제약 사항)에 대해 잘 적용된 서비스는 인스타그램만한 예시가 없을 것 같다. 이해하기도 쉽고.

instagram의 Inauthentic Activity과 spam 정책1에서 instagram은 Inauthentic Activity이 결국 사용자와 서비스를 위한 것이라고 말한다.
이런 허위 활동이 결국 서비스의 질을 떨어트리고 커뮤니티를 망가뜨린다는 것이다.

실제로 초기 페이스북에서 spam이 굉장히 많아 사용자가 이탈한 사건들이 있으니 이런 것들을 만들게 된 것이라고 예상해본다.
허위 활동이라는 것은 서비스 관리도 어렵지만 서비스 질도 떨어뜨린다는 것이 페이스북도 주목한 문제인 것 같다.

인스타그램은 사용자와 api에 대해 적절하게 제한을 두고 있다.

사용자에 대한 제한

제한 대상 제한
follow 숫자 제한 7500명
likes 제한 시간 당 120개
하루에 300-500개
comments 제한 하루에 200개
people tag 제한 post 하나에 20명
DM 제한 하루에 50-70명

신뢰성이 높은 유저(가입한지 6개월이 지난 유저 등)인지에 따라 제한이 다르지만, 전체 제한 및 시간/일 별 제한 정책을 가지고 있다.

여기서 follow 숫자를 제외한 다른 정책들은 instagram에서 공식적으로 open한 내용은 아니다.
다만 관련된 많은 글들을 통해 정책을 확인할 수 있다.

예상하건데 시간당 제한은 abusing 유저나 사용할 수 있을만한 숫자이기 때문에 공식적으로 발표하지 않은 것으로 생각한다.

Api에 대한 제한

developer에게 open한 api에서는 24시간에 25개의 post만 생성할 수 있도록 제한한다.

facebook 사례

흥미로운 점은 facebook은 abusing, spam, sexual post 등에 대해 지표2를 관리하고 공개하고 있다.
우리 서비스는 더 완성도 높아지고 있다는걸 보여주기 위함인 것 같다.

잘못 abusing으로 체크한 경우까지 open하고 있는데 공개하지 못하더라도 배워야할 부분인 것은 분명하다.

limits에 대해 생각 정리하기

허위 활동을 막기 위해 인스타그램에서는 여러가지 limit을 두고 있다.
limit의 숫자들을 어떻게 잡았는지는 모르지만 이걸 정책으로 잡았다는 점이 중요하다.
계산이야 서비스마다 다르겠지만, abusing이 아닌 경우 사용할 수 없는 양을 계산하고 제한하는 것.

서비스를 하기 이전에는 “설마 이런 유저가 있겠어?” 라는 생각을 하지만
그치만 대규모 서비스를 한다면 진짜 무조건 있다.
그런 사람들. 꼭 여럿이 있다.
혹은 봇일 수도 있다.

“없겠지”가 아니라 “있을 수 없어”라고 만드는 것이 정책이다.
그리고 이러한 정책은 반드시 서비스에 반영되어야 한다.

이로 인한 장점들은 잠깐만 생각해도 명확하다.

limit으로 인한 장점들

간단하게 운영 관점과 서비스 관점에서 이슈들을 볼 수 있다.

운영 이슈

인스타그램 기준으로 정책이 없다면 follow 하는 수가 100만, 10억 명이 되었을 때 구조를 다시 잡아야 할 것이다. (여기서 follow는 내가 follow하는 수)
내가 팔로우 하는 사람이 100만 명인 것은 말이 안된다.
100만 명을 팔로우 하는건 애초에 정상적이지 않으며, 이게 가능하다면 매일 업로드 되는 피드와 스토리를 감당할 수도 없다.

여기서도 “당연히 100만 명을 팔로우하지 않을거야” 가 아니라, 당연한 것을 불가능하게 만드는 정책의 반영이 중요하다.
정책으로 제한하는 것은 쉽지만, 100만 명을 만든 계정이 생겼을 때 후처리하는 것은 법적인 문제와 더불어 굉장한 골칫덩어리다.
어뷰징을 위한 별도의 아키텍처 설계가 필요할 수도 있다.

서비스 이슈

서비스 이슈가 생긴다는 것은 결국 품질 하락을 의미한다.
품질 하락은 서비스 경쟁력을 떨어트리며 소비자 이탈과 결국 서비스의 성패와도 이어진다.

인스타그램의 사례를 다시 가져오면 follow를 마구 할 수 있어 follow count를 어지럽히는 abusing 사용자가 늘어난다면.
현재도 있는 follow를 늘려주는 abusing service들이 더 날뛰게 될 것이며 그로 인해 bot들이 만드는 post와 의미없는 광고의 비율이 늘어날 것이다.
이는 결국 떨어진 품질로 인한 서비스 품질 하락으로 이어진다.

limit 정하기

limit은 빨리 정해야 한다.
나중가면 limit을 넣기 힘들기 때문에 개발자라고 할지라도 서비스를 오픈하는 단계라면 먼저 제안할 수 있어야 한다.

현재 내가 맡은 서비스는 abusing 때문에 서비스 이슈가 나는 경우는 잘 없지만 운영 이슈가 너무 명확하고 비용을 크게 잡아 먹고 있다.
아쉬운 점은 이런 정책들을 서버 개발자가 정하기는 어렵다는 것.
특히 서비스 중간에 정책을 반영하기란 쉽지 않다. PM님 설득좀 되세요! :scream:

reference

  • 전체 follow 수 제한
    • https://help.instagram.com/408167069251249?locale=ko_KR
  • 공식적으로 open하지 않은 제한
    • https://goinstagram.com/instagram-follow-unfollow-limit/
  • api 제한
    • https://developers.facebook.com/docs/instagram-api/guides/content-publishing

  1. 허위 활동에 대한 instagram의 글을 통해 Inauthentic Activity를 대하는 instagram의 태도를 알 수 있다. 

  2. facebook 지표를 통해 페이스북은 스팸 block을 고지한다.