Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 87 additions & 12 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1,51 +1,126 @@
# =============================================================================
# .dockerignore - Docker 이미지 빌드 시 제외할 파일/디렉토리
# =============================================================================
# Multi-stage build를 사용하므로 빌드 산출물은 Docker 내부에서 생성됨
# 따라서 로컬 빌드 결과물을 모두 제외하여 컨텍스트 크기를 최소화
# =============================================================================

# -----------------------------
# default
# VCS (Version Control System)
# -----------------------------
.git
.gitignore
*.log
.gitattributes
.github

# -----------------------------
# 문서 및 설명 파일
# -----------------------------
*.md
.DS_Store
*.iml
README*
CHANGELOG*
LICENSE*
docs/

# -----------------------------
# IDE 관련
# IDE 및 에디터 관련
# -----------------------------
.idea/
.vscode/
.eclipse/
.settings/
*.iml
*.swp
*.swo
*~
.project
.classpath

# -----------------------------
# OS/툴 관련 캐시
# OS 관련 임시 파일
# -----------------------------
.DS_Store
Thumbs.db
ehthumbs.db
desktop.ini

# -----------------------------
# Gradle 빌드 결과물 및 캐시
# Gradle 빌드 결과물 및 캐시 (multi-stage build에서 자체 빌드)
# -----------------------------
build/
!build/libs/*.jar
.gradle/
!gradle/wrapper/gradle-wrapper.jar
.gradle/
bin/
out/
target/

# Gradle wrapper는 필요하므로 제외하지 않음
# !gradle/wrapper/gradle-wrapper.jar 불필요 (Dockerfile에서 gradle 이미지 사용)

# -----------------------------
# 환경/인증 관련 (보안 목적)
# 환경 설정 및 보안 관련
# -----------------------------
.env
.env.*
*.local
*.pem
*.crt
*.key
*.p12
*.jks
application-local.yml
application-dev.yml
application-secret.yml

# -----------------------------
# 테스트/커버리지
# 테스트커버리지
# -----------------------------
test-results/
test-output/
jacoco*.exec
coverage/
.nyc_output/
*.html
*.xml
!src/**/*.xml
*.json
!src/**/*.json

# -----------------------------
# 로그 파일
# -----------------------------
*.log
logs/
*.log.*

# -----------------------------
# Docker 관련
# -----------------------------
Dockerfile.*
docker-compose*.yml
.dockerignore

# -----------------------------
# CI/CD 관련
# -----------------------------
.github/
.gitlab-ci.yml
.travis.yml
Jenkinsfile

# -----------------------------
# 임시 파일 및 백업
# -----------------------------
*.tmp
*.temp
*.bak
*.swp
*.swo
*~
.cache/

# -----------------------------
# Node.js (프론트엔드 관련 - 있을 경우)
# -----------------------------
node_modules/
npm-debug.log
yarn-error.log
81 changes: 79 additions & 2 deletions .env.sample
Original file line number Diff line number Diff line change
@@ -1,5 +1,82 @@
DB_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
# =============================================================================
# Environment Configuration Template for Open API Batch Server
# =============================================================================
# Copy this file to .env and fill in the values for your environment
# - Local: Development on local machine
# - Dev: Development server
# - Prod: Production server
# =============================================================================

# Application Configuration
SERVER_PORT=${SERVER_PORT}

# Database Configuration
DB_IP=${DB_IP}
DB_PORT=${DB_PORT}
DB_SCHEMA=${DB_SCHEMA}
DB_USER=${DB_USER}
DB_PASSWORD=${DB_PASSWORD}
DB_PORT=${DB_PORT}

# Security Configuration
JWT_SECRET_KEY=${JWT_SECRET_KEY}
JWT_ACCESS_TOKEN_VALIDITY=${JWT_ACCESS_TOKEN_VALIDITY}
JWT_REFRESH_TOKEN_VALIDITY=${JWT_REFRESH_TOKEN_VALIDITY}

# External API Configuration
NEXON_OPEN_API_KEY=${NEXON_OPEN_API_KEY}
AUCTION_HISTORY_DELAY_MS=${AUCTION_HISTORY_DELAY_MS}
AUCTION_HISTORY_CRON=${AUCTION_HISTORY_CRON}
AUCTION_HISTORY_MIN_PRICE_CRON=${AUCTION_HISTORY_MIN_PRICE_CRON}

# Docker Configuration
DOCKER_USERNAME=${DOCKER_USERNAME}
DOCKER_PASSWORD=${DOCKER_PASSWORD}
DOCKER_REPO=${DOCKER_REPO}
DOCKER_IMAGE_TAG=${DOCKER_IMAGE_TAG:-latest}

# Spring Profile
SPRING_PROFILES_ACTIVE=${SPRING_PROFILES_ACTIVE:-default}

# JVM Memory Configuration
# Heap Memory
JAVA_OPTS_XMS=${JAVA_OPTS_XMS:-256m}
JAVA_OPTS_XMX=${JAVA_OPTS_XMX:-512m}

# Non-Heap Memory
JAVA_OPTS_MAX_METASPACE_SIZE=${JAVA_OPTS_MAX_METASPACE_SIZE:-150m}
JAVA_OPTS_RESERVED_CODE_CACHE_SIZE=${JAVA_OPTS_RESERVED_CODE_CACHE_SIZE:-48m}
JAVA_OPTS_MAX_DIRECT_MEMORY_SIZE=${JAVA_OPTS_MAX_DIRECT_MEMORY_SIZE:-64m}
JAVA_OPTS_XSS=${JAVA_OPTS_XSS:-512k}

# JVM GC Configuration (G1GC)
JAVA_OPTS_MAX_GC_PAUSE_MILLIS=${JAVA_OPTS_MAX_GC_PAUSE_MILLIS:-200}
JAVA_OPTS_G1_HEAP_REGION_SIZE=${JAVA_OPTS_G1_HEAP_REGION_SIZE:-2m}
JAVA_OPTS_INITIATING_HEAP_OCCUPANCY_PERCENT=${JAVA_OPTS_INITIATING_HEAP_OCCUPANCY_PERCENT:-45}

# JVM Compiler Configuration
JAVA_OPTS_TIERED_STOP_AT_LEVEL=${JAVA_OPTS_TIERED_STOP_AT_LEVEL:-2}
JAVA_OPTS_CI_COMPILER_COUNT=${JAVA_OPTS_CI_COMPILER_COUNT:-2}

# Docker Container Resource Limits
DOCKER_MEMORY_LIMIT=${DOCKER_MEMORY_LIMIT:-750M}
DOCKER_MEMORY_RESERVATION=${DOCKER_MEMORY_RESERVATION:-512M}

# Container Restart Policy
RESTART_POLICY_MAX_RETRIES=${RESTART_POLICY_MAX_RETRIES:-5}

# Health Check Configuration
HEALTHCHECK_INTERVAL=${HEALTHCHECK_INTERVAL:-30s}
HEALTHCHECK_TIMEOUT=${HEALTHCHECK_TIMEOUT:-15s}
HEALTHCHECK_RETRIES=${HEALTHCHECK_RETRIES:-4}
HEALTHCHECK_START_PERIOD=${HEALTHCHECK_START_PERIOD:-120s}

# Autoheal Configuration
AUTOHEAL_INTERVAL=${AUTOHEAL_INTERVAL:-30}
AUTOHEAL_START_PERIOD=${AUTOHEAL_START_PERIOD:-0}
AUTOHEAL_DEFAULT_STOP_TIMEOUT=${AUTOHEAL_DEFAULT_STOP_TIMEOUT:-15}
AUTOHEAL_MEMORY_LIMIT=${AUTOHEAL_MEMORY_LIMIT:-50M}
AUTOHEAL_MEMORY_RESERVATION=${AUTOHEAL_MEMORY_RESERVATION:-20M}

# Logging Configuration
LOGGING_MAX_SIZE=${LOGGING_MAX_SIZE:-10m}
LOGGING_MAX_FILE=${LOGGING_MAX_FILE:-3}
11 changes: 11 additions & 0 deletions .github/workflows/pr-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,17 @@ jobs:
with:
java-version: '21'
distribution: 'temurin'
cache: 'gradle'

- name: Cache Gradle packages
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-

- name: Grant execute permission for gradlew
run: chmod +x ./gradlew
Expand Down
Loading