# 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` 파일을 생성합니다. ```yaml 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. 빌드 및 실행 ```bash # 빌드 ./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` | --- ### 프로파일 실행 방법 ```bash # dev 실행 ./gradlew bootRun --args='--spring.profiles.active=dev' # jar 실행 java -jar build/libs/ROOT.jar --spring.profiles.active=dev ``` --- ## 🧪 테스트 ```bash # 전체 테스트 ./gradlew test # 특정 테스트 ./gradlew test --tests com.kamco.cd.kamcoback.KamcoBackApplicationTests # 리포트 확인 open build/reports/tests/test/index.html ``` --- ## 📦 빌드 ```bash # 전체 빌드 ./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 선택 ```bash # PostgreSQL --spring.profiles.active=postgres # Oracle --spring.profiles.active=oracle