배포 링크
> https://drive.google.com/drive/folders/1yEKb8Xr3KZ6qOkDoXCN2YFPnJTvZlesq
마라톤은 단순히 42.195라는 숫자가 아니라, 인간이 자신의 한계를 도전하고 극복할 수 있는 상징적인 거리입니다. 그러나 많은 마라토너들이 도전의 시작부터 복잡한 신청 양식, 개인정보 입력, 별도의 결제 방식 등 불편함에 직면하며 도전을 망설이게 됩니다. 이에, 우리는 "출발선"이라는 서비스를 통해 이러한 번거로운 과정을 혁신하고자 합니다. 사용자가 마라톤에 도전하는 그 첫 걸음, 즉 출발선에 서는 순간부터 간편하고 직관적인 경험을 제공함으로써, 위대한 도전에 온전히 몰입할 수 있게하고 함께 한계를 극복할 동료의 가치를 전달하고자 기획되었습니다.
"출발선"은 간편하게 신청하고 재밌게 즐길 수 있는 나를 위한 마라톤 서비스입니다. 마라톤 등록 자동화 (Back Office): 크롤링 및 구글 Cloud Vision 기술을 활용해 다양한 대회 정보를 자동으로 등록, 대회측 사용자들의 편의성을 극대화합니다. 마라톤 간편 신청 / 간편 결제: 카카오 사용자 데이터와 원클릭 결제(카카오페이)를 통해, 복잡한 신청 과정을 단순화하여 누구나 손쉽게 도전에 참여할 수 있습니다. 카카오 친구 연동: 카카오 친구 목록을 자동으로 조회, 마라톤에 함께 참여할 동료를 손쉽게 등록하여 응원과 격려의 문화를 만듭니다. 모바일, 워치 연동 기록 조회: 최신 모바일 및 스마트워치 기술을 통해 개인의 마라톤 기록을 실시간으로 확인하고, 목표 페이스를 시각적으로 모니터링할 수 있도록 지원합니다. 실시간 팀 정보 제공: 마라톤 진행 중 팀의 위치, 인접 팀원 정보 및 랭킹을 실시간으로 전송해, 동료의 응원과 격려 속에서 한계를 극복할 수 있도록 돕습니다.
- 개발 기간: 25.01.06~25.02.26 / 7주+1주(본선)
- 인원: 6명
- 서비스 개요 : 마라톤 플랫폼 어플리케이션 (모바일, 워치)
대회 등록 프로세스를 자동화하여 편의성을 향상하는 기능 제공
직관적인 UI를 통해 간편하게 마라톤 신청 및 결제하는 기능 제공
카카오 친구 목록을 자동 조회하여 마라톤에 참여한 친구를 손쉽게 등록하는 기능 제공
스마트워치를 통해 사용자가 자신의 마라톤 기록을 실시간으로 확인하는 기능 제공
마라톤이 진행중일 때 스마트워치를 통해 팀의 실시간 위치, 인접 팀원 정보, 랭킹을 제공
| 분류 | 기술 스택 |
|---|---|
백엔드 |
|
DB |
|
모바일 & Watch |
|
API |
|
협업 |
|
인프라 |
|
- 각 프로토콜의 역할과 데이터 흐름을 명확히 문서화하여 예외 상황에 대응할 수 있도록 설계함
- 데이터 변환 및 중앙화: 데이터 형식을 표준화(하나의 dto로 정의)하고, 변환 로직을 중앙 집중식으로 관리하여 일관성을 확보함
- MVVM(Movel-View-ViewModel) 아키텍쳐를 도입해 기존 구조에서 원할하지 않던 비동기 데이터 처리와 상태 관리를 해결하고 구조적 유연성과 유지보수성을 개선함
- 개선된 구조를 바탕으로 백그라운드 서비스를 포어그라운드 서비스로 전환하여, 서비스가 지속적으로 실행되도록 변경
- 이벤트 처리 시 DataClient를 활용하여 데이터 송수신 및 이벤트 전달을 구현함
- 통신 흐름, 통신 주기, 연산 로직 등을 최적화하여 워치와 모바일의 부족한 자원을 효율적으로 사용함
- 앱 내에 ROOM DB를 도입하여, 실시간 데이터 업데이트에 필요한 데이터를 로컬 데이터베이스에 저장하도록 구현함
- 앱이 비정상 종료되더라도, 재실행 후 로컬에 저장된 데이터를 기반으로 안정적으로 서비스 복구가 가능하게함
| 김용현 | 이재훈 | 김지수 | 박민경 | 백지민 | 이주호 |
|---|---|---|---|---|---|
![]() |
|||||
| BE, 팀장 | BE | BE, Infra | FE | FE | FE 팀장 |
| @y0nghyun | @potential1205 | @jisu-0305 | @mmmmingb | @eosa1414 | @joeholee |
| Contributors | Role | Position |
|---|---|---|
| 김용현 | 팀장, Backend |
- 유저 자동화 구현: 카카오 OAuth를 통한 유저, 친구 자동 업데이트 구현 - 결제 자동화 구현: 카카오페이 간편결제, 오픈뱅킹 자동이체를 통한 결제 자동화 구현 - 알림 시스템 구현: Firebase Cloud Messaging을 통해 신청 시 친구에게 모바일 알림 - 모바일: RoomDB 마라톤 초기 정보 저장, 페이스 세팅 구현 - Watch: 워치 팀 화면 이벤트, 진동 설계 |
| 이재훈 | 팀원, Backend |
- API 구현: 마라톤 자동 등록, 마라톤 조회 및 필터링, 마라톤 신청 내역 관리 구현 - 시스템 설계 : ERD 구조, 통신 흐름 및 방법 설계 - 통신 구현: : DataClient를 활용한 이벤트 기반 Bluetooth 통신 구현 (워치<->모바일), Retrofit을 활용한 REST API 통신 구현 (모바일 <-> 서버), FireBase RealTime Database를 활용한 실시간 데이터 가공 및 연산 알고리즘 구현 (평균 페이스 평가, 이동거리에 따른 랭킹 계산 등) |
| 김지수 | 팀원, Backend |
- 신청 자동화 구현: Chrome Driver, Selenium을 통한 마라톤 신청 폼 자동작성 및 API 구현 - 서버 설정 진행: 클라우드 서버에 Docker out of Docker방식과 Nginx를 통한 서버 구성 진행 - 자동배포 구축: Jenkins와 GitLab Webhook을 통한 자동배포 구축 - API 구현: 모바일 <-> FireBase Realtime DataBase 통신 연결 및 누적거리, 마라톤 종료 API 구현 - 데이터 스케줄러 적용: Firebase Cloud Functions를 통한 Realtime Database 데이터 TTL구현 |
| 박민경 | 팀원, Frontend |
- 워치 앱 화면 개발: 마라톤 진행 시 개인 화면, 팀 화면 구현 - ViewPager2 활용한 화면 전환: 개인 화면 터치 시 내용 변환 및 슬라이드 시 팀 화면으로 전환, 이벤트 발생 시 자동 화면 전환 구현 - 모바일 화면 개발: 신청 내역 및 친구 목록, 설정 화면 구현 - 공통 컴포넌트 개발: UI 재사용성을 고려한 공통 컴포넌트 설계 및 구현 - Figma 작업 : 모바일 앱 UI/UX 디자인 일부 기여 |
| 백지민 | 팀원, Frontend |
- Figma 작업: 전반적인 모바일&워치 UI/UX 디자인, 서비스명 작명 및 컨셉 색상 구성, 로고 제작 - 모바일 앱 화면 개발: 메인 화면(마라톤 목록 필터링), 설정, 대회 상세, 결제 페이지(결제하기/결제 완료 및 실패), 달려보기(워치 연동 부분) 화면 구현, 전반적인 UI 여백 조정 - 공통 컴포넌트 개발: UI 재사용성을 고려한 공통 컴포넌트 설계 및 구현(바텀 시트-모바일용 모달창, top bar 및 bottom bar) - 워치 앱 화면 개발: 다른 사람의 위치를 도로 형태로 확인 가능한 워치 화면 구현(정규화식을 이용하여 실제 거리 비율에 따라 위치 배치, 도로 애니메이션 동작) - 카카오 로그인 구현: 카카오 API를 이용하여 간편 로그인 처리(사업자 등록 없이 친구 동의 권한을 받기 위하여 카카오 SDK로 구현 후 웹 방식으로 수정) - APK 배포: 안드로이드 스튜디오로부터 APK 파일 추출 및 구글 드라이브로의 배포(*관련 문의: 이메일로) |
| 이주호 | 팀원, Frontend 팀장 |
- 프로젝트 구조 설계: 유지보수성과 확장성을 고려하여 안드로이드 및 워치 애플리케이션의 구조 설계 - 카카오페이 결제 구현 : 카카오페이 API를 활용한 결제 페이지 개발 및 결제 성공/실패/완료 처리 - 모바일-워치 간 통신: DataClient를 활용한 블루투스 기반의 이벤트 송수신 시스템 구축 - 워치 앱 화면 개발 : 마라톤 출발 및 종료 화면 개발 - 약관 모달 구현: 마라톤 신청 시 약관 동의 모달 창 개발 - 공통 컴포넌트 개발: UI 재사용성을 고려한 공통 컴포넌트 설계 및 구현 - Figma 작업 : 모바일 앱 UI/UX 디자인 일부 기여 - 영상 포트폴리오 제작: 프로젝트 홍보 및 소개 영상 기획 및 제작 |


