Skip to content

Latest commit

ย 

History

333 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿš— Realโ€‘time GPS Tracking System (KUNI GPSTracker)

์‹ค์‹œ๊ฐ„ ์ฐจ๋Ÿ‰ ์œ„์น˜ ์ถ”์ /๋ชจ๋‹ˆํ„ฐ๋ง ์„œ๋น„์Šค. ์—๋ฎฌ๋ ˆ์ดํ„ฐโ†’Kafkaโ†’DBโ†’๋ฐฑ์—”๋“œโ†’ํ”„๋ŸฐํŠธ ๋Œ€์‹œ๋ณด๋“œ๊นŒ์ง€ ์—”๋“œํˆฌ์—”๋“œ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


1) ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

  • ๋ชฉํ‘œ: ๋Œ€๋Ÿ‰ ์ฐจ๋Ÿ‰์˜ ์œ„์น˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ˆ˜์ง‘/์ฒ˜๋ฆฌ/์‹œ๊ฐํ™”
  • ํ•ต์‹ฌ ๊ธฐ๋Šฅ
    • ์‹ค์‹œ๊ฐ„ GPS ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ (Kafka ๊ธฐ๋ฐ˜)
    • ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์ฐจ๋Ÿ‰ ํ˜„ํ™ฉ/์ฃผํ–‰ ์ด๋ ฅ ํ™•์ธ
    • ์ตœ๊ทผ 2๋ถ„ ๊ธฐ์ค€ ์ƒํƒœ ํŒ์ • (์ฃผํ–‰/์ •์ง€/์˜คํ”„๋ผ์ธ)
  • ํŠน์ง•
    • ๋ชจ๋†€๋ฆฌ์‹์ด ์•„๋‹Œ Main/Consumer/Emulator/Support ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ
    • AWS ECS + ALB + S3/CloudFront + RDS + ECR ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ
    • Terraform์œผ๋กœ ์ธํ”„๋ผ IaC, Jenkins๋กœ CI/CD

2) ๊ธฐ์ˆ  ์Šคํƒ

  • Backend: Java 17, Spring Boot 3, Spring Data JPA, WebFlux, Spring Security, JWT
  • Messaging: Apache Kafka (Zookeeper)
  • DB/Cache: MySQL (RDS)
  • Frontend: React , TypeScript
  • Infra: Terraform, AWS (ECS, ALB, S3/CloudFront, ECR, RDS, Route53, CloudWatch), Docker, Docker Compose
  • CI/CD: Jenkins (๋ฉ€ํ‹ฐ๋ธŒ๋žœ์น˜/ํŒŒ์ดํ”„๋ผ์ธ)

Java Spring Boot Kafka MySQL React AWS


3) ์ €์žฅ์†Œ ๊ตฌ์กฐ (Monorepo)

KUNI_GPSTracker/
โ”œโ”€ BackendServer/
โ”‚  โ”œโ”€ consumer/          # Kafka consumer
โ”‚  โ”œโ”€ emulator/          # ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ๋ฐ›๋Š” ์„œ๋ฒ„
โ”‚  โ”œโ”€ server/            # ๊ด€์ œ ์„œ๋ฒ„ api
โ”‚  โ””โ”€ support/           
|     โ”œโ”€ common/         # Util
|     โ”œโ”€ business/       # Record ๊ด€๋ จ DTO
|     โ”œโ”€ database/       # DB
|     โ”œโ”€ global/         # swagger, exception, kafka ๋ชจ๋ธ
โ”‚     โ””โ”€ log/            # log ๊ด€๋ จ ์„ค์ •
โ”œโ”€ Emulator/             # ์• ๋ฎฌ๋ ˆ์ดํ„ฐ ๊ธฐ๊ธฐ
โ”œโ”€ infra/
โ”‚  โ”œโ”€ terraform/         # AWS IaC
โ”‚  |โ”€ Jenkinsfile        # CI/CD Jenkins ์„ค์ • ํŒŒ์ผ
|  โ””โ”€ Dockerfile         # ์„œ๋ฒ„ ์ด๋ฏธ์ง€ ๋„์ปค ํŒŒ์ผ
โ””โ”€ docs/
   โ””โ”€ images/            # ์•„ํ‚คํ…์ฒ˜/์Šคํฌ๋ฆฐ์ƒท/GIF

4) ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜

alt text


5) ์„œ๋น„์Šค ํ”Œ๋กœ์šฐ ์ฐจํŠธ (์ฒ˜๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ)

flowchart TD
    %% ------------------ ์‚ฌ์šฉ์ž ์˜์—ญ ------------------
    subgraph USER[์‚ฌ์šฉ์ž]
        direction TB
        A1["๐Ÿ‘ค ๋ Œํ„ฐ์นด ์—…์ฒด ๊ด€๋ฆฌ์ž"]
        A2["๐Ÿ“ ์ฐจ๋Ÿ‰ ๋“ฑ๋ก/์‚ญ์ œ"]
        A3["๐Ÿง‘โ€๐Ÿ’ผ ์šด์ „์ž ์ •๋ณด ์ž…๋ ฅ"]
    end

    %% ------------------ Emulator ์„œ๋ฒ„ ------------------
    subgraph EMULATOR_SERVER[Emulator ์„œ๋ฒ„]
        direction TB
        B1["๐Ÿ› ๏ธ Emulator API"]
        B2["/api/emulator/token - ํ† ํฐ ๋ฐœ๊ธ‰"]
        B3["/api/emulator/on - ์‹œ๋™ ON"]
        B4["/api/emulator/off - ์‹œ๋™ OFF"]
        B5["/api/emulator/gps - GPS ์ฃผ๊ธฐ์ •๋ณด ์ €์žฅ (CSV ์ˆ˜์‹ )"]
        B6["Kafka Producer"]
    end

    %% ------------------ Kafka & DB ------------------
    subgraph KAFKA_DB[Kafka & DB]
        direction TB
        C1["๐Ÿงฑ Kafka Broker (1๋ถ„๋‹น 15,000๊ฑด)"]
        C2["๐Ÿ“ฅ Kafka Consumer"]
        C3["๐Ÿ—„๏ธ MySQL RDS"]
        C4["๐Ÿ“Œ Vehicle"]
        C5["๐Ÿ“ Device"]
        C6["๐Ÿงพ Record"]
        C7["๐Ÿ“ก GpsRecord"]
    end

    %% ------------------ BackendServer ------------------
    subgraph BACKEND[BackendServer API]
        direction TB
        D1["๐Ÿ”ง BackendServer API"]
        D2["/vehicles - ์ฐจ๋Ÿ‰ ๋ชฉ๋ก"]
        D3["/location - ์‹ค์‹œ๊ฐ„ ์œ„์น˜"]
        D4["/dashboard - ์šดํ–‰ ํ†ต๊ณ„"]
        D5["/api/emulator - Emulator ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ"]
    end

    %% ------------------ React Frontend ------------------
    subgraph FRONTEND[React ๋Œ€์‹œ๋ณด๋“œ]
        direction TB
        E1["๐Ÿ’ป React ๋Œ€์‹œ๋ณด๋“œ"]
        E2["๐Ÿ” ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž…"]
        E3["๐Ÿ“Š ์ „์ฒด ์ฐจ๋Ÿ‰ ํ˜„ํ™ฉ"]
        E4["๐Ÿ—บ๏ธ ์‹ค์‹œ๊ฐ„ ์œ„์น˜ ์ง€๋„"]
        E5["๐Ÿงพ ์šดํ–‰ ์ผ์ง€ ํŽ˜์ด์ง€"]
        E6["๐Ÿ” ์ฐจ๋Ÿ‰ ๊ด€๋ฆฌ ํŽ˜์ด์ง€"]
        E7["๐Ÿ“Œ ๊ฐœ๋ณ„ ์ฐจ๋Ÿ‰ ์ƒ์„ธ ํŽ˜์ด์ง€"]
        E8["โฑ๏ธ 15์ดˆ ๊ฐ„๊ฒฉ ๋ฐ์ดํ„ฐ fetch"]
    end

    %% ------------------ ์ธํ”„๋ผ ------------------
    subgraph INFRA[์ธํ”„๋ผ ๊ตฌ์„ฑ]
        direction TB
        F1["โ˜๏ธ AWS ECS + ALB"]
        F2["๐Ÿ—‚๏ธ S3 + CloudFront"]
        F3["๐Ÿณ ECR + RDS"]
        F4["๐Ÿ› ๏ธ Terraform + Jenkins"]
        F5["๐Ÿ“ˆ CloudWatch Logs"]
    end

    %% ------------------ ์—ฐ๊ฒฐ ------------------
    %% ์‚ฌ์šฉ์ž โ†’ BackendServer
    A1 --> A2
    A2 --> D2
    A3 --> D2

    %% Emulator ์„œ๋ฒ„ API
    B1 --> B2
    B1 --> B3
    B1 --> B4
    B1 --> B5
    B5 --> B6

    %% Kafka โ†’ DB
    B6 --> C1
    C1 --> C2
    C2 --> C7

    %% DB ๊ด€๊ณ„
    C4 --> C5
    C4 --> C6
    C4 --> C7
    C6 --> C7

    %% BackendServer API โ†” DB
    D1 --> D2
    D1 --> D3
    D1 --> D4
    D1 --> D5

    D2 --> C4
    D2 --> C5
    D3 --> C7
    D4 --> C4
    D4 --> C6
    D4 --> C7
    D5 --> C7

    %% React Frontend โ†” BackendServer API
    E2 --> D1
    E6 --> D2
    E5 --> D4
    E4 --> D3
    E3 --> D4
    E5 --> E7
    E8 --> D2
    E8 --> D3
    E8 --> D4

    %% ์ธํ”„๋ผ ์—ฐ๊ฒฐ
    F1 --> D1
    F2 --> E2
    F3 --> C3
    F4 --> F1
    F5 --> F1



Loading

6) ์‹ค์ œ ํ™”๋ฉด (GIF/์Šคํฌ๋ฆฐ์ƒท)

  • ๋Œ€์‹œ๋ณด๋“œ

    Dashboard

  • ์ฐจ๋Ÿ‰ ์‹ค์‹œ๊ฐ„

    Vehicle Detail

  • ์ฐจ๋Ÿ‰ ๊ด€๋ฆฌ

    Alert

  • ์šดํ–‰ ์ผ์ง€

    Alert

  • ์• ๋ฎฌ๋ ˆ์ดํ„ฐ

    Emulator

  • AWS Cloud Watch Log

    Emulator


7) ๋น ๋ฅธ ์‹œ์ž‘ (๋กœ์ปฌ)

7-1. ์‚ฌ์ „ ์š”๊ตฌ์‚ฌํ•ญ

  • JDK 17
  • MYSQL 8.0
  • Docker / Docker Compose

7-2. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํŒŒ์ผ ์ถ”๊ฐ€

# BackendServer ๊ณตํ†ต (๋ฃจํŠธ/BackendServer/.env.properties)
DB_HOST=localhost
DB_PORT=3306
DB_NAME=gpsTracker
DB_USERNAME=root
DB_PASSWORD=password
KAFKA_BOOTSTRAP_SERVERS=localhost:9092
jwt.secret=very-secret-key-very-secret-key-123456
jwt.secret-base64=SFVGjDe/OwyN46p1euKSNQvZrpF14kwEKI9kUJ50BvI=

# Emulator์šฉ (๋ฃจํŠธ/Emulator/.env.properties)
TARGET_BASE_URL=http://localhost:8081/api/emulator

7-3. Docker Compose๋กœ Mysql๊ณผ Kafka ์‹คํ–‰

# ๋ฃจํŠธ์—์„œ ์‹คํ–‰
docker compose -f docker-compose.mysql.yaml up -d
docker compose -f docker-compose.kafka.yaml up -d

7-4. ๊ฐœ๋ณ„ ์‹คํ–‰

# Backend๋Š” BackendServer ํด๋”์—์„œ ์‹คํ–‰
# Backend (main)
./gradlew :server:bootRun

# Backend (emulator(server))
./gradlew :emulator:bootRun

# Backend (Consumer)
./gradlew :consumer:bootRun

# Emulator ํด๋”์—์„œ ์‹คํ–‰
./gradlew :bootRun

Swagger UI: http://localhost:8080/swagger-ui/index.html emulator web: http://localhost:8082/emulator


8) ์šด์˜ ๋ฐฐํฌ (์š”์•ฝ)

  1. Develop ๋ธŒ๋žœ์น˜ ํ‘ธ์‰ฌ ํ›„ Jenkins์—์„œ ๋นŒ๋“œ
  2. Terraform์œผ๋กœ ์ธํ”„๋ผ ๋ณ€๊ฒฝ (ํ•„์š” ์‹œ)
  3. CloudWatch Logs๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง

9) ์„ฑ๋Šฅ/ํ™•์žฅ์„ฑ (์ง€ํ‘œ ์˜ˆ์‹œ)

  • Kafka ์„ค์ •: ์˜ˆ์‚ฐ ๋ฌธ์ œ๋กœ broker 1๊ฐœ๋กœ ์ง„ํ–‰
  • ์ฒ˜๋ฆฌ๋Ÿ‰: 1๋ถ„์— 15000๊ฑด์˜ ์š”์ฒญ, ํ•œ ์š”์ฒญ๋‹น 60๊ฐœ gps์ •๋ณด
  • ECS ์˜คํ† ์Šค์ผ€์ผ (CPU ๊ธฐ๋ฐ˜)

kafka ์ ์šฉ ์ด์ „ (์ด ๋…ธํŠธ๋ถ 5๋Œ€๋กœ ์ง„ํ–‰, ์•„๋ž˜ ์˜ˆ์‹œ๋Š” 1๋Œ€) alt text

kafka ์ ์šฉ ์ดํ›„ alt text

์„ฑ๊ณต๋ฅ ์ด 20% -> 70% ๋กœ ์ฆ๊ฐ€


10) ๋ณด์•ˆ

  • JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ
  • CORS ํ—ˆ์šฉ ๋„๋ฉ”์ธ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ
  • ๋น„๋ฐ€์ •๋ณด๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์‚ฌ์šฉ
  • HTTPS(CloudFront/ALB) ์•”ํ˜ธํ™” ์‚ฌ์šฉ

11) ํŒ€์› ์†Œ๊ฐœ (๋ฐฑ์—”๋“œ)

์ด๋ฆ„ ์—ญํ•  ๋‹ด๋‹น GitHub
๊น€์žฌํ›ˆ ๋ฐฑ์—”๋“œ ๋ฆฌ๋“œ API/Kafka @id
์žฅ์Šนํ›ˆ ์ธํ”„๋ผ AWS/Terraform/CI-CD @id
๋ฐฑ์„œ์—ฐ ์ธํ”„๋ผ AWS/Terraform/CI-CD @id
๊น€์ˆ˜ํ˜„ ์ธํ”„๋ผ AWS/Terraform/CI-CD @id
๊น€์œ ๋นˆ ์ธํ”„๋ผ AWS/Terraform/CI-CD @id

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages