Skip to content

Repository files navigation

디프만의 모든 활동을 지원하는, DPM CORE

core_banner


🛠 Tech Stack

Java Spring Boot Spring Security
JPA jOOQ MySQL
Docker Traefik GitHub Actions Oracle Cloud


🏗️ System Architecture

2026.09 iwinv + AWS(RDS·EC2) → Oracle Cloud 마이그레이션 완료

런타임 구조

flowchart TB
    FE["🌐 프론트엔드<br/>core.depromeet.com"]

    subgraph ORACLE["Oracle Cloud (Ampere ARM)"]
        subgraph PROD["core-prod 인스턴스"]
            TRAEFIK["Traefik v2.11<br/>:80/:443 · Let's Encrypt 자동 발급<br/>호스트명 기반 라우팅"]
            APP["spring-app (prod)<br/>Docker Swarm · start-first 무중단 배포"]
            DEVAPP["dev-spring-app (dev)"]
        end
        subgraph DBHOST["core-db 인스턴스"]
            MYSQL[("MySQL 8.0.41 (Docker)<br/>dpm_core · dpm_core_dev<br/>스키마별 최소 권한 계정")]
        end
    end

    FE -->|api.depromeet.com| TRAEFIK
    FE -.->|api.depromeet.shop| TRAEFIK
    TRAEFIK -->|"Host(api.depromeet.com)"| APP
    TRAEFIK -.->|"Host(api.depromeet.shop)"| DEVAPP
    APP -->|"dpm_core (TLS)"| MYSQL
    DEVAPP -.->|"dpm_core_dev (TLS)"| MYSQL
Loading
  • prod/dev 앱이 한 인스턴스(core-prod)에서 Swarm 서비스로 분리 운영되고, Traefik이 호스트명으로 라우팅합니다.
  • prod/dev DB는 하나의 MySQL 인스턴스에서 스키마로 분리되며, 계정도 스키마별 최소 권한(core_prod/core_dev)으로 격리됩니다.
  • core-db는 방화벽(VCN Security List + iptables)으로 앱 서버에서만 3306 접근을 허용합니다.
  • core-db에서 매일 04:00(KST) mysqldump 백업이 요일별 7개 파일로 로테이션됩니다.

배포 파이프라인

flowchart LR
    DEVELOP["develop push"] --> DEVCD["dev-cd"]
    MAIN["main push"] --> PRODCD["prod-cd"]
    DEVCD --> HUB[("DockerHub<br/>Jib 멀티아치<br/>amd64 + arm64")]
    PRODCD --> HUB
    HUB -->|"dev-{sha}"| DEVDEPLOY["core-prod<br/>dev 스택 deploy"]
    HUB -->|"prod-{sha}"| PRODDEPLOY["core-prod<br/>prod 스택 deploy"]
Loading
  • 이미지는 Jib으로 멀티아치(amd64+arm64) 빌드됩니다.
  • prod 환경변수는 GitHub Actions Secrets가 원본이며, prod-cd가 배포할 때마다 서버의 .env를 재생성해 컨테이너에 주입합니다. (dev는 서버에 상주하는 .env.dev 사용)

🧱 Module Structure

프로젝트 모듈 구조

root
├── .github
├── application # API/유스케이스
├── codegen # jOOQ DSL 생성 모듈
├── domain # 순수 도메인 모델
├── entity # JPA 엔티티
└── persistence # DB 접근 (jOOQ, Spring Data JPA)
  • 멀티 모듈 구조를 사용하여 의존성 방향을 명확히 관리합니다.
  • 도메인 모듈은 순수 POJO로 유지하여 비즈니스 로직의 독립성을 보장합니다.
  • ./gradlew:codegen jooqGenerate 명령어로 jOOQ DSL 클래스를 생성합니다.

도메인 모듈 구조

foo-domain
  └─ aggregate # 도메인 객체
  └─ enums
  └─ port # inbound: usecase / outbound: persistence port
  └─ vo # 값 객체, 식별자 등
  └─ constant
  └─ event # 도메인 이벤트

👨🏻‍💻Contributors

3rd Developers

정준원 신민규 김수진

2nd Developers

정준원 이서현

1st Developers

정준원 이한음 신민철

📐 Team Rules

About

디프만의 모든 활동을 지원하는, 코어 서버 시스템 입니다

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages