Tech Stack
Front-End Tech Stack
- React
- React-router-dom
- Recoil
- Axios
- Javascript
- Styled Components
- React-Query
- React-hook-form
Back-End Tech Stack
- Java 11
- Spring boot, Spring security, Spring validation, Spring data jpa, Web RTC
- MySQL 8.0
- Docker
- Git
- Github Actions
- AWS EC2
API
공통 규약
- /api/**
- 복수형으로 사용 (users/books/)
응답 메세지 형태
{
"code": "",
"message": "stt 변환 실패"
"data" : response data
}
Member 구조
class Member(db.Model):
ID = db.Column(db.String(20), primary_key=True)
Email = db.Column(db.String(120), unique=True, nullable=False)
Password = db.Column(db.String(100), nullable=False)
CCTV 구조
class CCTV(db.Model):
# CCTV ID
ID = db.Column(db.String(7), primary_key=True)
# CCTV Name
Name = db.Column(db.String(20), unique=True, nullable=False)
# Center Name
Center = db.Column(db.String(20), nullable=False)
# X COORD
Longitude = db.Column(db.Float, nullable=False)
# Y COORD
Latitude = db.Column(db.Float, nullable=False)
# CCTV Streaming URL
URL = db.Column(db.Text)
CCTVStatus 구조
class CCTVStatus(db.Model):
# CCTV ID(외래키)
CCTVID = db.Column(db.String(7), db.ForeignKey('cctv.ID', ondelete='CASCADE'), primary_key=True)
cctv = db.relationship('CCTV', backref=db.backref('status'))
# 침수 단계
FloodingStage = db.Column(db.Integer, nullable=False)
FloodHistory 구조
class FloodHistory(db.Model):
# History code(Datetime, CCTV ID) 복합키로 기본키 지정
__table_args__ = (db.PrimaryKeyConstraint('Datetime', 'CCTVID', name = 'HistoryCode'), )
# Datetime - YYYY-MM-DD HH:MM:SS
Datetime = db.Column(db.DateTime, nullable=False)
# CCTV ID(외래키)
CCTVID = db.Column(db.String(7), db.ForeignKey('cctv.ID', ondelete='CASCADE'))
cctv = db.relationship('CCTV', backref=db.backref('history_set'))
# Flood Stage - 침수 단계
FloodStage = db.Column(db.Integer, nullable=False)
# Image URL - S3에 저장된 이미지 URL
ImageURL = db.Column(db.Text)
# Temperatures - 기온
Temperature = db.Column(db.Float)
# Humidity - 습도
Humidity = db.Column(db.Float)
# precipitation - 1시간 강수량
Precipitation = db.Column(db.Float)
Shelter 구조