Dabeeo Detection API
Dabeeo 변화 탐지 시스템을 위한 백엔드 API 서버
📋 프로젝트 소개
dabeeo-detection-api
본 프로젝트는 영상 데이터를 기반으로 변화 탐지를 수행하는 시스템의 백엔드 API 서버입니다.
🛠️ 기술 스택
| Category | Technology |
|---|---|
| Language | Java 21 |
| Framework | Spring Boot 3.5.7 |
| Database | PostgreSQL (with PostGIS) |
| ORM | Spring Data JPA + Hibernate |
| Query | QueryDSL 5.0.0 (Jakarta) |
| Geospatial | JTS (Java Topology Suite) + GeoJSON |
| Connection Pool | HikariCP |
| Build Tool | Gradle 8.x |
| Monitoring | Spring Boot Actuator |
🚀 시작하기
필수 요구사항
- Java 21 (JDK 21)
- PostgreSQL 12+ (PostGIS 확장 필요)
- Gradle 8.x (또는 Gradle Wrapper 사용)
- Docker & Docker Compose (선택사항)
로컬 환경 설정
1. 저장소 클론
https://kamco.git.gs.dabeeo.com/MVPTeam/DABEEO-DETECTION-APPLICATION.git
2. 데이터베이스 설정
PostgreSQL 데이터베이스를 준비하고
src/main/resources/application-local.yml 파일을 생성합니다.
spring:
config:
activate:
on-profile: local
datasource:
url: jdbc:postgresql://localhost:5432/dabeeo_detection_dev
username: your_username
password: your_password
⚠️
application-local.yml은.gitignore에 포함되어 Git에 커밋되지 않습니다.
3. 빌드 및 실행
# 빌드
./gradlew build
# 실행 (local 프로파일)
./gradlew bootRun
# 또는 JAR 실행
java -jar build/libs/ROOT.jar
서버 실행 후:
http://localhost:8080
⚙️ 프로파일 설정
| 프로파일 | 환경 | 포트 | 설정 파일 |
|---|---|---|---|
local |
로컬 개발 | 8080 | application.yml |
dev |
개발 서버 | 8080 | application-dev.yml |
prod |
운영 서버 | 8080 | application-prod.yml |
프로파일 실행 방법
# dev 실행
./gradlew bootRun --args='--spring.profiles.active=dev'
# jar 실행
java -jar build/libs/ROOT.jar --spring.profiles.active=dev
🧪 테스트
# 전체 테스트
./gradlew test
# 특정 테스트
./gradlew test --tests com.kamco.cd.kamcoback.KamcoBackApplicationTests
# 리포트 확인
open build/reports/tests/test/index.html
📦 빌드
# 전체 빌드
./gradlew clean build
# 테스트 제외
./gradlew clean build -x test
# JAR 생성
./gradlew bootJar
빌드 결과:
build/libs/ROOT.jar
📁 프로젝트 구조
(2026-04-08 기준)
api-app # 메인 실행 모듈
├── app
│ ├── src/main
│ │ ├── java/com/cd/detection
│ │ │ ├── DabeeoDetectionApiApplication.java
│ │ │
│ │ │ ├── config # 설정 파일
│ │ │ ├── db
│ │ │ │ ├── core # core service (Repository 비즈니스 서비스)
│ │ │ │ └── repository # Repository (DB 인터페이스/구현)
│ │ │ ├── core
│ │ │ ├── domain # 도메인
│ │ │ │ ├── imagery # 영상 데이터 관리
│ │ │ │ ├── labeling # 라벨링 툴
│ │ │ │ ├── label # 라벨링 관리
│ │ │ │ ├── model # 모델관리
│ │ │ │ ├── inference # 추론관리
│ │ │ │ ├── system # 시스템관리
│ │ │ │ └── log # 로그관리
│ │ │ ├── entity # 공용 JPA 엔티티 (DB 공통 사용)
│ │ │
│ │ └── resources # 설정 및 리소스 파일
│ │ ├── application.yml
│ │ ├── application-dev.yml
│ │ └── application-prod.yml
│ │
│ └── build.gradle
│
├── infrastructure-db-postgres # Postgres 전용 설정/확장
│ └── build.gradle
│
├── build.gradle
├── settings.gradle
├── gradle/
└── gradlew
🧩 아키텍처 설계
본 프로젝트는 API 모듈과 DB 모듈을 분리한 멀티 모듈 구조를 사용합니다.
📌 모듈 구성
| 모듈 | 설명 |
|---|---|
| api-app | API 및 비즈니스 로직 |
| infrastructure-db-postgres | DB 접근 및 설정 |
🗄️ Database Module 분리 전략
DB 관련 로직은 별도의 모듈(infrastructure-db-postgres)로 분리되어 관리됩니다.
🎯 분리 목적
- 기술 의존성 분리
- DB 교체 용이성
- 관심사 분리
- 확장성 확보
🔄 Database 교체
-
api-app/build.gradle에서 DB 모듈 의존성 변경
(infrastructure-db-postgres→infrastructure-db-oracle) -
application.yml또는 DB별 설정 파일(application-postgres.yml,application-oracle.yml)에서
데이터베이스 연결 정보 변경 -
실행 시 profile을 통해 DB 선택
# PostgreSQL
--spring.profiles.active=postgres
# Oracle
--spring.profiles.active=oracle