애자일을 통한 네이버 e스포츠 경기일정 개선 [코드스테이츠 PMB 7기]
대문 사진 출처 : https://brand.lck.co.kr/
누군가 저에게 좋아하는 것이 무엇이냐 물으면, 반드시 이야기 하는 것이 하나 있습니다.
게임
저는 게임을 '하는 것'과 '보는 것' 모두를 좋아합니다. 실력이 좋은건 아니지만...
글을 쓰는 2021년 8월 초를 기준으로, 게임을 하는 시간보다는 보는 시간이 더 많습니다. 특히 인기 종목인 리그오브레전드(League of Legends, 이하 LOL)의 한국 프로리그인 LCK를 많이 보고 있는데요. 이제 곧 리그의 여름 시즌이 끝나기 때문에 더욱 흥미진진하게 보고 있는 중입니다.
요즘은 매일 퇴근 후에 네이버 e스포츠 탭에 가서 좋아하는 팀들의 경기 결과와 다음 일정을 확인하곤 합니다. 어느 스포츠나 마찬가지로 LCK또한 시즌 막바지 경기가 매우 중요합니다. 한 경기의 승패에 따라 최종 성적이 크게 달라질 수 있고, 플레이오프 및 가을에 있을 국제대회(Worlds 또는 롤드컵) 참가 여부가 결정되기 때문입니다.
하지만 네이버 e스포츠 페이지에서 일정을 확인할 때 불편한 부분이 하나 있었습니다.
바로 반드시 모든 팀의 일정을 월 단위로, 시간 순서대로 확인 할 수 밖에 없다는 점 입니다. 저는 T1이라는 팀의 바로 다음 경기, 다다음 경기 일정이 언제인지, 어떤 팀과 경기하는지만 알고 싶은데, LCK에 참가하는 10개팀의 경기 일정이 모두 보여서 내가 원하는 팀 일정을 보기는 어려웠기 때문입니다.
그래서 오늘은 제가 네이버의 PM이 되었다고 가정 하고, 네이버 e스포츠의 일정 페이지를, 애자일 개발 프로세스로 개선하는 것을 계획 해 보고자 합니다.
제가 가장 불편했던 부분은 크게 두 가지 입니다.
1. 내가 원하는 팀의 경기 일정만 보고 싶다.
제가 LCK에서 좋아하는 팀은 2팀 입니다. 바로 T1과 DWG라는 팀 입니다. 그래서 해당 두 팀의 일정만 확인하고 싶은데, 현재 네이버 e스포츠 일정 탭에서는 전체 팀의 8월 전체 일정을 보여주기 때문에 Ctrl+F를 이용해 팀 이름을 찾는 식으로 원하는 경기를 찾아야 합니다. 오늘 날짜 경기로 바로 이동하는 기능이 있긴 하지만, 일주일에 10게임 가까이 진행되는 LCK 특성상, 표기되는 정보가 너무 많아 분별이 어려워 불편합니다.
2. 특히 그 팀의 다음 경기 일정을 보고 싶다.
과거의 경기 결과도 중요합니다. 과거의 성적이 팀의 현재 순위를 만드는 것이니까. 하지만 경기가 끝난 뒤에 "오늘 쉬운 상대를 이겼는데 다음 상대도 쉬운 상대일까?" "오늘 강팀과 경기해서 아쉽게 졌는데, 다음 경기는 이길 수 있을까?" 라는 의문이 더 강하게 드는 것도 사실입니다. 그래서 과거 경기 만큼이나 다음, 다다음 경기를 어떤 팀과 하는지 알고 싶은 생각도 크죠. 하지만 네이버 e스포츠 일정에서 이를 확인하는게 쉽지는 않았습니다.
조금 더 나아가면 다음과 같은 욕구도 있습니다.
3. 경기의 자세한 데이터가 알고 싶다.
축구나 야구의 경우 골을 누가 넣었는지, 투수의 삼진, 포볼 기록은 어떻게 되는지 등의 경기 기록을 포털에서 제공하죠. 이를 통해 경기가 종료된 뒤 좋아하는 선수가 있다면 어떤 활약을 했는지 쉽게 가늠할 수 있습니다.
LOL도 게임에서 발생하는 기록(데이터)이 있습니다. 킬 스코어(상대 캐릭터를 얼마나 잡아냈는지), 글로벌 골드(게임을 진행하면서 팀이 벌어들인 재화가 얼마인지 = 그 재화로 아이템을 사고, 아이템이 좋으면 승리할 확률이 높아짐), 오브젝트 스코어(중요한 상대 기지를 얼마나 파괴 하였는지) 등이 대표적입니다. 해설자들도 도 경기 중에 중요하게 언급하는 지표이기 때문에, 경기 결과에서 이런 데이터를 한 눈에 확인할 수 있다면 좋겠다고 생각했습니다.
사실 저는 QWER.GG 라는 사이트를 이용하면서 이런 욕구를 일부 해소하고 있긴 합니다. 개인적으로 정말 깔끔하게 잘 만든 UI/UX를 가진 사이트라고 생각합니다. 다만 네이버는 다시보기 영상 외에 뉴스, 칼럼, 승부예측 같은 다른 콘텐츠를 더하는 것도 가능하기 때문에 QWER.GG 보다 더 강력한 사용자 경험을 줄 수 있지 않을까 생각하며 기능 개선안을 제안해 봅니다.
4. 관심 있는 팀 경기가 있으면 경기 전/후로 알림을 받고 싶다.
좋아하는 팀의 경기 일정을 스스로 챙겨야 하기 때문에 가끔 경기 시작 시간이 지난 뒤 이를 알게되면 경기 앞부분을 놓쳐서 아쉬운 경우가 있었습니다. 네이버는 LCK의 생중계와 다시보기 또한 제공하고 있기 때문에, 네이버 앱을 통해 내가 좋아하는 팀의 경기 전 푸시 알림을 준다면, 원하는 경기를 관람하는데 도움이 될 것이라고 생각했습니다.
이런 상황을 종합해 고객의 문제를 한 문장으로 정의하면 다음과 같습니다.
네이버 e스포츠에서 내가 좋아하는 팀의 정보를 더 편리하게 보고 싶다.
애자일 방법론에서 유저스토리는 일을 나누는 기본 단위라고 합니다.
실리콘벨리에서 애자일 방법을 적용할 때, 일의 단위를 테마 > 에픽> 스토리 > 태스크 순으로 좁혀 나갈 수 있는데, 여기서 스토리를 일의 가장 기본 단위로 설정하고 있다고 합니다.
해서 본격적인 스프린트 계획을 세우기 전에, 앞서 경험한 아쉬웠던 점에 대한 2가지의 유저스토리를 설정 해 보았습니다. 유저스토리를 설정하는 방법은 지난 번 글에서 적용했던 방법을 그대로 활용 해 보았습니다.
Story 1. 경기 전 특정 팀의 팬
응원하는 팀의 팬으로서,
경기를 보며 응원하기 위해,
팀의 예정된 경기 일정을 간편하게 확인하고 싶다.
Story 2. 경기 후 특정 팀의 팬
응원하는 팀의 팬으로서,
지난 경기에 팀이 어떻게 경기를 했는지 보기 위해,
응원하는 팀의 자세한 경기 결과를 확인하고 싶다.
스토리1과 2는 같은 사람을 대상으로 하지만, 경기 전/후라는 상황이 바뀜에 따라 원하는 욕구가 다르다고 보았습니다. 경기 전인 경우, 예정된 경기를 라이브로 보면서 응원하고 싶다는 욕구를 핵심으로 생각한 반면, 경기 후인 경우 라이브 시청 유무와 관계 없이, 팀의 경기 내용을 회상하며 공감하고 응원하고 싶다는 욕구를 핵심으로 보았죠.
마지막으로 두 스토리를 하나의 에픽(Epic)으로 아래와 같이 묶어보았습니다.
<Epic>
e스포츠 특정 팀의 팬으로서,
해당 팀을 응원하기 위해,
네이버를 통해 간편하게 개별 팀과 관련된 유용한 정보를 얻을 수 있다.
이제 설정한 스토리를 바탕으로 제품 백로그를 작성 해 보았습니다.
크게 3가지 우선순위로 구분해 보았는데요.
① Bare minimum : 꼭 필요한 최소 기능
② Advanced : 우선순위는 밀려나지만 있으면 확실히 유용한 기능
③ Nightmare : 없어도 상관없지만 있으면 좋을 것 같은 기능.
우선순위는 ICE스코어를 설정한 뒤, 점수 순서 + 기능 간 관련성을 기준으로 부여 해 보았습니다. 데이터를 통해 우선순위를 결정하면 정말 좋겠지만, 네이버 내부 데이터를 알 수는 없기 때문에 일단 자의적으로 ICE스코어를 통해 빠르게 우선순위를 파악하는데 집중했습니다.
원하는 모든 것을 빠르게 해결할 수 있으면 좋겠지만, 세상엔 불가능한 일도 많죠. 아무리 네이버라도 들일 수 있는 에너지와 리소스에는 한계가 있기 마련. PM이라면 우선순위를 판단해, 중요한 일을 빠르게 처리하는 것이 중요하다고 배웠기에, 이미 네이버 다른 페이지에서 제공하는 기능을 우선순위로 고려해 보았습니다.
① 기능의 필요성을 조직에서 이미 공감함 → 빠르게 내부 설득을 할 수 있음
② 이미 개발된 코드가 있음 → 개발 난이도, 개발 시간을 줄일 수 있음
1주일이라는 제한된 스프린트 시간 안에 기능 개발을 완료하는게 목표이기에, 이미 다른 종목/도메인에서 배포된 기능을 우선순위로 고려하였습니다.
이를 통해, 1주 스프린트에서 개선할 제품의 기능(주제)을 다음과 같이 정해보았습니다.
LCK 경기 일정을 팀 별로 조회하는 기능
팀별 일정 조회 기능은 네이버 스포츠의 "야구"에서 이미 적용 중인 기능이기도 합니다. (링크)
리그에서 제공하는 경기 일정 API 형태에 따라 편차는 있을 수 있겠지만(API가 없을 수도 있고...), 전체 일정을 필터링을 하는 수준이면 구현이 가능 할 것으로 보여 1주일만에 충분히 진행 할 수 있으리라 생각했습니다.
추가로...
현재 Bare Minimum으로 생각했던 '팀별 일정' 기능과, Advanced로 생각했던 '일정 알림' 기능 모두 일부 리그에 한해 네이버 스포츠의 'MY팀'에서 제공하는 기능입니다.
다만 'MY팀' 페이지로 진입하기 위해서는 여러 단계를 거쳐야 해서(스포츠 > 뉴스 > 햄버거 > 팀 앰블럼 > 스크롤 > 하단의 일정) 이 기능을 이미 알고 있는 사람이 아닌 이상 접근하는게 쉽지는 않았습니다. 그래서 앞서 살펴본 프로야구의 경우 처럼 스포츠 페이지의 전체 일정 탭에서 개별 팀 일정을 필터링 하여 보여주는 기능이 접근성이 높아 보였습니다. (스포츠 > 일정 > 팀별일정)
'MY팀'에서 알림을 활성화 하는 것은 일정 확인보다는 간편하였습니다. 설정을 통해서 특정 팀의 경기 전, 후 네이버앱 푸시알림을 받을지 선택만 하면 자동으로 알림이 오는 형태였기 때문입니다.
LCK의 경우 해외축구와 달리 네이버가 라이브 중계도 하고 있으므로, 알림 기능을 통해 네이버 라이브 동시접속자 수도 늘릴 수 있으리라 기대됩니다. 라이브 조회 수가 늘어나면 라이브를 통한 광고 수입도 늘릴 수 있지 않을까요.
앞서 살펴본 내용을 토대로 스프린트 계획을 수립 해 보았습니다.
네이버 e스포츠 페이지의 "일정" 탭에서 팀 별로 경기일정을 필터링해서 볼 수 있도록 하기
기능 개발 후, A/B테스트를 통해 검증하며, 검증 지표는 "전환율(기능 사용 비율)"로 생각했습니다.
<A/B테스트 설계 예시>
- 가설 : T1팬들은 전체 일정보기 기능보다 팀별 일정 보기 기능을 활용해 T1의 경기 일정만 보고 싶을 것이다.
- 목표 : A/B테스트 결과, 팀 일정 기능 페이지로 진입한 유저 중 팀 일정 필터 사용비율 50% 이상
- 기간 : 1주일
- 대상 : 네이버를 통해 T1의 LCK 경기 라이브를 본 이력이 있는 유저
- 지표 : 일정 탭 유입 유저 중 50% 이상이 팀 별 필터링 기능 활용
JIRA를 활용해 스프린트 백로그 및 계획을 아래와 같이 작성 해 보았습니다.
팀별 일정 기능은 이미 '야구'에서 구현이 완료된 기능입니다. 하지만 e스포츠쪽의 데이터, 코드 구성이 다를 수 있기에 개발과 코드리뷰에 시간이 필요할 수다 있다고 생각했고, 그래서 1주 동안은 기능 개발에 집중하는 스프린트를 계획 해 보았습니다. 그리고 2차 스프린트에서 개발이 완료된 내용을 테스트 하고, 배포하여 A/B테스트를 통해 결과를 평가하는 스케줄을 계획 하였습니다.
그리고 차후에 MY팀 설정 기능을 개발하기 전 디자인 작업이 필요할 것이라 생각하여, 1주차 스프린트 기간 동안 다음 스토리에 대한 디자인 개발을 진행하기로 계획 해 보았습니다.
아마 A/B테스트의 결과에 따라 기능 개선이 필요할 수도 있고, 버그 픽스가 필요할 수 있으므로 3주 이후의 계획은 세우지 못했습니다. 만약 팀별 일정 보기 기능에 이상이 없다면 다음 스토리인 MY팀 설정 및 푸시알림 기능 개발로 넘어갈 수 있을 것이라 생각합니다.
비록 스프린트 형태는 아니지만, 다른 직무에서 프로젝트의 계획을 세우는 일은 여러 번 경험 해 본 터라, 애자일에 기반한 스프린트 플래닝도 크게 어렵지 않을 것이라 생각했습니다. 단순히 '1주일 안에 할 수 있는 일만 정하면 되잖아?' 라는 생각이었죠. 하지만 실제로 기능을 선정하고, 구현 가능한 수준까지 개발해야 한다는 조건을 충족시키려 하다보니, 처음 예상보다 욕심을 더 많이 버려야하고, 일을 더 잘게 쪼개야 함을 알 수 있었습니다.
사실 앞에서 가상으로 설정한 스프린트 계획이 적절한지 계속해서 의문을 갖게 되기는 합니다. 실제 네이버의 협업 구조와 의사결정 구조를 알지 못하기 때문입니다. 그래서 개인적으로 사이드 프로젝트를 진행하게 된다면 애자일에 기반한 스크럼, 스프린트 같은 협업 방법들을 직접 실행 해 보고 싶다는 생각을 더 크게 하게 되었습니다.