이터널 리턴 전적 검색 사이트를 만들어보았다

tura·2021년 12월 18일
6
post-thumbnail

er.op.gg 사이트

작년 10월, 블랙서바이벌: 영원회귀 - 지금은 이터널 리턴이라고 부르는 게임이 막 세상의 관심을 받던 시기. 당시 나는 산업기능요원 의무로 1달간 훈련소에 다녀와야 했는데, 훈련소에서 나오면 어떤 것들을 할지 곰곰히 생각을 해봤다.

고민 끝에 내린 결론은 뭐든 간에 만드는 것보다 연구하는 걸 해보고 싶다는 생각이었다. 그렇게 생각했다.

근데 막상 나오니까 또 생각이 바뀌더라. 경제적인 것들에 대한 관심과 함께 내가 만든 사이트나 제품으로 돈을 벌어보고 싶다는 욕심이 생겼다. 친구와 같이 이야기를 하면서, 이터널 리턴이라는 게임의 통계 사이트를 한 번 만들어보기로 했다. 경쟁 대상이 되는 사이트가 아직 존재하지 않았기 때문에 심리적인 부담도 그리 크지는 않았다.

마침 훈련소에 가기 전 프로그래머스에서 Node.js 수업을 들었던 터라 어느 정도 자신감도 있었다.

일단 크롤링으로 스타트

처음은 무척 간단했다. 당시 이터널 리턴 홈페이지에는 몇 일 단위로 갱신되는 스프레드시트가 있었는데, 이 내용을 크롤링해서 DB로 저장한 다음, OP.GG처럼 티어를 붙여서 깔끔하게 보여주는 정도였다.

초기 개발 스택으로는 서버에 Javascript 기반의 Node, 그리고 크롤링에 Python을 사용했다. 웹사이트 개발은 내 친구가 맡아줬는데, 제일 무난한 React를 사용했다.

당시에 나는 인프라에 대한 지식이 거의 전무한 상태여서, 우선 한 번 이름을 들어보기도 하고, 쓰기 편해보이는 Heroku를 사용했다. DB로는 MongoDB를 사용했다.

도메인은 다른 사이트들이 그렇듯 gg 도메인을 쓰려고 했다. 근데 가격이 무슨 15만원이나 해서 결국 싸고 저렴한 fun 도메인을 쓰기로 했다. 그렇게 정해진 도메인 이름은 BSER.FUN.

사이트를 만들었으니 홍보도 해야지 싶었다. 공식 디스코드가 있는데 그쪽에서 사이트를 홍보했다. 디씨인사이드 갤러리에서 글을 작성하기도 했다. 트위치에서 스트리머들이 방송하는 곳에 찾아가서 채팅으로 홍보하기도 했다. 나는 사실 이런 쪽에는 자신이 없어서 대부분 친구에게 맡겼는데.. 홍보는 일단 지르고 봐야되겠구나 싶었다.

이 당시 개발 히스토리를 따로 상세하기 남겨놓지는 못했고 간단한 타임라인만 남겼는데, 그 내용은 아래와 같다.

  • 11월 10일: 사이트 오픈. 캐릭터 통계 목록과 상세 정보 페이지 추가.
  • 11월 20일: 상세 페이지에 캐릭터별 추천 빌드 추가, 일간 방문자 수 70 → 359명으로 약 5배 증가
  • 12월 6일: 전적 검색 추가. 일간 방문자 수 347 → 4614명으로 약 13.3배 증가. 이후 일간 방문자 수 4000명대 유지.
  • 12월 13일: 늘어난 사용자로 인한 장애 (동시접속자 수 100명 대에서 다운)
    • 디자인 개선, 안정성 높이는 작업 진행 (Heroku → AWS)
    • 도네이션 페이지 추가
    • 디씨인사이드 홍보로 일간 방문자 수 7377명 달성.

사이트는 무척 순항하고 있었다. 이대로 광고만 붙일 수 있다면 부자가 될 수 있겠다! 싶었지만..

공식 API 등장

공식 API가 등장했다. 기존의 전적 검색은 공식 홈페이지에서 사용하던 서버에 직접 요청을 날려서 오는 응답을 나름대로 파싱해서 보여주는 방식이었다. (개발자 도구로 어떤 식으로 요청을 보내야 원하는 응답이 오는지 확인할 수 있었다.) 통계도 그렇고, 랭킹도 그렇고, 사실상 우리는 기존에 있는 것들을 정제했을 뿐이었다.

공식 API가 있다는 건 이제 전적 데이터를 가지고 직접 통계를 뽑을 수 있다는 얘기였다. 물론, 그만한 인프라가 받쳐줬을 때 얘기지만..

데이터를 집계하는 작업은 기본적으로 시간이 오래 걸리는 작업이다. MongoDB -> MySQL로 이전하면서 데이터를 다루기는 조금 더 편해졌지만, 실제 사이트에서 사용하는 DB로 30초가 넘어가는 쿼리를 실행하기에는 무리가 있었다.

더구나 전적을 쌓기 위해서는 요청을 받는 서버와는 상관없는 별도의 워커가 필요했다. 전적 갱신을 하면서도 클라이언트의 요청은 받아야 하고, 서버가 여러 대가 되더라도 동일한 유저의 전적을 중복으로 갱신해서는 안된다. 이 때 AWS의 Elastic Beanstalk으로 서버를 두 대 띄웠는데, 저 중복 갱신 문제때문에 정신 나가는 줄 알았다..

관련 경험이 없어서 맨땅에 헤딩하는 느낌으로 하나하나 해결해야 했다. 당연히 시간은 오래 걸릴 수 밖에 없었다.

조금 나중의 이야기이지만, 데이터 분석을 위해서 이후 AWS Redshift와 같은 분석용 DB를 데이터 웨어하우스로 만들고, Airflow를 활용해 주기적으로 프로덕션 DB에서 분석용 DB로 복사하는 태스크를 만들었다. 데이터 엔지니어링에 대해서는 완전히 무지한 상태였는데, 프로그래머스에서 들었던 관련 강의가 무척 도움이 되었다.

마찬가지로 몇 개월 후의 이야기이지만, 전적 갱신은 Redis를 활용해서 해결했다. 일반적으로 Redis는 캐싱에 주로 사용되지만, Redis의 데이터 구조를 적절히 활용하면 메시지 큐처럼 활용할 수도 있다. 기술적인 내용에 대해서 궁금하다면 이 포스트를 참고하면 될 것 같다. 간간히 친구와 같이 작성하는 기술 블로그다.

경쟁 사이트 출현

설상가상으로, 공식 API에 대응하는 와중 경쟁 사이트가 생겨나기 시작했다. 여러 가지 사이트가 있었지만 대표적인 건 닥지지아야지지.

닥지지는 우선 개발 속도가 무척 빨랐다. 우리가 기능 하나 추가할 때 얘네는 3~4개씩 추가하는 식이었다. 나중에 알고봤더니 닥지지가 이터널 리턴 API를 만드는 회사였더라..

아야지지는 퀄리티가 상당했다. 이쪽은 혼자 개발하는 것 같은데 우리가 구상하고 실제로 개발할 엄두가 안났던 기능들이 이쪽에는 이미 추가되어 있었다.

현실적인 문제들

마지막으로.. 우리에게는 현실적인 문제들도 있었다.

시간이 부족했다. 친구와 함께 둘이서 만들었지만, 둘 다 본업이 있었고 여기에 전력을 쏟을 수 없는 상황이었다.

돈도 부족했다. RDS, Elastic Beanstalk 등 인프라를 유지하는 데만 매달 20~30만원 정도의 비용이 소모됬다. 애드센스라도 붙이면 어떻게든 할 수 있지 않을까 싶었는데, 4번 정도 승인 실패를 받으니까 힘이 쭉 빠지더라.

이런 저런 이유로 우리는 개발을 중단하기로 했다. 아쉽지만 사이트를 처음부터 끝까지 만들어본 값진 경험을 했다고 생각하고, 다음 날 서버를 내리기로 했는데...

OP.GG에서 연락이..?

OP.GG에서 연락이 왔다. 우리 사이트에 관심이 있어서 연락했는데, 한 번 만나서 이야기했으면 좋겠다는 이야기였다. 아니, 진짜 내가 아는 그 OP.GG? 거기서 연락이 왔다고? 처음에는 잘 믿기지가 않아서 메일을 보내신 분의 이름을 구글링해보기도 했다. 진짜였다!

만나서 얘기를 해봤는데, 우리 사이트를 사고싶다고 한다. 거기에 입사 제안까지 받았다. 😮😮😮

사실 알게 모르게 사이트를 만들면서 애정이 많이 쌓였다. 현실적인 문제로 개발을 중단하자고 마음먹었을 때 무척 아쉬웠다. 나로서는 거부하고 싶지 않은 제안이었다. 이직을 생각하고 있기도 했고 말이다.

그렇게 OP.GG에 합류해서, 지금은 er.op.gg로 이름을 바꾼 사이트를 개발하고 운영하고 있다.

마치면서

개발자라면 누구나 자신이 만든 서비스가 좋은 서비스이고, 많은 사람들이 사용하는 서비스이기를 바랄 것 같다. 그런 의미에서 처음부터 끝까지 사이트를 직접 만들고 운영해봤던 건 무척 값진 경험이었다.

생각보다 깊은 기술적 이해도가 필요하지도 않았다. 기능이 몇 개 안되고 일간 방문자수가 고작 1000명대인 사이트에서 아키텍처나 최적화가 무슨 소용이 있을까? 더구나 혼자 개발하는데 말이다.

중요한 건 일단 시작하고, 그리고 어떤 형태로든 마무리를 짓는 것 같다. 일단 만들어 놓으면, 관성이라는게 생기고 내 의지와는 상관없이 일이 굴러가기 시작한다.

그런 의미에서, 마음 속으로만 생각하고 있던 사이드 프로젝트, 혹은 하다가 포기했던 그 프로젝트! 지금 바로 시작해보는 건 어떨까? 😵‍💫

4개의 댓글

comment-user-thumbnail
2021년 12월 19일

역시 시작이 반이라는 얘기가 괜히 있는게 아니네요.. ㅋㅋㅋ
잘 읽었습니다!

1개의 답글
comment-user-thumbnail
2021년 12월 19일

와 저런 경험 쉽지 않은데 대단하네요!

답글 달기
comment-user-thumbnail
2023년 11월 30일

어쩌다 글 보게 됐는데 되게 신기하고 멋지네요... 시작이 중요한 것 같아요! 감명 받고 갑니다 ~

답글 달기