Skip to content

SWM-KAWAI-MANS/party-run-application

Repository files navigation

image image image

Studio Kotlin Java version minSdk targetSdk


🚦 프로젝트 개요

본 파티런 프로젝트는 단순히 혼자 뛰는 러닝에서 벗어나, 다른 사용자와 함께 하는 Runner Experience(RX)를 제공합니다. 대부분 혼자 이루어지는 달리기를 사회적 액티비티로 전환하고 누군가와 함께 뛰면서 즐길 수 있게 하고, 달리기를 소셜과 연결하여 더 큰 즐거움과 동기부여를 제공합니다. 사용자들은 다른 사용자와 함께 할 수 있는 다양한 기능들을 통해 동기부여를 받으며 더 재미있게 러닝을 즐길 수 있고, 실시간으로 새로운 사람들과 경쟁이나 협동하며 달리며 러너에게 특화된 RX를 느끼게 합니다.


📹 Preview

영상 설명
drawing 로그인
drawing '배틀모드'의 랜덤매칭부터 카운트다운까지
drawing 매칭 취소 경우의 수
drawing 싱글모드
drawing 같이하기
drawing 마이페이지 (종합기록, 싱글히스토리, 대결히스토리)
drawing 프로필 수정 (사진, 닉네임)
drawing 로그아웃 후 다른 계정 로그인
drawing 회원탈퇴

전체적인 시연영상

ezgif com-video-to-gif (1)

싱글모드 ~ 배틀모드


🏢 Architecture Overview

image

  • 본 프로젝트는 데이터, 도메인, UI 레이어를 갖는 단방향 데이터 흐름의 반응형 프로그래밍 모델을 따른다. UI 레이어와 같은 상위 레이어가 하위 레이어의 데이터를 제공받기 위해 이벤트 호출하고 그 데이터는 하위 레이어에서 상위 레이어로 흐르는 구조로 진행된다.
스크린샷 2023-10-23 오후 9 30 12
  • UI 레이어는 JetPack Compose를 사용하여 빌드하였고, ViewModel에서 UseCase, Repository를 통한 데이터 스트림을 수신하고 이를 UI State로 변환한다.
  • 사용자가 앱과의 상호 작용하는 방식은 ViewModel에서 이벤트로 처리

🛠️ 예: 결과 화면에 대결(Battle) 결과 표시

  • 대결이 끝나고 나면 data layer에서 서버로부터 대결 결과의 분석정보를 가져오기 위한 이벤트를 호출한다.
  • 안드로이드 로컬에 저장되어 있는 대결에 참여했던 러너들의 데이터와 서버로부터 얻은 대결 분석 리소스들을 Domain layer에서 결합해 각 러너들에 맞는 결과 정보를 UI layer 화면에 표시하게 된다.

image


🛠️ 러너 랜덤 매칭을 위한 SSE와 REST 혼용 방식의 설계 및 구현

image

  • 매칭에서는 REST API 와 Server Sent Events (SSE)를 사용한다.
  • 대결 모드에 참여하려는 러너들로부터 매칭 요청을 받은 후 SSE를 통해 매칭 이벤트를 클라이언트에게 단방향으로 전달
  • 전달받은 이벤트를 처리하기 위해 클라이언트는 위 그림처럼 REST API 와 Server Sent Events 네트워크 통신을 단계 별로 적절히 사용하여 매칭과정이 이루어질 수 있도록 구성
  • 목표한 러너 수만큼 대기, 다른 러너들의 매칭 여부 대기 경우에 Server Sent Events 를, 그 외 클라이언트가 서버로부터 전달할 데이터가 있는 경우는 REST API 사용

🏘 Modularization

멀티모듈화 전략을 채택함으로써 모듈 단위로 기능을 분리하여 코드 간의 의존성을 낮추고, 재사용성을 높이며, 빌드 시간을 줄이는 이점을 얻는다.

Image 1
  • App Module

    앱 모듈은 모든 Feature 모듈과 필요한 핵심 모듈에 의존

  • Feature Module

    앱에서 단일 책임을 처리할 수 있도록 범위가 지정된 기능별 모듈

  • Core Module

    앱의 다른 모듈 간에 공유해야 하는 코드와 특정 종속성을 포함하는 일반 라이브러리 모듈

About

실시간 랜덤매칭 배틀 달리기 서비스

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages