Walkie-server는 위치 기반 산책 게이미피케이션 서비스 Walkie의 핵심 백엔드 시스템입니다. 본 프로젝트는 Android 및 iOS 모바일 클라이언트와 연동하여, 사용자의 산책 활동을 데이터화하고 이를 게임 콘텐츠로 확장하는 역할을 수행합니다.
모바일 앱이 사용자에게 직관적인 인터페이스와 위치 추적 기능을 제공한다면, Walkie-server는 다음과 같은 이유로 서비스에 필수적인 역할을 담당합니다:
| 역할 | 설명 |
|---|---|
| 데이터 중앙화 및 동기화 | 사용자의 산책 기록, 획득한 아이템(Egg), 캐릭터 성장 상태 등 핵심 데이터를 중앙에서 안전하게 관리하여, 기기 변경이나 앱 재설치 시에도 데이터의 연속성을 보장합니다. |
| 비즈니스 로직 처리 | 단순한 걸음 수 측정을 넘어, 위치 기반의 스팟 방문 인증, 산책 경로에 따른 보상 지급, 캐릭터 육성 알고리즘 등 복잡한 게이미피케이션 로직을 서버 사이드에서 처리하여 클라이언트의 부하를 줄이고 보안을 강화합니다. |
| 사용자 간 상호작용 지원 | 리뷰 작성, 이벤트 참여, 알림 발송 등 사용자 간의 커뮤니케이션과 상호작용을 중개하여 커뮤니티 기능을 활성화합니다. |
| 확장성 있는 서비스 구조 | 인증(Auth), 회원 관리(Member), 스팟(Spot), 알림(Notification) 등 도메인별로 모듈화된 구조를 통해 서비스의 기능 확장과 유지보수를 용이하게 합니다. |
결과적으로 Walkie-server는 서비스의 핵심 비즈니스 로직과 데이터 처리를 담당하는 백엔드 시스템 역할을 수행합니다.
| 기술 | 선택 이유 |
|---|---|
| Java 21 | 최신 언어 기능을 활용하여 코드의 간결성과 생산성을 높이기 위해 선택했습니다. |
| Spring Boot 3.4.2 | 내장 서버와 자동 설정을 통해 빠르고 안정적인 애플리케이션 개발을 위해 사용했습니다. |
| Spring Data JPA | 객체 지향적인 데이터 접근과 생산성 높은 쿼리 작성을 위해 채택했습니다. |
| Spring Security | 인증 및 인가 로직을 표준화된 방식으로 안전하게 처리하기 위해 사용했습니다. |
| JWT (JSON Web Token) | 모바일 환경에 적합한 무상태(Stateless) 인증 방식을 구현하기 위해 선택했습니다. |
| 기술 | 선택 이유 |
|---|---|
| MySQL | 안정적이고 범용적인 관계형 데이터베이스로, 복잡한 데이터 관계를 관리하기 위해 사용했습니다. |
| 기술 | 선택 이유 |
|---|---|
| Gradle | 유연한 빌드 설정과 의존성 관리를 위해 선택했습니다. |
| Swagger (SpringDoc) | API 명세서를 자동으로 생성하여 클라이언트 개발자와의 협업 효율을 높이기 위해 사용했습니다. |
| Firebase Admin SDK | 모바일 기기로의 푸시 알림(FCM) 전송을 위해 통합했습니다. |
| ELK Stack (Elasticsearch, Logstash, Kibana) | 서비스의 요청, 비즈니스 로직, 에러 등을 실시간으로 모니터링하고 분석하기 위해 구축했습니다. |
| 기술 | 선택 이유 |
|---|---|
| Uber H3 | 위치 데이터를 육각형 그리드 시스템으로 효율적으로 인덱싱하고 처리하기 위해 도입했습니다. |
| Discord webhook | 모바일 파트 테스트시 에러 원인 공유 및 유저 데이터 관리를 위해 사용되고 있습니다. |
Walkie 서비스는 클라이언트, 백엔드 서버, 데이터 저장소, 외부 서비스로 구성된 구조를 가지며, 서버 파트는 아래와 같은 아키텍쳐를 관리합니다.
- Spring Boot Application
백엔드 서버는 온프레미스 환경에서 Spring Boot 기반으로 운영되며, 서비스의 핵심 비즈니스 로직과 API 처리를 담당합니다. - Authentication & API Processing
모든 클라이언트 요청은 JWT 기반 인증을 거쳐 처리되며, 인증된 요청만 비즈니스 로직 계층으로 전달됩니다. - Logging
애플리케이션 로그는 Logback을 통해 수집되며, 운영 중 발생하는 이벤트와 오류 추적에 활용됩니다.
- MySQL (Docker)
서비스의 주요 데이터(회원, 산책 기록, 스팟, 캐릭터 상태 등)는 Docker 환경에서 실행되는 MySQL 데이터베이스에 저장됩니다. - Spring Data JPA
백엔드 애플리케이션은 Spring Data JPA를 통해 데이터베이스와 상호작용하며, 도메인 중심의 데이터 접근 구조를 유지합니다.
- ELK Stack (Docker 기반)
로그 데이터는 Docker 환경의 Elasticsearch, Logstash, Kibana로 적재되어 서버 상태 모니터링과 장애 분석에 활용됩니다.
| 기능 | 설명 |
|---|---|
| 소셜 로그인/회원가입 | 카카오 및 애플 OAuth를 통한 간편 로그인 및 회원가입을 지원합니다. |
| JWT 인증 | Access/Refresh Token 기반의 보안 인증 및 토큰 재발급 기능을 제공합니다. |
| 회원 정보 관리 | 닉네임 변경, 프로필 조회, 회원 탈퇴 등 사용자 계정 관리 기능을 수행합니다. |
| 기능 | 설명 |
|---|---|
| 스팟 조회 | 사용자 위치 기반으로 주변의 산책 스팟 정보를 제공합니다. |
| 스팟 방문 인증 | GPS 좌표와 H3 인덱싱을 활용하여 사용자의 스팟 방문 여부를 검증합니다. |
| 경로 기록 | 사용자의 산책 경로 데이터를 저장하고 분석합니다. |
| 기능 | 설명 |
|---|---|
| 캐릭터 육성 | 산책 활동에 따라 캐릭터의 경험치를 증가시키고 레벨업을 처리합니다. |
| 아이템(Egg) 관리 | 산책 중 획득한 알(Egg) 아이템의 생성, 획득, 부화 로직을 수행합니다. |
| 보상 시스템 | 일일 미션 달성, 스팟 방문 등에 따른 보상을 지급합니다. |
| 기능 | 설명 |
|---|---|
| 리뷰 작성 | 방문한 스팟에 대한 리뷰 및 평점을 등록하고 조회합니다. |
| 알림(Notification) | FCM을 연동하여 이벤트, 보상 획득 등의 푸시 알림을 전송합니다. |
