티스토리 뷰
개요
리그오브레전드 게임을 좋아하고, 하나의 오픈톡방에 운영진으로 있습니다.
운영진분들이 재능기부를 하는데 나는 어떤걸 할까 하다가,
이전 롤방에서 사용하던 사설전적기반 자동 팀매칭 기능이 생각나서 개발하게 되었습니다.
GitHub - zoz0312/Purora: Kakao-Talk Chatbot
Kakao-Talk Chatbot. Contribute to zoz0312/Purora development by creating an account on GitHub.
github.com
기능 설계
우선 메인 기능은 자동 팀 매칭이지만 그 매칭을 개발하기 위해선 거쳐야할 관문이 많았습니다.
재미있는 기능들도 포함했는데, 모든 기능들은 다음과 같았습니다.
- 카카오톡 기반 파티관리
- 명령어 관리
- 매칭을 위한 유저 데이터 수집
- 수집한 데이터와 파티기반 유저 자동매칭
큼지막한 기능들은 총 세개였고 하나씩 기능 구현에 들어갔습니다.
개발 환경
- Nest.js
- Ubuntu 18.04
- MySQL
- Docker
- React.js
- Git Page
- Selenium
- 메신저봇 R (Rhino JavaScipt)
메신저봇 R (모바일) <=> Nest.js (BackEnd)
카카오톡 기반 파티관리
"메신저봇 R"에선 전부 Nest.js와 통신하는 구조를 가졌습니다.
다만 특정 키워드가 포함되어있는지 여부만 파악하여, End Point만 다르게 요청합니다.


위의 사진과 같이 유저들이 자유롭게 파티를 생성하고 참여하는 모습입니다.
자동 매칭에서 제일 첫 관문인 파티관리 기능을 제작하였습니다.
명령어 관리
이건 채팅방 활성화에 도움을 주는 유저들의 커스텀 명령어입니다.

유저들이 자유롭게 학습시킬 수 있고, 특정 키워드에는 위와같이 반응하는 모습을 볼 수 있습니다.
유저들이 학습내역을 생성, 조회, 삭제할 수 있습니다.
하나의 키워드에 여러개의 응답이 존재하는 경우 랜덤하게 하나를 뽑아 출력합니다.

제일 활발하게 사용되는 키워드는 운세였습니다.
약 300개 이상의 답변을 가지고 있고, 활발하게 채팅을 시작하게 해주는 키워드입니다.
매칭을 위한 유저 데이터 수집
머리를 많이 써야 했던 기능 중 하나입니다.
우선 롤 전적검색을 할 수 있는 사이트는 생각보다 많습니다 (Op.gg, Fow.kr.. 등등)
그러나 해당 사이트들의 공통점은 사설 전적을 검색할 수 없습니다.
사설전적이 필요한 이유
내전을 하게 되는 경우 사설 게임을 열어서 하기 때문에 사설 전적이 필요합니다.
사설전적 검색이 안되는 이유
사설전적은 Private하게 해당 유저의 ID로 로그인 했을 때만, 조회가 가능합니다.
일반적으로 라이엇 API로는 해결할 수 없었습니다.
그러나 저는 라이엇 토큰으로 조회할 수 있다는 얘기를 들었기에, 시도해보았고 효과적으로 해결할 수 있었습니다.
사설전적 조회
사설전적조회엔 크게 2가지가 필요했습니다.
PVPNET_ID_KR, id_token
로그인한 경우 Cookie에 들어있는 유저의 고유 ID인 PVPNET_ID_KR와 id_token이 필요합니다.
해당 값이 필요한 이유
[GET]
https://acs.leagueoflegends.com/v1/stats/player_history/KR/${PVPNET_ID_KR}?begIndex=${beginIndex}&endIndex=${endIndex}&queue=0
beginIndex: 가져올 전적 시작 인덱스 (최근기준)
endIndex: 가져올 전적 끝 인덱스
queue: 전적 검색 타입 (0: 사설, .. 등등)
GET방식으로 위와같이 요청할때 PVPNET_ID_KR이 필요하고, 요청시 header에 id_token가 필요로 하게 됩니다.
위와같이 요청한 경우엔 정상적으로 사설전적을 가져올 수 있었습니다.
가져온 이후로는 필요에 맞는 데이터를 쪼개서 DB에 담아 저장하였습니다.

게임 데이터를 가져오면 각각의 소환사에 데이터가 저장되기도 하지만, 해당 유저가 플레이 했던 게임 ID도 저장이 됩니다.
전체 유저는 같은 GAME ID를 플래이 했다면, 위의 전적에 출력되게 됩니다.
셀레니움
id_token은 셀레니움으로 Riot로그인을 하여 가져왔습니다.
해당 셀레니움 설정이 매우 까다로워 시간을 많이 잡아먹었습니다.
기존
nest(docker) <=> 로컬 셀레니움
현재 진행형
nest(docker) <=> selenium(docker) 시도중
수집한 데이터와 파티기반 유저 자동매칭
유저들은 각각 raiting이 있고, 사설 승패여부또한 존재합니다.
이를 기반으로 자동매칭을 제작해야 합니다 (작업전)
후기
무언가 노마드코더처럼 강의를 따라가지 않고 나 혼자서 해본 사이드 프로젝트는 처음이였다.
카톡방 유저들에게 편안함 부여 및 결과물의 뿌듯함과 개발할때 재미있음을 처음으로 느꼈다.
개발적으로 많이 상승한 시기에서 아직 부족하지만 혼자서 기획부터 디자인 개발까지 끝낸다는게 너무 신기하다.
나중에 꼭 포트폴리오에 써야겠다 ㅎ.ㅎ
아직 남은 개발 완료된다면 꼭 글을 더 남기겠다.
'개발 > 개인프로젝트' 카테고리의 다른 글
[개인프로젝트] 롤 사설전적검색 "포로라" 개발기 (2) (0) | 2021.11.25 |
---|