Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

Β 

History

299 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸš€ Quick Deliver - 배달 μ΅œμ ν™” μ‹œμŠ€ν…œ

배달앱 νšŒμ‚¬ 포트폴리였용 MVP ν”„λ‘œμ νŠΈμž…λ‹ˆλ‹€. λΌμ΄λ”μ˜ 효율적인 배솑과 κ΄€μ œμ„Όν„°μ˜ 배솑 관리λ₯Ό μ§€μ›ν•˜λŠ” λ°±μ—”λ“œ APIλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

πŸ“‹ ν”„λ‘œμ νŠΈ κ°œμš”

핡심 κΈ°λŠ₯

  1. JWT 기반 인증 μ‹œμŠ€ν…œ πŸ”

    • νšŒμ›κ°€μž… 및 둜그인
    • JWT 토큰 기반 인증
    • μ—­ν•  기반 μ ‘κ·Ό μ œμ–΄ (ADMIN, BACKOFFICE, RIDER, CUSTOMER)
    • BCrypt λΉ„λ°€λ²ˆν˜Έ μ•”ν˜Έν™”
    • Stateless μ„Έμ…˜ 관리
  2. 라이더 λͺ¨λ°”일 μ•± API πŸ“±

    • 라이더 등둝 및 관리
    • μ‹€μ‹œκ°„ μœ„μΉ˜ 좔적
    • 배솑 ν˜„ν™© 관리
    • 근무 μ‹œκ°„ 관리 (좜/퇴근)
    • 개인 λŒ€μ‹œλ³΄λ“œ
  3. 배솑 관리 API πŸ“¦

    • 배솑 생성 및 μžλ™ λ°°μ •
    • μ‹€μ‹œκ°„ 배솑 좔적
    • 배솑 μƒνƒœ μ—…λ°μ΄νŠΈ
    • 배솑 이λ ₯ 관리
    • 배솑 평가 μ‹œμŠ€ν…œ
  4. μ‹€μ‹œκ°„ 톡신 (WebSocket) πŸ“‘

    • STOMP ν”„λ‘œν† μ½œ 기반 μ‹€μ‹œκ°„ λ©”μ‹œμ§•
    • 라이더 μœ„μΉ˜ μ‹€μ‹œκ°„ λΈŒλ‘œλ“œμΊμŠ€νŠΈ
    • 배솑 μƒνƒœ μ‹€μ‹œκ°„ μ—…λ°μ΄νŠΈ
    • 1:1 개인 λ©”μ‹œμ§•
    • μ±„νŒ… 및 κΈ΄κΈ‰ μ•Œλ¦Ό
  5. 데이터 뢄석 및 μ΅œμ ν™” πŸ“Š

    • 배솑망 νš¨μœ¨μ„± 뢄석
    • 라이더 μ„±κ³Ό 뢄석
    • μˆ˜μš” 예츑
    • 경둜 μ΅œμ ν™”
    • μ‹€μ‹œκ°„ λͺ¨λ‹ˆν„°λ§

πŸ› οΈ 기술 μŠ€νƒ

  • Backend: Spring Boot 3.5.7
  • Database: H2 (개발), PostgreSQL (ν”„λ‘œλ•μ…˜)
  • Security: Spring Security 6.x + JWT (jjwt 0.11.5)
  • Real-time: WebSocket + STOMP + SockJS
  • Documentation: SpringDoc OpenAPI 3.0 (Swagger UI)
  • Monitoring: Spring Boot Actuator + Prometheus
  • Build Tool: Gradle 8.x
  • Java Version: 17
  • Others: Lombok, MapStruct, Validation

πŸ—‚οΈ ν”„λ‘œμ νŠΈ ꡬ쑰

quick-deliver/
β”œβ”€β”€ src/main/java/com/delivery/quickdeliver/
β”‚   β”œβ”€β”€ config/              # μ„€μ • 클래슀
β”‚   β”‚   β”œβ”€β”€ DataLoader.java
β”‚   β”‚   β”œβ”€β”€ SecurityConfig.java
β”‚   β”‚   β”œβ”€β”€ SwaggerConfig.java
β”‚   β”‚   β”œβ”€β”€ WebConfig.java
β”‚   β”‚   β”œβ”€β”€ WebSocketConfig.java
β”‚   β”‚   └── WebSocketEventListener.java
β”‚   β”œβ”€β”€ controller/          # REST API 컨트둀러
β”‚   β”‚   β”œβ”€β”€ AuthController.java
β”‚   β”‚   β”œβ”€β”€ RiderController.java
β”‚   β”‚   β”œβ”€β”€ DeliveryController.java
β”‚   β”‚   └── WebSocketController.java
β”‚   β”œβ”€β”€ domain/
β”‚   β”‚   β”œβ”€β”€ entity/          # JPA μ—”ν‹°ν‹°
β”‚   β”‚   β”‚   β”œβ”€β”€ User.java
β”‚   β”‚   β”‚   β”œβ”€β”€ Rider.java
β”‚   β”‚   β”‚   β”œβ”€β”€ Delivery.java
β”‚   β”‚   β”‚   β”œβ”€β”€ DeliveryHistory.java
β”‚   β”‚   β”‚   β”œβ”€β”€ RiderPerformance.java
β”‚   β”‚   β”‚   β”œβ”€β”€ Merchant.java
β”‚   β”‚   β”‚   └── Address.java
β”‚   β”‚   └── enums/           # Enum νƒ€μž…
β”‚   β”‚       β”œβ”€β”€ UserRole.java
β”‚   β”‚       β”œβ”€β”€ DeliveryStatus.java
β”‚   β”‚       β”œβ”€β”€ RiderStatus.java
β”‚   β”‚       β”œβ”€β”€ Priority.java
β”‚   β”‚       └── VehicleType.java
β”‚   β”œβ”€β”€ dto/
β”‚   β”‚   β”œβ”€β”€ request/         # μš”μ²­ DTO
β”‚   β”‚   β”‚   β”œβ”€β”€ LoginRequest.java
β”‚   β”‚   β”‚   β”œβ”€β”€ SignupRequest.java
β”‚   β”‚   β”‚   β”œβ”€β”€ RiderRegisterRequest.java
β”‚   β”‚   β”‚   β”œβ”€β”€ DeliveryCreateRequest.java
β”‚   β”‚   β”‚   └── DeliveryStatusUpdateRequest.java
β”‚   β”‚   └── response/        # 응닡 DTO
β”‚   β”‚       β”œβ”€β”€ JwtResponse.java
β”‚   β”‚       └── RiderResponse.java
β”‚   β”œβ”€β”€ exception/           # μ˜ˆμ™Έ 처리
β”‚   β”‚   β”œβ”€β”€ GlobalExceptionHandler.java
β”‚   β”‚   β”œβ”€β”€ ResourceNotFoundException.java
β”‚   β”‚   β”œβ”€β”€ DuplicateResourceException.java
β”‚   β”‚   └── InvalidRequestException.java
β”‚   β”œβ”€β”€ repository/          # JPA Repository
β”‚   β”‚   β”œβ”€β”€ UserRepository.java
β”‚   β”‚   β”œβ”€β”€ RiderRepository.java
β”‚   β”‚   └── DeliveryRepository.java
β”‚   β”œβ”€β”€ security/            # λ³΄μ•ˆ κ΄€λ ¨
β”‚   β”‚   β”œβ”€β”€ JwtTokenProvider.java
β”‚   β”‚   β”œβ”€β”€ JwtAuthenticationFilter.java
β”‚   β”‚   β”œβ”€β”€ CustomUserDetailsService.java
β”‚   β”‚   └── JwtAuthenticationEntryPoint.java
β”‚   └── service/             # λΉ„μ¦ˆλ‹ˆμŠ€ 둜직
β”‚       β”œβ”€β”€ RiderService.java
β”‚       β”œβ”€β”€ DeliveryService.java
β”‚       β”œβ”€β”€ AnalyticsService.java
β”‚       β”œβ”€β”€ BackOfficeService.java
β”‚       β”œβ”€β”€ RouteOptimizationService.java
β”‚       β”œβ”€β”€ NotificationService.java
β”‚       └── WebSocketService.java
└── src/main/resources/
    β”œβ”€β”€ application.yml
    └── static/
        └── websocket-test.html

πŸš€ μ‹œμž‘ν•˜κΈ°

사전 μš”κ΅¬μ‚¬ν•­

  • Java 17 이상
  • Gradle 8.x

μ‹€ν–‰ 방법

  1. ν”„λ‘œμ νŠΈ 클둠
git clone [repository-url]
cd quick-deliver
  1. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰
./gradlew bootRun
  1. H2 μ½˜μ†” 접속 (개발용)
URL: http://localhost:8080/h2-console
JDBC URL: jdbc:h2:mem:testdb
Username: sa
Password: (빈 κ°’)
  1. Swagger UI 접속
http://localhost:8080/swagger-ui.html
  1. WebSocket ν…ŒμŠ€νŠΈ νŽ˜μ΄μ§€
http://localhost:8080/websocket-test.html

πŸ”‘ ν…ŒμŠ€νŠΈ 계정

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹œμž‘ μ‹œ μžλ™μœΌλ‘œ μƒμ„±λ˜λŠ” ν…ŒμŠ€νŠΈ 계정:

Username Password Role μ„€λͺ…
admin admin123 ADMIN μ‹œμŠ€ν…œ κ΄€λ¦¬μž
backoffice backoffice123 BACKOFFICE κ΄€μ œ λ‹΄λ‹Ήμž
rider1 rider123 RIDER 라이더 김배달
rider2 rider123 RIDER 라이더 이퀡

πŸ“‘ μ£Όμš” API μ—”λ“œν¬μΈνŠΈ

인증 API

Method Endpoint Description Auth
POST /api/auth/signup νšŒμ›κ°€μž… Public
POST /api/auth/login 둜그인 (JWT λ°œκΈ‰) Public
GET /api/auth/me λ‚΄ 정보 쑰회 Required

라이더 API

Method Endpoint Description Auth
POST /api/riders/register 라이더 등둝 ADMIN, BACKOFFICE
POST /api/riders/{riderId}/shift/start 근무 μ‹œμž‘ RIDER
POST /api/riders/{riderId}/shift/end 근무 μ’…λ£Œ RIDER
PUT /api/riders/{riderId}/location μœ„μΉ˜ μ—…λ°μ΄νŠΈ RIDER
PUT /api/riders/{riderId}/status μƒνƒœ λ³€κ²½ RIDER
GET /api/riders/{riderId}/dashboard λŒ€μ‹œλ³΄λ“œ 쑰회 RIDER
GET /api/riders/{riderId}/deliveries λ‚΄ 배솑 λͺ©λ‘ RIDER
GET /api/riders/{riderId}/deliveries/active ν™œμ„± 배솑 쑰회 RIDER
GET /api/riders/available κ°€μš© 라이더 λͺ©λ‘ BACKOFFICE
GET /api/riders/active 근무쀑 라이더 λͺ©λ‘ BACKOFFICE

배솑 API

Method Endpoint Description Auth
POST /api/deliveries 배솑 생성 Authenticated
PUT /api/deliveries/{deliveryId}/status μƒνƒœ μ—…λ°μ΄νŠΈ RIDER
GET /api/deliveries/{deliveryId}/track 배솑 좔적 Authenticated
GET /api/deliveries/pending λŒ€κΈ° 배솑 λͺ©λ‘ BACKOFFICE
POST /api/deliveries/{deliveryId}/cancel 배솑 μ·¨μ†Œ BACKOFFICE
POST /api/deliveries/{deliveryId}/rating 배솑 평가 Authenticated

WebSocket μ—”λ“œν¬μΈνŠΈ

μ—°κ²° μ—”λ“œν¬μΈνŠΈ

ws://localhost:8080/ws

ꡬ독 (Subscribe) Topics

  • /topic/monitoring/riders - 라이더 μœ„μΉ˜ μ‹€μ‹œκ°„ μ—…λ°μ΄νŠΈ
  • /topic/monitoring/deliveries - 배솑 μƒνƒœ μ‹€μ‹œκ°„ μ—…λ°μ΄νŠΈ
  • /user/{riderId}/queue/connection - 개인 μ—°κ²° 확인
  • /user/{riderId}/queue/urgent - κΈ΄κΈ‰ μ•Œλ¦Ό
  • /user/{riderId}/queue/chat - μ±„νŒ… λ©”μ‹œμ§€

λ°œν–‰ (Publish) Destinations

  • /app/rider/location - 라이더 μœ„μΉ˜ 전솑
  • /app/delivery/status - 배솑 μƒνƒœ 전솑
  • /app/rider/connect - 라이더 μ—°κ²° 등둝
  • /app/admin/urgent - κΈ΄κΈ‰ λ©”μ‹œμ§€ 전솑
  • /app/chat/send - μ±„νŒ… λ©”μ‹œμ§€ 전솑

🎯 μ£Όμš” κΈ°λŠ₯ 상세

1. JWT 기반 인증 μ‹œμŠ€ν…œ πŸ”

λ³΄μ•ˆ κΈ°λŠ₯

  • JWT 토큰 기반 Stateless 인증
  • BCryptλ₯Ό μ‚¬μš©ν•œ λΉ„λ°€λ²ˆν˜Έ μ•”ν˜Έν™”
  • 토큰 만료 μ‹œκ°„ 관리 (24μ‹œκ°„)
  • μ—­ν•  기반 μ ‘κ·Ό μ œμ–΄ (RBAC)

μ‚¬μš© μ˜ˆμ‹œ

# 1. λ‘œκ·ΈμΈν•˜μ—¬ JWT 토큰 λ°œκΈ‰
curl -X POST http://localhost:8080/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"admin123"}'

# 2. λ°œκΈ‰λ°›μ€ ν† ν°μœΌλ‘œ API 호좜
curl -X GET http://localhost:8080/api/riders/available \
  -H "Authorization: Bearer {token}"

κΆŒν•œ ꡬ쑰

  • ADMIN: λͺ¨λ“  API μ ‘κ·Ό κ°€λŠ₯
  • BACKOFFICE: κ΄€μ œ 및 배솑 관리 API μ ‘κ·Ό
  • RIDER: 라이더 κ΄€λ ¨ API μ ‘κ·Ό
  • CUSTOMER: 고객 κ΄€λ ¨ API μ ‘κ·Ό (ν–₯ν›„ κ΅¬ν˜„)

2. μ‹€μ‹œκ°„ 톡신 (WebSocket) πŸ“‘

STOMP over WebSocket

  • SockJS Fallback μ§€μ›μœΌλ‘œ λΈŒλΌμš°μ € ν˜Έν™˜μ„± 확보
  • μ‹€μ‹œκ°„ μ–‘λ°©ν–₯ 톡신
  • ν† ν”½ 기반 λΈŒλ‘œλ“œμΊμŠ€νŒ…
  • 개인 λ©”μ‹œμ§€ 큐

μ‹€μ‹œκ°„ κΈ°λŠ₯

  • 라이더 μœ„μΉ˜ μžλ™ λΈŒλ‘œλ“œμΊμŠ€νŠΈ
  • 배솑 μƒνƒœ λ³€κ²½ μ¦‰μ‹œ μ•Œλ¦Ό
  • κ΄€μ œμ„Όν„° <-> 라이더 μ‹€μ‹œκ°„ μ±„νŒ…
  • κΈ΄κΈ‰ μ•Œλ¦Ό ν‘Έμ‹œ

WebSocket μ—°κ²° μ˜ˆμ‹œ

const socket = new SockJS('http://localhost:8080/ws');
const stompClient = Stomp.over(socket);

stompClient.connect({}, function(frame) {
    // 라이더 μœ„μΉ˜ ꡬ독
    stompClient.subscribe('/topic/monitoring/riders', function(message) {
        const location = JSON.parse(message.body);
        console.log('라이더 μœ„μΉ˜:', location);
    });
    
    // μœ„μΉ˜ 정보 전솑
    stompClient.send("/app/rider/location", {}, JSON.stringify({
        riderId: 'RDR-TEST001',
        latitude: 37.5665,
        longitude: 126.9780
    }));
});

3. μžλ™ 라이더 λ°°μ •

배솑 생성 μ‹œ λ‹€μŒ μš”μ†Œλ₯Ό κ³ λ €ν•˜μ—¬ 졜적의 라이더λ₯Ό μžλ™ λ°°μ •ν•©λ‹ˆλ‹€:

  • 라이더와 ν”½μ—… μœ„μΉ˜ κ°„ 거리
  • λΌμ΄λ”μ˜ ν˜„μž¬ μƒνƒœ (AVAILABLE)
  • μ°¨λŸ‰ νƒ€μž…λ³„ μ΅œλŒ€ 적재 무게
  • λΌμ΄λ”μ˜ 평균 평점

4. μ‹€μ‹œκ°„ μœ„μΉ˜ 좔적

  • λΌμ΄λ”μ˜ μœ„μΉ˜λ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ μ—…λ°μ΄νŠΈ
  • WebSocket을 톡해 κ΄€μ œμ„Όν„°μ— λΈŒλ‘œλ“œμΊμŠ€νŠΈ
  • 배솑 이λ ₯에 μœ„μΉ˜ 정보 μžλ™ 기둝

5. 배솑 μƒνƒœ 관리

배솑 μƒνƒœ 흐름:

PENDING β†’ ASSIGNED β†’ PICKING_UP β†’ IN_TRANSIT β†’ DELIVERED
                                              β†˜ CANCELLED

6. μ„±κ³Ό 뢄석

  • 라이더별 일일/μ£Όκ°„/μ›”κ°„ μ„±κ³Ό 뢄석
  • 배솑 νš¨μœ¨μ„± μ§€ν‘œ 계산
  • μ‹œκ°„λŒ€λ³„ μˆ˜μš” νŒ¨ν„΄ 뢄석
  • 예츑 뢄석 및 μ΅œμ ν™” μ œμ•ˆ

πŸ’Ύ 데이터 λͺ¨λΈ

μ£Όμš” μ—”ν‹°ν‹°

  • User: μ‹œμŠ€ν…œ μ‚¬μš©μž (인증, μ—­ν•  관리)
  • Rider: 라이더 정보, μœ„μΉ˜, μƒνƒœ, μ„±κ³Ό μ§€ν‘œ
  • Delivery: 배솑 정보, μ£Όμ†Œ, μƒνƒœ, 경둜
  • DeliveryHistory: 배솑 μƒνƒœ λ³€κ²½ 이λ ₯
  • RiderPerformance: 라이더 일일 μ„±κ³Ό 데이터
  • Merchant: 상점 정보

πŸ§ͺ ν…ŒμŠ€νŠΈ

ν…ŒμŠ€νŠΈ 데이터

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹œμž‘ μ‹œ μžλ™μœΌλ‘œ μƒμ„±λ˜λŠ” 데이터:

  • 4λͺ…μ˜ ν…ŒμŠ€νŠΈ μ‚¬μš©μž (admin, backoffice, rider1, rider2)
  • 3λͺ…μ˜ ν…ŒμŠ€νŠΈ 라이더
  • 2건의 ν…ŒμŠ€νŠΈ 배솑

WebSocket ν…ŒμŠ€νŠΈ

λΈŒλΌμš°μ €μ—μ„œ http://localhost:8080/websocket-test.html μ ‘μ†ν•˜μ—¬ μ‹€μ‹œκ°„ 톡신 ν…ŒμŠ€νŠΈ κ°€λŠ₯

API ν…ŒμŠ€νŠΈ

μƒμ„Έν•œ API μ‚¬μš© μ˜ˆμ œλŠ” λ‹€μŒ λ¬Έμ„œ μ°Έμ‘°:

  • API_EXAMPLES.md - 일반 API 예제
  • AUTH_API_EXAMPLES.md - 인증 API 예제

πŸ“Š λͺ¨λ‹ˆν„°λ§

Spring Boot Actuatorλ₯Ό ν†΅ν•œ ν—¬μŠ€ 체크 및 λ©”νŠΈλ¦­:

http://localhost:8080/actuator/health
http://localhost:8080/actuator/metrics
http://localhost:8080/actuator/prometheus

πŸ” λ³΄μ•ˆ

κ΅¬ν˜„λœ λ³΄μ•ˆ κΈ°λŠ₯

  • βœ… JWT 토큰 기반 Stateless 인증
  • βœ… BCrypt λΉ„λ°€λ²ˆν˜Έ μ•”ν˜Έν™” (강도 10)
  • βœ… μ—­ν•  기반 μ ‘κ·Ό μ œμ–΄ (RBAC)
  • βœ… CORS μ„€μ • (개발 ν™˜κ²½: λͺ¨λ“  좜처 ν—ˆμš©)
  • βœ… 인증 μ‹€νŒ¨ μ˜ˆμ™Έ 처리
  • βœ… Spring Security 6.x μ΅œμ‹  λ³΄μ•ˆ μ„€μ •

μ—”λ“œν¬μΈνŠΈ μ ‘κ·Ό κΆŒν•œ

μ—”λ“œν¬μΈνŠΈ κΆŒν•œ
/api/auth/** Public
/api/admin/** ADMIN
/api/backoffice/** ADMIN, BACKOFFICE
/api/riders/** ADMIN, BACKOFFICE, RIDER
/api/deliveries/** Authenticated
/ws/** Public
/swagger-ui/** Public
/h2-console/** Public (개발 ν™˜κ²½)

JWT 토큰 μ„€μ •

jwt:
  secret: [Application Secret Key]
  expiration: 86400000  # 24μ‹œκ°„ (λ°€λ¦¬μ΄ˆ)

🚧 개발 λ‘œλ“œλ§΅

βœ… Phase 1: κΈ°λ³Έ ꡬ쑰 및 도메인 λͺ¨λΈ (μ™„λ£Œ)

  • ν”„λ‘œμ νŠΈ 초기 μ„€μ •
  • 도메인 μ—”ν‹°ν‹° 섀계
  • Repository 계측 κ΅¬ν˜„
  • κΈ°λ³Έ API μ—”λ“œν¬μΈνŠΈ

βœ… Phase 2: 핡심 κΈ°λŠ₯ κ΅¬ν˜„ (μ™„λ£Œ)

  • 라이더 관리 API
  • 배솑 관리 API
  • μžλ™ λ°°μ • 둜직
  • μ‹€μ‹œκ°„ μœ„μΉ˜ 좔적
  • μ„±κ³Ό 뢄석 κΈ°λŠ₯

βœ… Phase 3: Security & WebSocket (μ™„λ£Œ)

  • JWT 인증 μ‹œμŠ€ν…œ
  • μ—­ν•  기반 μ ‘κ·Ό μ œμ–΄
  • WebSocket μ‹€μ‹œκ°„ 톡신
  • STOMP ν”„λ‘œν† μ½œ κ΅¬ν˜„
  • μ‹€μ‹œκ°„ μœ„μΉ˜/μƒνƒœ λΈŒλ‘œλ“œμΊμŠ€νŒ…

🚧 Phase 4: BackOffice API (μ§„ν–‰ μ˜ˆμ •)

  • 전체 λŒ€μ‹œλ³΄λ“œ API
  • 라이더 관리 API
  • 배솑 관리 API
  • 톡계 및 리포트 API

πŸ“‹ Phase 5: Analytics & Optimization (κ³„νš)

  • μ‹€μ‹œκ°„ 뢄석 λŒ€μ‹œλ³΄λ“œ
  • 예츑 뢄석 μ•Œκ³ λ¦¬μ¦˜
  • 경둜 μ΅œμ ν™” κ°œμ„ 
  • μ„±κ³Ό 리포트 μžλ™ν™”

πŸ§ͺ Phase 6: Testing & Deployment (κ³„νš)

  • λ‹¨μœ„ ν…ŒμŠ€νŠΈ μž‘μ„±
  • 톡합 ν…ŒμŠ€νŠΈ μž‘μ„±
  • E2E ν…ŒμŠ€νŠΈ
  • PostgreSQL ν”„λ‘œλ•μ…˜ μ„€μ •
  • Docker μ»¨ν…Œμ΄λ„ˆν™”
  • CI/CD νŒŒμ΄ν”„λΌμΈ ꡬ좕

πŸ“ API λ¬Έμ„œ

Swagger UI

μƒμ„Έν•œ API λ¬Έμ„œλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ ν›„ Swagger UIμ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€:

http://localhost:8080/swagger-ui.html

μΆ”κ°€ λ¬Έμ„œ

  • PHASE3_COMPLETE_SUMMARY.md - Phase 3 κ΅¬ν˜„ μ™„λ£Œ μš”μ•½
  • PHASE3_SECURITY_WEBSOCKET.md - Security & WebSocket 상세 κ°€μ΄λ“œ
  • API_EXAMPLES.md - REST API μ‚¬μš© 예제
  • AUTH_API_EXAMPLES.md - 인증 API μ‚¬μš© 예제
  • IMPLEMENTATION_SUMMARY.md - 전체 κ΅¬ν˜„ μš”μ•½

πŸ“Š μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Client App     β”‚
β”‚ (Web/Mobile)     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚
         β”‚ HTTP REST API
         β”‚ + JWT Token
         β”‚ WebSocket/STOMP
         β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Spring Security Filter     β”‚
β”‚   - JwtAuthenticationFilter  β”‚
β”‚   - CORS Filter              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Controllers                β”‚
β”‚   - AuthController           β”‚
β”‚   - RiderController          β”‚
β”‚   - DeliveryController       β”‚
β”‚   - WebSocketController      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   WebSocket Message Broker   β”‚
β”‚   - STOMP Protocol           β”‚
β”‚   - SockJS Fallback          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Services                   β”‚
β”‚   - RiderService             β”‚
β”‚   - DeliveryService          β”‚
β”‚   - WebSocketService         β”‚
β”‚   - AnalyticsService         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Repositories (JPA)         β”‚
β”‚   - UserRepository           β”‚
β”‚   - RiderRepository          β”‚
β”‚   - DeliveryRepository       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Database (H2)   β”‚
β”‚   - users                    β”‚
β”‚   - riders                   β”‚
β”‚   - deliveries               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸŽ“ ν•™μŠ΅ 포인트

이 ν”„λ‘œμ νŠΈλ₯Ό 톡해 λ‹€μŒ κΈ°μˆ λ“€μ„ ν•™μŠ΅ν•˜κ³  μ μš©ν–ˆμŠ΅λ‹ˆλ‹€:

Backend 개발

  • Spring Boot 3.x μ΅œμ‹  κΈ°λŠ₯ ν™œμš©
  • Spring Security 6.x λ³΄μ•ˆ μ„€μ •
  • JWT 기반 Stateless 인증 κ΅¬ν˜„
  • WebSocket + STOMP μ‹€μ‹œκ°„ 톡신
  • RESTful API 섀계 및 κ΅¬ν˜„
  • JPA/Hibernateλ₯Ό ν™œμš©ν•œ λ°μ΄ν„°λ² μ΄μŠ€ 섀계

싀무 νŒ¨ν„΄

  • 계측화 μ•„ν‚€ν…μ²˜ (Controller-Service-Repository)
  • DTO νŒ¨ν„΄μ„ ν™œμš©ν•œ 계측 뢄리
  • μ „μ—­ μ˜ˆμ™Έ 처리 (Global Exception Handler)
  • μ—­ν•  기반 μ ‘κ·Ό μ œμ–΄ (RBAC)
  • μ‹€μ‹œκ°„ 이벀트 기반 μ•„ν‚€ν…μ²˜

λ¬Έμ„œν™” 및 ν…ŒμŠ€νŠΈ

  • OpenAPI 3.0 (Swagger) λ¬Έμ„œν™”
  • μƒμ„Έν•œ 기술 λ¬Έμ„œ μž‘μ„±
  • ν…ŒμŠ€νŠΈ κ°€λŠ₯ν•œ ꡬ쑰 섀계

🀝 κΈ°μ—¬

이 ν”„λ‘œμ νŠΈλŠ” 포트폴리였 λͺ©μ μœΌλ‘œ μ œμž‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

κ°œμ„  μ‚¬ν•­μ΄λ‚˜ 버그λ₯Ό λ°œκ²¬ν•˜μ‹œλ©΄ 이슈λ₯Ό 등둝해 μ£Όμ„Έμš”.

πŸ“„ λΌμ΄μ„ μŠ€

이 ν”„λ‘œμ νŠΈλŠ” Apache License 2.0 λΌμ΄μ„ μŠ€ ν•˜μ— λ°°ν¬λ©λ‹ˆλ‹€.


πŸ‘¨β€πŸ’» 개발자 정보

개발자: readra
이메일: yong9976@naver.com
개발 κΈ°κ°„: 2025.11
ν”„λ‘œμ νŠΈ μƒνƒœ: Phase 3 μ™„λ£Œ (Security & WebSocket)

기술 μŠ€νƒ μš”μ•½

  • Backend: Spring Boot 3.5.7, Spring Security 6.x, JWT
  • Database: H2
  • Real-time: WebSocket, STOMP, SockJS
  • Monitoring: Actuator, Prometheus
  • Documentation: Swagger/OpenAPI 3.0

μ£Όμš” μ„±κ³Ό

  • βœ… JWT 기반 인증 μ‹œμŠ€ν…œ κ΅¬ν˜„
  • βœ… μ—­ν•  기반 μ ‘κ·Ό μ œμ–΄ (RBAC) κ΅¬ν˜„
  • βœ… WebSocket μ‹€μ‹œκ°„ μ–‘λ°©ν–₯ 톡신 κ΅¬ν˜„
  • βœ… μžλ™ 라이더 λ°°μ • μ•Œκ³ λ¦¬μ¦˜ κ΅¬ν˜„
  • βœ… RESTful API 섀계 및 19개 μ—”λ“œν¬μΈνŠΈ κ΅¬ν˜„
  • βœ… μƒμ„Έν•œ 기술 λ¬Έμ„œ μž‘μ„±

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages