Files
2026-04-09 17:43:36 +09:00

5.2 KiB

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-postgresinfrastructure-db-oracle)

  • application.yml 또는 DB별 설정 파일(application-postgres.yml, application-oracle.yml)에서
    데이터베이스 연결 정보 변경

  • 실행 시 profile을 통해 DB 선택

# PostgreSQL
--spring.profiles.active=postgres

# Oracle
--spring.profiles.active=oracle