Skip to content

Team-walkies/Walkie-server

Repository files navigation

Walkie-server

프로젝트 개요

Walkie-server는 위치 기반 산책 게이미피케이션 서비스 Walkie의 핵심 백엔드 시스템입니다. 본 프로젝트는 Android 및 iOS 모바일 클라이언트와 연동하여, 사용자의 산책 활동을 데이터화하고 이를 게임 콘텐츠로 확장하는 역할을 수행합니다.

서버의 역할 및 필요성

모바일 앱이 사용자에게 직관적인 인터페이스와 위치 추적 기능을 제공한다면, Walkie-server는 다음과 같은 이유로 서비스에 필수적인 역할을 담당합니다:

역할 설명
데이터 중앙화 및 동기화 사용자의 산책 기록, 획득한 아이템(Egg), 캐릭터 성장 상태 등 핵심 데이터를 중앙에서 안전하게 관리하여, 기기 변경이나 앱 재설치 시에도 데이터의 연속성을 보장합니다.
비즈니스 로직 처리 단순한 걸음 수 측정을 넘어, 위치 기반의 스팟 방문 인증, 산책 경로에 따른 보상 지급, 캐릭터 육성 알고리즘 등 복잡한 게이미피케이션 로직을 서버 사이드에서 처리하여 클라이언트의 부하를 줄이고 보안을 강화합니다.
사용자 간 상호작용 지원 리뷰 작성, 이벤트 참여, 알림 발송 등 사용자 간의 커뮤니케이션과 상호작용을 중개하여 커뮤니티 기능을 활성화합니다.
확장성 있는 서비스 구조 인증(Auth), 회원 관리(Member), 스팟(Spot), 알림(Notification) 등 도메인별로 모듈화된 구조를 통해 서비스의 기능 확장과 유지보수를 용이하게 합니다.

결과적으로 Walkie-server는 서비스의 핵심 비즈니스 로직과 데이터 처리를 담당하는 백엔드 시스템 역할을 수행합니다.

기술 스택

Backend

기술 선택 이유
Java 21 최신 언어 기능을 활용하여 코드의 간결성과 생산성을 높이기 위해 선택했습니다.
Spring Boot 3.4.2 내장 서버와 자동 설정을 통해 빠르고 안정적인 애플리케이션 개발을 위해 사용했습니다.
Spring Data JPA 객체 지향적인 데이터 접근과 생산성 높은 쿼리 작성을 위해 채택했습니다.
Spring Security 인증 및 인가 로직을 표준화된 방식으로 안전하게 처리하기 위해 사용했습니다.
JWT (JSON Web Token) 모바일 환경에 적합한 무상태(Stateless) 인증 방식을 구현하기 위해 선택했습니다.

Database

기술 선택 이유
MySQL 안정적이고 범용적인 관계형 데이터베이스로, 복잡한 데이터 관계를 관리하기 위해 사용했습니다.

Infrastructure & Tools

기술 선택 이유
Gradle 유연한 빌드 설정과 의존성 관리를 위해 선택했습니다.
Swagger (SpringDoc) API 명세서를 자동으로 생성하여 클라이언트 개발자와의 협업 효율을 높이기 위해 사용했습니다.
Firebase Admin SDK 모바일 기기로의 푸시 알림(FCM) 전송을 위해 통합했습니다.
ELK Stack (Elasticsearch, Logstash, Kibana) 서비스의 요청, 비즈니스 로직, 에러 등을 실시간으로 모니터링하고 분석하기 위해 구축했습니다.

Others

기술 선택 이유
Uber H3 위치 데이터를 육각형 그리드 시스템으로 효율적으로 인덱싱하고 처리하기 위해 도입했습니다.
Discord webhook 모바일 파트 테스트시 에러 원인 공유 및 유저 데이터 관리를 위해 사용되고 있습니다.

시스템 아키텍처 (Architecture)

Frame 1618872750

Walkie 서비스는 클라이언트, 백엔드 서버, 데이터 저장소, 외부 서비스로 구성된 구조를 가지며, 서버 파트는 아래와 같은 아키텍쳐를 관리합니다.

1. Backend Server (On-premise)

  • Spring Boot Application
    백엔드 서버는 온프레미스 환경에서 Spring Boot 기반으로 운영되며, 서비스의 핵심 비즈니스 로직과 API 처리를 담당합니다.
  • Authentication & API Processing
    모든 클라이언트 요청은 JWT 기반 인증을 거쳐 처리되며, 인증된 요청만 비즈니스 로직 계층으로 전달됩니다.
  • Logging
    애플리케이션 로그는 Logback을 통해 수집되며, 운영 중 발생하는 이벤트와 오류 추적에 활용됩니다.

2. Data Layer

  • MySQL (Docker)
    서비스의 주요 데이터(회원, 산책 기록, 스팟, 캐릭터 상태 등)는 Docker 환경에서 실행되는 MySQL 데이터베이스에 저장됩니다.
  • Spring Data JPA
    백엔드 애플리케이션은 Spring Data JPA를 통해 데이터베이스와 상호작용하며, 도메인 중심의 데이터 접근 구조를 유지합니다.

3. Logging & Monitoring

  • ELK Stack (Docker 기반)
    로그 데이터는 Docker 환경의 Elasticsearch, Logstash, Kibana로 적재되어 서버 상태 모니터링과 장애 분석에 활용됩니다.

주요 기능 (Main Features)

Authentication & Member

기능 설명
소셜 로그인/회원가입 카카오 및 애플 OAuth를 통한 간편 로그인 및 회원가입을 지원합니다.
JWT 인증 Access/Refresh Token 기반의 보안 인증 및 토큰 재발급 기능을 제공합니다.
회원 정보 관리 닉네임 변경, 프로필 조회, 회원 탈퇴 등 사용자 계정 관리 기능을 수행합니다.

Spot & Location

기능 설명
스팟 조회 사용자 위치 기반으로 주변의 산책 스팟 정보를 제공합니다.
스팟 방문 인증 GPS 좌표와 H3 인덱싱을 활용하여 사용자의 스팟 방문 여부를 검증합니다.
경로 기록 사용자의 산책 경로 데이터를 저장하고 분석합니다.

Character & Gamification

기능 설명
캐릭터 육성 산책 활동에 따라 캐릭터의 경험치를 증가시키고 레벨업을 처리합니다.
아이템(Egg) 관리 산책 중 획득한 알(Egg) 아이템의 생성, 획득, 부화 로직을 수행합니다.
보상 시스템 일일 미션 달성, 스팟 방문 등에 따른 보상을 지급합니다.

Community & Interaction

기능 설명
리뷰 작성 방문한 스팟에 대한 리뷰 및 평점을 등록하고 조회합니다.
알림(Notification) FCM을 연동하여 이벤트, 보상 획득 등의 푸시 알림을 전송합니다.

About

워키홀릭이잖아~~

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages