BetRiot : 디스코드 봇을 통한 LOL 배팅 서비스

지인호·2021년 7월 7일
2

프로젝트 후기

목록 보기
1/2
post-thumbnail

디스코드 채팅 봇을 통해, 자신의 리그오브레전드 매칭에 배팅을 가미한 서비스입니다.
다음 링크를 통해 해당 채팅봇의 테스트 서버에 방문하실 수 있습니다! (현재 폐쇠되었습니다)
또한, 다음 깃허브 링크를 통해 제 프로젝트의 소스를 보실 수 있어요 😁

해당 글은 제가 notion 에 프로젝트에 대해 정리한 글을 토대로 일부 재구성하여 작성한 글입니다!

⚒️제작동기


고등학교 사설 디스코드 서버에 "샤키야 밥" 이라는 생소한 채팅이 올라왔습니다. 제 친구가 만든 디스코드 채팅 봇 "샤키" 의 특정 단어를 명령어로 학교 급식 메뉴를 알려주는 "급식 알리미" 기능을 사용하기 위함 이었습니다.

저는 이러한 디스코드 채팅 봇을 제 주력 언어인 Java 로 개발 할 수 있다는것을 알고, 제가 주로 하는 게임 리그오브레전드와 접목시켜 개발해보기로 하였습니다!


하지만...

LOL 관련 유틸성 디스코드 봇 "소나"

이미 소나 라는 봇이 리그오브 레전드에대한 대부분의 서비스를 제공하고있었습니다. 전적을 보거나, 게임 패치내역을 보거나 내전 팀을 관리하거나... 저는 새롭고 창의적인 즉, 독점할 수 있는 서비스를 찾아보기로했죠


트위치의 채널 포인트 예측 기능

그러던중, 제가 자주 보는 스트리밍 플랫폼인 "트위치" 의 한 기능이 떠올랐습니다.

바로 "채널 포인트 예측" 이라는 기능인데요. 스트리머가 설정한 2가지의 선택지중, 하나를걸어 채널 포인트를 거는 일종의 배팅 기능입니다.

이기능을 롤에 접목시킬 수 있지 않을까?

라고 생각했습니다!


😀희망사항

저는 이번 프로젝트에 다음과 같은 기술들을 적용해보고싶었습니다

  • 일단, 스프링에 대한 호기심이 넘쳤기에,

    Spring Framewok 의 Bean Container 를 적극적으로 사용해보고싶었습니다!

  • 또한, 다양한 OOP 원칙/패턴 들을 접목시켜보고싶었으며,

  • 무엇보다도 TDD 를 통해 제 코드에 확신을 가지고 싶었습니다!

🖊️주요기능

  • 라이엇API
  • 디스코드 내 회원가입 및 라이엇 인증
  • 매치 배팅개설 및 참여
  • 전적 보기
  • 프로필 보기

🤹🏻주요 접목 기술

  • 파생MVC패턴
    유저 가입/탈퇴 서비스 및 배팅서비스를 만들던중, 코드가 점점 하드코딩되어가는것을 발견하였습니다. 유저에게 회원가입이 완료됬다거나하는 "메세지 보내기" 기능과, 정보를 가공하여 dao 를 통해 DB를 수정하는 "서비스 로직 처리" 기능이 한 클래스에 있었습니다. 저는 이를 해결하기위해 고민하던중, MVC 패턴을 채용하고, 이를 제 프로젝트에 맞는 패턴으로 고쳐보기로하였습니다 (디스코드 봇에는 여러 뷰가 필요하지 않으니까요) 그렇게 해서, 각각의 변경에 영향을 받지않는 Model, View, Controller 클래스와, 기능에 대한 생명주기를 관리하는 LifeCycle 클래스를 만들게 되었습니다!
  • Spring Bean
    프로젝트를 진행하면서 "가장 적용해보고 싶었던" 기술입니다! DI 를 XML 파일로 만들어 한눈에 볼수 있다니요!! 프로젝트 내에서 거의 모든 DI 에 Spring Bean 을 사용하였습니다. 어노테이션을 사용해서 Bean 의 메타데이터를 설정하기보단 XML 로 설정하는것이 더 편했습니다. XML 파일 하나가지고 한눈에 볼 수 있으니까요!
    또한, Spring Bean 을 적용하면서 이 기술이 그저 DI 에만 편리한것이 아니라는것을 알게되었습니다. 기존 안티패턴이라고도 불리는 Singleton 패턴의 좋은점만 쏙쏙 골라서 제공해주기도 하였고 심지어 다른 방식으로의 객체 초기화방법 또한 제공하더군요!
  • JdbcTemplate & Database Transaction
  • N진노드 알고리즘 및 String Split

이 외 다양한 디자인패턴들 을 사용해 서비스를 개발하였습니다!

🌕후기


HTTP 408 : RequestTimeout

하고싶은건 별처럼 많은데, 정작시간은 많지 않았습니다. 3개월 내로 끝낼거라 생각했지만,

어떻게하면 더 깨끗한 코드를 만들지?

이런 기능도 추가해보면 어떨까?

라는 생각들에 휩쓸려 결국 개발도중 떠오른 몇몇기능은 배포 후 차차 추가해보기로 하였습니다.


실패한 TDD

Mockito 를 몰랐을때 작성한 테스트. 사용자 데이터가 잘 가공되는지 확인하는 테스트에서 API 로 데이터를 불러오는 로직전체를 실행하기에 하나의 테스트가 초단위를 넘어가는 것을 보실 수 있습니다.

처음 프로젝트를 개발할땐 "좋아, 내 프로젝트의 목표 테스트 커버리지는 100%다!!" 하고 패기좋게 시작하였지만... 정작 TDD에대해선 잘 이해하지도못하였고, 프로젝트 중반즈음엔 테스트를 어떻게 짜야할지도 몰라, 아예 어플리케이션을 통째로 돌린적도 있었습니다. (NullPointerException 이 저를 반겨주더군요) 결국, 테스트 커버리지는 10퍼센트 미만으로 떨어지게되었고, TDD의 도입은 실패하게 되었습니다... 하지만 덕분에 TDD에 대해 정확히 알게 되었기에, 마냥 슬프지만은 않았습니다.


UnbelivableMagicLanguage (UML)

이번 프로젝트를 진행하면서, 예상치도 못하게 아주 편리한 기능을 발견하였습니다. 바로 인텔리제이의 ShowDiagram 이라는 기능인데요. 여러 클래스간의 구조를 UML 다이어그램으로 보여주는 기능입니다. 저는 이 기능을 활용하여, 제가 SOLID원칙을 잘 지켰는지, 디자인 패턴은 잘 쓰였고 MVC는 제대로 적용되었는지를 알 수 있었습니다.


#저는 이프로젝트를 진행하면서

많은것들을 배웠고, 스프링이나 TDD 에 대해 더욱더 깊은 관심을 가지게 되었습니다. 특히 Spring Bean 의 광활한 활용성을요, 또한, UML 에 대해 알아보다가애자일 방법론이나 폭포수모델, 프로토타입 모델등 여러 소프트웨어 공학에 관련해서도 발을 들이게 되었습니다.

#저는 이프로젝트가

성공하였다고 생각합니다. 비록 지구보다도 넓은 제 욕심을 다 채우진 못하였지만, 제 지금 실력을 알게 해주고, 제가 앞으로 1년간 어떻게 공부해나갈지

방향을 제시해준 이정표 프로젝트라고 생각합니다

비록 아쉬운점도 많았고, 힘든점도 많았던 프로젝트였지만, 저에겐 무엇보다도 사랑스럽고 소중한 프로젝트였습니다. 앞으로 있을 여러 프로젝트들도 기대해주세요! 😀

profile
테오의 스프린트 17기 퍼실리테이터

2개의 댓글

comment-user-thumbnail
2021년 11월 2일

배팅기능 수요가 많을거같네요,,

1개의 답글