-
Notifications
You must be signed in to change notification settings - Fork 0
공유자전거 서비스 설계 ‐ 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
- API Gateway
- 모든 클라이언트 요청의 진입점
- 인증/인가 처리
- 요청 라우팅
- 속도 제한 및 보안 정책 적용
- MQTT Broker
- 자전거와 서버 간 실시간 통신 처리
- 자전거 상태 업데이트 수신
- 잠금/해제 명령 전송
- 배터리 상태 모니터링
- 인증 서비스 (AuthService)
@Service
public class AuthService {
// OAuth2 기반 외부 인증
// JWT 토큰 발급 및 검증
// 사용자 세션 관리
}
- 사용자 서비스 (UserService)
@Service
public class UserService {
// 회원 가입/수정/탈퇴
// 프로필 관리
// 결제수단 등록/관리
}
- 자전거 서비스 (BikeService)
@Service
public class BikeService {
// 자전거 상태 관리
// 잠금/해제 제어
// QR 코드 인증
// 배터리 상태 관리
}
- 스테이션 서비스 (StationService)
@Service
public class StationService {
// 고정/임시 스테이션 관리
// 스테이션별 자전거 현황 관리
// 위치 기반 스테이션 검색
}
- 대여 서비스 (RentalService)
@Service
public class RentalService {
// 대여/반납 처리
// 일시정지 관리
// 요금 계산
// 임시 스테이션 대여 처리
}
- 결제 서비스 (PaymentService)
@Service
public class PaymentService {
// 결제 처리
// 요금 정산
// 결제 내역 관리
}
- 위치 서비스 (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
}
주요 API 엔드포인트:
- 인증/사용자 관련
POST /api/v1/auth/register
POST /api/v1/auth/login
POST /api/v1/auth/refresh-token
POST /api/v1/users/payment-methods
- 자전거/스테이션 관련
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
- 결제 관련
POST /api/v1/payments
GET /api/v1/payments/history
POST /api/v1/payments/methods
주요 구현 고려사항:
- 보안
- OAuth2 기반 인증
- JWT를 이용한 토큰 관리
- SSL/TLS 암호화
- API 요청 검증
- 확장성
- 마이크로서비스 아키텍처 적용
- 서비스간 느슨한 결합
- 메시지 큐를 통한 비동기 처리
- 안정성
- 서비스 장애 대응
- 데이터 백업 및 복구
- 모니터링 및 로깅
- 성능
- 캐시 적용 (Redis)
- 데이터베이스 인덱싱
- 커넥션 풀 관리
추천 기술 스택
- Backend Framework: Spring Boot
- Database: PostgreSQL
- Cache: Redis
- Message Broker: RabbitMQ (MQTT)
- API Documentation: Swagger
- Monitoring: Prometheus + Grafana
- Logging: ELK Stack
🍎 말고 🍅