초창기 레딧(Reddit)은 본래 문자를 보내 음식을 주문할 수 있는 서비스였다. 2005년 이 아이디어로 와이 컴비네이터(Y Combinator)에서 탈락한 스티브 허프만과 알렉시스 오하니안은 전설적인 컴퓨터 해커이자 성공한 벤처 기업가인 폴 그레이엄과의 대화 끝에 지금의 소셜 뉴스 ‘레딧’을 만들어냈다. 이후 2013년 9월 기점으로 레딧은 매달 7300만 명이 방문하고 48억의 페이지뷰를 자랑하는 거대 소셜 사이트로 성장했다. 이 모든 것을 운영하는 정직원의 수는 단 28명이다.
레딧이 이렇게 수십억 대의 페이지뷰를 기록하는 소셜 사이트로 성장하기까지는 수많은 시행착오가 있었다. 레딧의 첫번 째 직원인 제레미 에드버그는 경험을 통해 자신이 배운 '성공적인 소셜 사이트 만드는 법'을 공개했다.
사용자와의 관계
- 사용자가 대신 일 하게 하라.
레딧의 사이트 관리는 수 천명의 자원봉사자들이 도맡아서 하고 있다. 사용자들이 직접 나서 사기나 스팸과 관련된 문제들을 해결하는 등 자정 작용이 일어나고 있는 것이다. 이 과정은 생각보다 훨씬 원활히 이루어지고 있으며, 그렇기 때문에 레딧은 계속해서 작은 조직으로 유지될 수 있었다.
- 사용자의 말에 귀 기울여라.
사용자들은 당신이 모르지만, 알고 싶어하는 많은 것들에 대해 이야기 해줄 것이다. 레딧 골드(프리미엄 멤버)의 경우 커뮤니티에서 장난처럼 시작되었지만, 생각보다 호응이 좋아 정식 상품이 되었다.
- API를 제공하라.
API를 제공하면 프로그래머들은 또 다른 서비스를 만들어낸다. 예를 들어 레딧의 아이폰 앱은 API를 사용해 회사 밖에 있는 개발자들이 만든 것이다. 2008년부터 레딧은 사용자에게 오픈 소스를 제공했지만, 코드 짜는 일이 일반인에겐 생소하기 때문에 별 호응이 없었다. 그러나 언젠가 설립자 중 한 명이 결혼을 해서 팀 전원이 비행기에 있는 동안 웹사이트에 누군가 웜(네트워크를 통해 자신을 복제하고 전파할 수 있는 악성 프로그램)을 퍼트렸을 때, 사용자 중에 한 명이 웜이 못 퍼지도록 조치를 해 놓은 일이 있었다. 이처럼 위기상황일 때는 오픈 소스 커뮤니티가 도움된다.
- 커뮤니티에서 유저와 소통하라.
커뮤니티에서 관리자가 적극적으로 사용자와 소통해라. 사용자들은 관리자가 직접 내용에 관심을 가지고 콘텐츠에 참여하는 것을 좋아한다.
데이터 관리
- ’데이터 중력’을 기억하라.
데이터는 비즈니스의 가장 중요한 자산이다. 구글, 페이스북, 플리커같은 회사들은 모두 자신들의 데이터에 기반을 두어 회사를 세웠다. 데이터를 어디에 저장할지 고민할 때에 꼭 염두에 두어야 하는 것은 그것이 당신의 서비스 애플리케이션으로부터 가까이 있어야 한다는 것이다. 데이터 중력을 구심점 삼아 모든 비즈니스가 이루어진다. 데이터를 옮기는 것은 상당히 돈이 많이 들고 힘든 일이기 때문에 애초에 이 부분을 고려해야 한다. 데이터, 넣기는 쉬워도 빼내긴 어려움을 꼭 기억하자.
- 데이터의 만료 기간을 설정해라.
오래된 페이지(thread)가 계속 남아 있으면, 데이터베이스가 불필요하게 커지고 최신 데이터들을 보존하는 것이 어렵다. 오래된 페이지는 편집할 수 없도록 만들고, 사용자들이 코멘트나 투표를 하지 못하게 막아두어라. 생각보다 사용자들은 별 신경 쓰지 않을 것이다.
서비스 아키텍쳐
- 클라우드 서버의 장단점을 파악하라
처음 레딧은 실 서버를 사용했지만, 이후 아마존의 EC2(Elastic Cloud Compute)로 옮겼다. EC2는 실 서버에 비해 약 29% 정도가 저렴하고, 추후 확장하는 것이 간편한 것이 장점이다. 그러나 네트워크 지연이 실 서버보다 길고 같은 하드웨어에 올라오는 다른 회사 서비스들이 하드웨어 리소스를 많이 잡아먹을 수도 있다는 단점이 있다. 이를 인지하고 대비해라.
- 처음부터 확장을 염두에 둔 아키텍쳐를 만들 필요는 없다.
당신의 사이트가 커지고, 확장했을 때에 어떤 문제가 생기는지 파악할 수 있을 때까지 기다려라.
- SSD를 비싼 디스크(disk)가 아니라 값싼 램(RAM)으로 생각하라.
SSD(solid state drive)는 하드보다 4배가 비싸 가격적으로 부담스러울 수 있다. 그러나 성능은 16배 뛰어나다. 속도를 위해서는 SSD를 사용하라. 가격 값을 한다.
- 로그인하지 않은 사용자들을 차별대우 하라.
로그인 하지 않은 사용자들이 전체 트래픽의 50% 정도를 차지한다. 그들을 본 서버가 아닌 캐시 된 콘텐츠를 보여주는 CDN(콘텐츠 전송 네트워크)으로 보내면, 본 서버의 부하를 줄여 성능을 향상시킬 수 있다.
- 스키마(Schema)는 가능한 한 간단하게!
스키마가 간단할수록, 기능을 추가할 때마다 테이블을 바꿀 필요가 없어 더 편리하다. 레딧은 처음 포스트그레(Postgres, 관계형 DB) 를 이용했지만, 카산드라(Cassandra, 비관계형 DB)로 옮기게 되면서 성능이 많이 향상되었다.
원문 출처: Reddit: Lessons Learned From Mistakes Made Scaling To 1 Billion Pageviews A Month