Skip to content

공유자전거 서비스 설계 ‐ Real

LeeJongSeon edited this page Oct 22, 2024 · 1 revision
graph TB
    subgraph "Client Layer"
        iOS["iOS App"]
        Bike["자전거(MQTT Client)"]
    end

    subgraph "API Gateway Layer"
        Gateway["API Gateway"]
        MQTTBroker["MQTT Broker"]
    end

    subgraph "Service Layer"
        AuthService["인증 서비스"]
        UserService["사용자 서비스"]
        BikeService["자전거 서비스"]
        StationService["스테이션 서비스"]
        RentalService["대여 서비스"]
        PaymentService["결제 서비스"]
        LocationService["위치 서비스"]
    end

    subgraph "Database Layer"
        UserDB[(사용자 DB)]
        BikeDB[(자전거 DB)]
        StationDB[(스테이션 DB)]
        RentalDB[(대여 기록 DB)]
        PaymentDB[(결제 정보 DB)]
    end

    iOS --> Gateway
    Bike --> MQTTBroker
    Gateway --> AuthService
    Gateway --> UserService
    Gateway --> BikeService
    Gateway --> StationService
    Gateway --> RentalService
    Gateway --> PaymentService
    Gateway --> LocationService
    MQTTBroker --> BikeService

    AuthService --> UserDB
    UserService --> UserDB
    BikeService --> BikeDB
    StationService --> StationDB
    RentalService --> RentalDB
    PaymentService --> PaymentDB
    LocationService --> StationDB

Loading
  1. API Gateway
  • 모든 클라이언트 요청의 진입점
  • 인증/인가 처리
  • 요청 라우팅
  • 속도 제한 및 보안 정책 적용
  1. MQTT Broker
  • 자전거와 서버 간 실시간 통신 처리
  • 자전거 상태 업데이트 수신
  • 잠금/해제 명령 전송
  • 배터리 상태 모니터링
  1. 인증 서비스 (AuthService)
@Service
public class AuthService {
    // OAuth2 기반 외부 인증
    // JWT 토큰 발급 및 검증
    // 사용자 세션 관리
}
  1. 사용자 서비스 (UserService)
@Service
public class UserService {
    // 회원 가입/수정/탈퇴
    // 프로필 관리
    // 결제수단 등록/관리
}
  1. 자전거 서비스 (BikeService)
@Service
public class BikeService {
    // 자전거 상태 관리
    // 잠금/해제 제어
    // QR 코드 인증
    // 배터리 상태 관리
}
  1. 스테이션 서비스 (StationService)
@Service
public class StationService {
    // 고정/임시 스테이션 관리
    // 스테이션별 자전거 현황 관리
    // 위치 기반 스테이션 검색
}
  1. 대여 서비스 (RentalService)
@Service
public class RentalService {
    // 대여/반납 처리
    // 일시정지 관리
    // 요금 계산
    // 임시 스테이션 대여 처리
}
  1. 결제 서비스 (PaymentService)
@Service
public class PaymentService {
    // 결제 처리
    // 요금 정산
    // 결제 내역 관리
}
  1. 위치 서비스 (LocationService)
@Service
public class LocationService {
    // 실시간 위치 추적
    // 지오펜싱
    // 거리 계산
}

데이터베이스 스키마 설계:

erDiagram
    USERS ||--o{ RENTALS : has
    USERS {
        long id
        string email
        string password
        string name
        string phone
        datetime created_at
    }
    
    PAYMENT_METHODS ||--o{ USERS : has
    PAYMENT_METHODS {
        long id
        long user_id
        string card_number
        string card_type
        boolean is_default
    }
    
    BIKES ||--o{ RENTALS : has
    BIKES {
        long id
        string qr_code
        int battery_level
        string status
        long current_station_id
        datetime last_maintained
    }
    
    STATIONS ||--o{ BIKES : contains
    STATIONS {
        long id
        string name
        double latitude
        double longitude
        boolean is_temporary
        int capacity
        datetime created_at
    }
    
    RENTALS {
        long id
        long user_id
        long bike_id
        long start_station_id
        long end_station_id
        datetime start_time
        datetime end_time
        int total_amount
        string status
    }
    
    PAYMENTS ||--o{ RENTALS : has
    PAYMENTS {
        long id
        long rental_id
        long user_id
        int amount
        string status
        datetime paid_at
    }

Loading

주요 API 엔드포인트:

  1. 인증/사용자 관련
POST /api/v1/auth/register
POST /api/v1/auth/login
POST /api/v1/auth/refresh-token
POST /api/v1/users/payment-methods
  1. 자전거/스테이션 관련
GET /api/v1/stations
GET /api/v1/stations/{id}/bikes
GET /api/v1/bikes/{id}/status
POST /api/v1/bikes/{id}/rent
POST /api/v1/bikes/{id}/return
POST /api/v1/bikes/{id}/lock
POST /api/v1/bikes/{id}/unlock
  1. 결제 관련
POST /api/v1/payments
GET /api/v1/payments/history
POST /api/v1/payments/methods

주요 구현 고려사항:

  1. 보안
  • OAuth2 기반 인증
  • JWT를 이용한 토큰 관리
  • SSL/TLS 암호화
  • API 요청 검증
  1. 확장성
  • 마이크로서비스 아키텍처 적용
  • 서비스간 느슨한 결합
  • 메시지 큐를 통한 비동기 처리
  1. 안정성
  • 서비스 장애 대응
  • 데이터 백업 및 복구
  • 모니터링 및 로깅
  1. 성능
  • 캐시 적용 (Redis)
  • 데이터베이스 인덱싱
  • 커넥션 풀 관리

추천 기술 스택

  1. Backend Framework: Spring Boot
  2. Database: PostgreSQL
  3. Cache: Redis
  4. Message Broker: RabbitMQ (MQTT)
  5. API Documentation: Swagger
  6. Monitoring: Prometheus + Grafana
  7. Logging: ELK Stack