Skip to content

SafeView/Backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

SafeView Backend

FOSSA Status

CCTV μ˜μƒ 관리 및 λ³΅ν˜Έν™” μ‹œμŠ€ν…œμ˜ λ°±μ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μž…λ‹ˆλ‹€.

πŸ“‹ λͺ©μ°¨

🎯 ν”„λ‘œμ νŠΈ κ°œμš”

SafeViewλŠ” CCTV μ˜μƒμ„ μ•ˆμ „ν•˜κ²Œ κ΄€λ¦¬ν•˜κ³  λ³΅ν˜Έν™”ν•˜λŠ” μ‹œμŠ€ν…œμž…λ‹ˆλ‹€. 블둝체인 κΈ°μˆ μ„ ν™œμš©ν•˜μ—¬ ν‚€μ˜ 무결성을 보μž₯ν•˜κ³ , JWT 기반 인증으둜 λ³΄μ•ˆμ„ κ°•ν™”ν–ˆμŠ΅λ‹ˆλ‹€.

μ£Όμš” νŠΉμ§•

  • πŸ” JWT 기반 인증: Access Tokenκ³Ό Refresh Token을 ν†΅ν•œ μ•ˆμ „ν•œ 인증
  • πŸ—οΈ 블둝체인 연동: λ³΅ν˜Έν™” ν‚€μ˜ 무결성과 좔적성 보μž₯
  • πŸ“Ή CCTV μ˜μƒ 관리: μ˜μƒ λ…Ήν™”, μ €μž₯, λ‹€μš΄λ‘œλ“œ κΈ°λŠ₯
  • πŸ‘₯ μ—­ν•  기반 μ ‘κ·Ό μ œμ–΄: USER, MODERATOR, ADMIN κΆŒν•œ 관리
  • πŸ”‘ λ³΅ν˜Έν™” ν‚€ 관리: ν‚€ λ°œκΈ‰, 검증, μ·¨μ†Œ κΈ°λŠ₯

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

Backend

  • Java 17
  • Spring Boot 3.x
  • Spring Security
  • Spring Data JPA
  • H2 Database (개발용)
  • Gradle

Security & Authentication

  • JWT (JSON Web Token)
  • BCrypt (λΉ„λ°€λ²ˆν˜Έ μ•”ν˜Έν™”)
  • Spring Security

Blockchain Integration

  • Web3j (Ethereum ν΄λΌμ΄μ–ΈνŠΈ)
  • Solidity (슀마트 μ»¨νŠΈλž™νŠΈ)
  • Sepolia Testnet

External Services

  • AI Server (μ˜μƒ 처리)
  • S3 Storage (μ˜μƒ μ €μž₯)

πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰

src/main/java/com/safeview/
β”œβ”€β”€ domain/                          # 도메인별 νŒ¨ν‚€μ§€
β”‚   β”œβ”€β”€ administrator/               # κ΄€λ¦¬μž κΈ°λŠ₯
β”‚   β”‚   β”œβ”€β”€ controller/             # κ΄€λ¦¬μž API 컨트둀러
β”‚   β”‚   β”œβ”€β”€ dto/                    # κ΄€λ¦¬μž κ΄€λ ¨ DTO
β”‚   β”‚   β”œβ”€β”€ entity/                 # κ΄€λ¦¬μž μš”μ²­ μ—”ν‹°ν‹°
β”‚   β”‚   β”œβ”€β”€ mapper/                 # DTO-Entity λ³€ν™˜
β”‚   β”‚   β”œβ”€β”€ repository/             # 데이터 μ ‘κ·Ό 계측
β”‚   β”‚   └── service/                # λΉ„μ¦ˆλ‹ˆμŠ€ 둜직
β”‚   β”œβ”€β”€ auth/                       # 인증 κ΄€λ ¨
β”‚   β”‚   β”œβ”€β”€ controller/             # 인증 API 컨트둀러
β”‚   β”‚   β”œβ”€β”€ dto/                    # 인증 κ΄€λ ¨ DTO
β”‚   β”‚   β”œβ”€β”€ mapper/                 # 인증 맀퍼
β”‚   β”‚   └── service/                # 인증 μ„œλΉ„μŠ€
β”‚   β”œβ”€β”€ decryption/                 # λ³΅ν˜Έν™” κΈ°λŠ₯
β”‚   β”‚   β”œβ”€β”€ config/                 # λ³΅ν˜Έν™” μ„€μ •
β”‚   β”‚   β”œβ”€β”€ controller/             # λ³΅ν˜Έν™” API 컨트둀러
β”‚   β”‚   β”œβ”€β”€ dto/                    # λ³΅ν˜Έν™” κ΄€λ ¨ DTO
β”‚   β”‚   β”œβ”€β”€ entity/                 # λ³΅ν˜Έν™” ν‚€ μ—”ν‹°ν‹°
β”‚   β”‚   β”œβ”€β”€ mapper/                 # λ³΅ν˜Έν™” 맀퍼
β”‚   β”‚   β”œβ”€β”€ repository/             # λ³΅ν˜Έν™” 데이터 μ ‘κ·Ό
β”‚   β”‚   └── service/                # λ³΅ν˜Έν™” μ„œλΉ„μŠ€
β”‚   β”œβ”€β”€ user/                       # μ‚¬μš©μž 관리
β”‚   β”‚   β”œβ”€β”€ controller/             # μ‚¬μš©μž API 컨트둀러
β”‚   β”‚   β”œβ”€β”€ dto/                    # μ‚¬μš©μž κ΄€λ ¨ DTO
β”‚   β”‚   β”œβ”€β”€ entity/                 # μ‚¬μš©μž μ—”ν‹°ν‹°
β”‚   β”‚   β”œβ”€β”€ mapper/                 # μ‚¬μš©μž 맀퍼
β”‚   β”‚   β”œβ”€β”€ repository/             # μ‚¬μš©μž 데이터 μ ‘κ·Ό
β”‚   β”‚   └── service/                # μ‚¬μš©μž μ„œλΉ„μŠ€
β”‚   └── video/                      # μ˜μƒ 관리
β”‚       β”œβ”€β”€ controller/             # μ˜μƒ API 컨트둀러
β”‚       β”œβ”€β”€ dto/                    # μ˜μƒ κ΄€λ ¨ DTO
β”‚       β”œβ”€β”€ entity/                 # μ˜μƒ μ—”ν‹°ν‹°
β”‚       β”œβ”€β”€ mapper/                 # μ˜μƒ 맀퍼
β”‚       β”œβ”€β”€ repository/             # μ˜μƒ 데이터 μ ‘κ·Ό
β”‚       └── service/                # μ˜μƒ μ„œλΉ„μŠ€
└── global/                         # μ „μ—­ μ„€μ • 및 곡톡 κΈ°λŠ₯
    β”œβ”€β”€ config/                     # μ„€μ • ν΄λž˜μŠ€λ“€
    β”œβ”€β”€ entity/                     # κΈ°λ³Έ μ—”ν‹°ν‹°
    β”œβ”€β”€ exception/                  # μ˜ˆμ™Έ 처리
    β”œβ”€β”€ response/                   # 응닡 ν˜•μ‹
    └── security/                   # λ³΄μ•ˆ κ΄€λ ¨

πŸš€ μ£Όμš” κΈ°λŠ₯

1. μ‚¬μš©μž 관리

  • νšŒμ›κ°€μž…: 이메일, λΉ„λ°€λ²ˆν˜Έ, κ°œμΈμ •λ³΄λ₯Ό ν†΅ν•œ νšŒμ›κ°€μž…
  • 둜그인/λ‘œκ·Έμ•„μ›ƒ: JWT 토큰 기반 인증
  • 이메일 쀑볡 확인: νšŒμ›κ°€μž… μ‹œ 이메일 쀑볡 검증
  • μ—­ν•  관리: USER, MODERATOR, ADMIN κΆŒν•œ 체계

2. 인증 및 λ³΄μ•ˆ

  • JWT 토큰 관리: Access Token (1μ‹œκ°„), Refresh Token (7일)
  • HttpOnly μΏ ν‚€: XSS 곡격 λ°©μ§€λ₯Ό μœ„ν•œ μ•ˆμ „ν•œ 토큰 μ €μž₯
  • λΉ„λ°€λ²ˆν˜Έ μ•”ν˜Έν™”: BCryptλ₯Ό ν†΅ν•œ μ•ˆμ „ν•œ λΉ„λ°€λ²ˆν˜Έ μ €μž₯
  • κΆŒν•œλ³„ μ ‘κ·Ό μ œμ–΄: API별 κΆŒν•œ 검증

3. κ΄€λ¦¬μž κΈ°λŠ₯

  • κΆŒν•œ μš”μ²­ 관리: μ‚¬μš©μžμ˜ κ΄€λ¦¬μž κΆŒν•œ μš”μ²­ 처리
  • 전체 μ‚¬μš©μž 관리: λͺ¨λ“  μ‚¬μš©μž 정보 쑰회 및 관리
  • μš”μ²­ 승인/거절: κ΄€λ¦¬μž κΆŒν•œ μš”μ²­μ— λŒ€ν•œ 처리

4. λ³΅ν˜Έν™” ν‚€ 관리

  • ν‚€ λ°œκΈ‰: CCTV μ˜μƒ λ³΅ν˜Έν™”λ₯Ό μœ„ν•œ ν‚€ 생성
  • ν‚€ 검증: λ°œκΈ‰λœ ν‚€μ˜ μœ νš¨μ„± 검증
  • ν‚€ μ·¨μ†Œ: λ§Œλ£Œλ˜κ±°λ‚˜ λ³΄μ•ˆμƒ μ·¨μ†Œκ°€ ν•„μš”ν•œ ν‚€ 관리
  • 블둝체인 연동: ν‚€ μ •λ³΄μ˜ 무결성 보μž₯

5. μ˜μƒ 관리

  • μ˜μƒ λ…Ήν™”: AI μ„œλ²„μ™€ μ—°λ™ν•œ μ˜μƒ λ…Ήν™” μ‹œμž‘/쀑지
  • μ˜μƒ μ €μž₯: S3 μŠ€ν† λ¦¬μ§€λ₯Ό ν†΅ν•œ μ•ˆμ „ν•œ μ˜μƒ μ €μž₯
  • μ˜μƒ λͺ©λ‘: μ‚¬μš©μžλ³„ μ˜μƒ λͺ©λ‘ 쑰회
  • μ˜μƒ λ‹€μš΄λ‘œλ“œ: μ €μž₯된 μ˜μƒ λ‹€μš΄λ‘œλ“œ κΈ°λŠ₯

πŸ“š API λ¬Έμ„œ

인증 API

  • POST /api/auth/login - 둜그인
  • POST /api/auth/logout - λ‘œκ·Έμ•„μ›ƒ
  • GET /api/auth/me - ν˜„μž¬ μ‚¬μš©μž 정보 쑰회

μ‚¬μš©μž API

  • POST /api/users/signup - νšŒμ›κ°€μž…
  • GET /api/users/check-email - 이메일 쀑볡 확인

κ΄€λ¦¬μž API

  • POST /api/admin/requests - κ΄€λ¦¬μž κΆŒν•œ μš”μ²­ 생성
  • GET /api/admin/requests - κ΄€λ¦¬μž κΆŒν•œ μš”μ²­ λͺ©λ‘ 쑰회
  • PUT /api/admin/requests/{id} - κ΄€λ¦¬μž κΆŒν•œ μš”μ²­ 처리

λ³΅ν˜Έν™” API

  • POST /api/decryption/keys/issue - λ³΅ν˜Έν™” ν‚€ λ°œκΈ‰
  • POST /api/decryption/keys/verify - λ³΅ν˜Έν™” ν‚€ 검증
  • DELETE /api/decryption/keys/revoke - λ³΅ν˜Έν™” ν‚€ μ·¨μ†Œ
  • GET /api/decryption/keys - λ³΅ν˜Έν™” ν‚€ λͺ©λ‘ 쑰회

μ˜μƒ API

  • POST /api/videos/start - μ˜μƒ λ…Ήν™” μ‹œμž‘
  • POST /api/videos/stop - μ˜μƒ λ…Ήν™” 쀑지
  • GET /api/videos/all - μ‚¬μš©μžλ³„ μ˜μƒ λͺ©λ‘ 쑰회
  • GET /api/videos/download/{filename} - μ˜μƒ λ‹€μš΄λ‘œλ“œ

블둝체인 API

  • GET /api/blockchain/status - 블둝체인 μ—°κ²° μƒνƒœ 확인
  • GET /api/blockchain/balance - 계정 μž”μ•‘ 쑰회
  • POST /api/blockchain/keys/register - ν‚€ 블둝체인 등둝

πŸ› οΈ μ„€μΉ˜ 및 μ‹€ν–‰

ν•„μˆ˜ μš”κ΅¬μ‚¬ν•­

  • Java 17 이상
  • Gradle 7.x 이상
  • H2 Database (개발용)

1. ν”„λ‘œμ νŠΈ 클둠

git clone [repository-url]
cd Backend

2. μ˜μ‘΄μ„± μ„€μΉ˜

./gradlew build

3. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰

./gradlew bootRun

4. 개발 μ„œλ²„ 접속

βš™οΈ ν™˜κ²½ μ„€μ •

application.yml μ„€μ •

spring:
  datasource:
    url: jdbc:h2:mem:testdb
    driver-class-name: org.h2.Driver
    username: sa
    password: 
  
  jpa:
    hibernate:
      ddl-auto: create-drop
    show-sql: true
    
  h2:
    console:
      enabled: true

jwt:
  secret: your-jwt-secret-key-here
  expiration: 3600000  # 1μ‹œκ°„ (ms)
  refresh-expiration: 604800000  # 7일 (ms)

cctv:
  decryption:
    key-type: CCTV_AES256
    max-uses: 10
    expiration-hours: 24

blockchain:
  network-url: https://sepolia.infura.io/v3/your-project-id
  contract-address: your-contract-address
  private-key: your-private-key

ai:
  server:
    url: http://localhost:5000

api:
  internal:
    ai-server-key: your-ai-server-api-key

πŸ—„οΈ λ°μ΄ν„°λ² μ΄μŠ€

μ£Όμš” ν…Œμ΄λΈ”

users

  • μ‚¬μš©μž 정보 μ €μž₯
  • 이메일, λΉ„λ°€λ²ˆν˜Έ, κ°œμΈμ •λ³΄, μ—­ν•  포함

admin_requests

  • κ΄€λ¦¬μž κΆŒν•œ μš”μ²­ 정보
  • μš”μ²­μž, 제λͺ©, μ„€λͺ…, μƒνƒœ, 처리 정보 포함

decryption_keys

  • λ³΅ν˜Έν™” ν‚€ 정보
  • ν‚€ ν•΄μ‹œ, μ‚¬μš©μž ID, 만료 μ‹œκ°„, μ‚¬μš© 횟수 포함

blockchain_transactions

  • 블둝체인 νŠΈλžœμž­μ…˜ 정보
  • νŠΈλžœμž­μ…˜ ν•΄μ‹œ, ν‚€ ν•΄μ‹œ, μƒνƒœ 정보 포함

videos

  • μ˜μƒ 정보
  • 파일λͺ…, S3 URL, μ‚¬μš©μž ID 포함

πŸ”’ λ³΄μ•ˆ

인증 및 κΆŒν•œ

  • JWT 토큰: Access Tokenκ³Ό Refresh Token 뢄리
  • HttpOnly μΏ ν‚€: XSS 곡격 λ°©μ§€
  • BCrypt μ•”ν˜Έν™”: λΉ„λ°€λ²ˆν˜Έ μ•ˆμ „ν•œ μ €μž₯
  • μ—­ν•  기반 μ ‘κ·Ό μ œμ–΄: API별 κΆŒν•œ 검증

데이터 λ³΄μ•ˆ

  • 블둝체인 검증: ν‚€ 무결성 보μž₯
  • API ν‚€ 검증: AI μ„œλ²„ 톡신 λ³΄μ•ˆ
  • μž…λ ₯κ°’ 검증: λͺ¨λ“  μ‚¬μš©μž μž…λ ₯ 검증

λ„€νŠΈμ›Œν¬ λ³΄μ•ˆ

  • CORS μ„€μ •: ν”„λ‘ νŠΈμ—”λ“œμ™€μ˜ μ•ˆμ „ν•œ 톡신
  • HTTPS: ν”„λ‘œλ•μ…˜ ν™˜κ²½μ—μ„œ HTTPS μ‚¬μš© ꢌμž₯

πŸ‘¨β€πŸ’» 개발 κ°€μ΄λ“œ

μ½”λ“œ μ»¨λ²€μ…˜

  • νŒ¨ν‚€μ§€ ꡬ쑰: 도메인별 νŒ¨ν‚€μ§€ 뢄리
  • 주석: λͺ¨λ“  ν΄λž˜μŠ€μ™€ λ©”μ„œλ“œμ— 주석 μž‘μ„±
  • μ˜ˆμ™Έ 처리: μΌκ΄€λœ μ˜ˆμ™Έ 처리 및 응닡 ν˜•μ‹

개발 ν™˜κ²½ μ„€μ •

  1. IDE μ„€μ •: IntelliJ IDEA λ˜λŠ” Eclipse ꢌμž₯
  2. μ½”λ“œ ν¬λ§·νŒ…: Google Java Style Guide μ€€μˆ˜

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

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

🀝 κΈ°μ—¬ν•˜κΈ°

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

License

FOSSA Status

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •