install 스크립트 개선: JDK 21 자동 설치, 경로 문제 수정, 문서 업데이트

- install.bat/install.sh: JDK 미설치 시 자동 설치 (winget/brew/apt/yum)
- install.bat: ERRORLEVEL 지연 확장 통일, gradlew 경로 수정, CRLF/이스케이프 수정
- install.sh: set -euo pipefail 제거, PROJECT_ROOT 기준 경로로 변경
- Lombok @Builder.Default 경고 3건 수정 (WbxUserRole, WbxAuditLog, RolePermission)
- 개발자가이드/설치가이드 PDF: JDK 자동 설치 기능 반영

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
이 Commit은 다음에 포함되어 있습니다:
2026-03-25 17:12:20 +09:00
부모 6b6516d585
커밋 07b9db48ef
9개의 변경된 파일995개의 추가작업 그리고 26개의 파일을 삭제

파일 보기

@@ -7,6 +7,13 @@ setlocal EnableDelayedExpansion
:: 사용법: scripts\install.bat
:: ============================================================
:: ---------- 프로젝트 루트 설정 ----------
set "PROJECT_ROOT=%~dp0.."
pushd "!PROJECT_ROOT!" || (
echo [FAIL] 프로젝트 루트를 찾을 수 없습니다: %~dp0..
exit /b 1
)
echo.
echo ==========================================
echo WBX Spring Core — 설치 점검
@@ -17,27 +24,55 @@ set ERRORS=0
:: ---------- 1. JDK 21 ----------
echo 1. JDK 확인
set "JDK_OK=0"
where java >nul 2>&1
if %ERRORLEVEL% equ 0 (
if !ERRORLEVEL! equ 0 (
for /f "tokens=3" %%v in ('java -version 2^>^&1 ^| findstr /i "version"') do (
set "JAVA_FULL=%%~v"
)
for /f "tokens=1 delims=." %%m in ("!JAVA_FULL!") do set "JAVA_MAJOR=%%m"
if !JAVA_MAJOR! GEQ 21 (
echo [OK] JDK !JAVA_FULL!
set "JDK_OK=1"
) else (
echo [FAIL] JDK !JAVA_FULL! — 21 이상 필요
set /a ERRORS+=1
echo [INFO] JDK !JAVA_FULL! — 21 이상 필요, 자동 설치 시도...
)
) else (
echo [FAIL] java 명령어 없음 — JDK 21 설치 필요
set /a ERRORS+=1
echo [INFO] java 명령어 없음 — 자동 설치 시도...
)
if !JDK_OK! equ 0 (
where winget >nul 2>&1
if !ERRORLEVEL! equ 0 (
echo [INFO] winget으로 Eclipse Temurin JDK 21 설치 중...
winget install --id EclipseAdoptium.Temurin.21.JDK --accept-source-agreements --accept-package-agreements --silent
if !ERRORLEVEL! equ 0 (
:: 설치된 JDK를 PATH에 추가
for /d %%j in ("C:\Program Files\Eclipse Adoptium\jdk-21*") do (
set "JAVA_HOME=%%j"
)
if defined JAVA_HOME (
set "PATH=!JAVA_HOME!\bin;!PATH!"
echo [OK] JDK 21 설치 완료 — !JAVA_HOME!
echo [INFO] 시스템 PATH 반영을 위해 설치 후 새 터미널을 여세요.
) else (
echo [FAIL] JDK 설치 경로를 찾을 수 없습니다
set /a ERRORS+=1
)
) else (
echo [FAIL] JDK 설치 실패 — 수동으로 JDK 21을 설치하세요
set /a ERRORS+=1
)
) else (
echo [FAIL] winget 없음 — https://adoptium.net 에서 JDK 21을 수동 설치하세요
set /a ERRORS+=1
)
)
:: ---------- 2. Git ----------
echo 2. Git 확인
where git >nul 2>&1
if %ERRORLEVEL% equ 0 (
if !ERRORLEVEL! equ 0 (
for /f "delims=" %%g in ('git --version') do echo [OK] %%g
) else (
echo [FAIL] git 없음
@@ -47,7 +82,7 @@ if %ERRORLEVEL% equ 0 (
:: ---------- 3. Docker (선택) ----------
echo 3. Docker 확인 (선택)
where docker >nul 2>&1
if %ERRORLEVEL% equ 0 (
if !ERRORLEVEL! equ 0 (
for /f "delims=" %%d in ('docker --version') do echo [OK] %%d
) else (
echo [WARN] Docker 미설치 — DB/Redis를 직접 설치해야 합니다
@@ -58,7 +93,7 @@ echo 4. Gradle 빌드
if !ERRORS! GTR 0 (
echo [FAIL] 사전 요구사항 미충족 — 빌드 건너뜀
) else (
call gradlew.bat build -x test --console=plain -q
call "!PROJECT_ROOT!\gradlew.bat" build -x test --console=plain -q
if !ERRORLEVEL! equ 0 (
echo [OK] BUILD SUCCESSFUL
) else (
@@ -69,7 +104,7 @@ if !ERRORS! GTR 0 (
:: ---------- 5. .env 템플릿 ----------
echo 5. 환경변수 파일
if not exist .env (
if not exist "!PROJECT_ROOT!\.env" (
(
echo # ===== WBX Spring Core — 환경변수 =====
echo # 이 파일을 환경에 맞게 수정하세요.
@@ -80,7 +115,7 @@ if not exist .env (
echo # --- 서버 ---
echo SERVER_CONTEXT_PATH=/
echo.
echo # --- JWT ^(필수 변경!^) ---
echo # --- JWT ^(필수 변경^^^!^) ---
echo JWT_SECRET=your-production-secret-key-minimum-256-bits-long
echo.
echo # --- DB ---
@@ -119,7 +154,7 @@ if not exist .env (
echo # AWS_S3_BUCKET=
echo # AWS_ACCESS_KEY=
echo # AWS_SECRET_KEY=
) > .env
) > "!PROJECT_ROOT!\.env"
echo [OK] .env 생성 완료 (값을 수정하세요)
) else (
echo [WARN] .env 이미 존재 — 건너뜀
@@ -127,9 +162,9 @@ if not exist .env (
:: ---------- 6. 디렉토리 ----------
echo 6. 디렉토리 생성
if not exist logs mkdir logs
if not exist uploads mkdir uploads
if not exist backup mkdir backup
if not exist "!PROJECT_ROOT!\logs" mkdir "!PROJECT_ROOT!\logs"
if not exist "!PROJECT_ROOT!\uploads" mkdir "!PROJECT_ROOT!\uploads"
if not exist "!PROJECT_ROOT!\backup" mkdir "!PROJECT_ROOT!\backup"
echo [OK] logs\ uploads\ backup\
:: ---------- 결과 ----------
@@ -140,7 +175,7 @@ if !ERRORS! equ 0 (
echo.
echo 다음 단계:
echo 1. .env 파일을 환경에 맞게 수정
echo 2. DB 생성 (또는 docker compose -f docker-compose-dev.yml up -d)
echo 2. DB 생성 ^(또는 docker compose -f docker-compose-dev.yml up -d^)
echo 3. gradlew.bat bootRun
echo 4. http://localhost:8080/health 확인
) else (
@@ -149,4 +184,5 @@ if !ERRORS! equ 0 (
echo ==========================================
echo.
popd
endlocal

파일 보기

@@ -3,7 +3,6 @@
# WBX Spring Core — Linux/macOS 설치 스크립트
# 사용법: chmod +x scripts/install.sh && ./scripts/install.sh
# ============================================================
set -euo pipefail
# ---------- 색상 ----------
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; NC='\033[0m'
@@ -14,6 +13,11 @@ info() { echo -e " ${CYAN}[INFO]${NC} $1"; }
ERRORS=0
# ---------- 프로젝트 루트 설정 ----------
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
cd "$PROJECT_ROOT" || { echo "[FAIL] 프로젝트 루트를 찾을 수 없습니다: $SCRIPT_DIR/.."; exit 1; }
echo ""
echo "=========================================="
echo " WBX Spring Core — 설치 점검"
@@ -22,17 +26,100 @@ echo ""
# ---------- 1. JDK 21 ----------
echo "1. JDK 확인"
JDK_OK=0
if command -v java &>/dev/null; then
JAVA_VER=$(java -version 2>&1 | head -1 | awk -F '"' '{print $2}' | cut -d. -f1)
if [ "$JAVA_VER" -ge 21 ] 2>/dev/null; then
ok "JDK $JAVA_VER"
JDK_OK=1
else
fail "JDK $JAVA_VER (21 이상 필요)"
ERRORS=$((ERRORS + 1))
info "JDK $JAVA_VER 21 이상 필요, 자동 설치 시도..."
fi
else
fail "java 명령어 없음 — JDK 21 설치 필요"
ERRORS=$((ERRORS + 1))
info "java 명령어 없음 — 자동 설치 시도..."
fi
if [ $JDK_OK -eq 0 ]; then
if [[ "$(uname)" == "Darwin" ]]; then
# macOS — Homebrew
if command -v brew &>/dev/null; then
info "Homebrew로 Temurin JDK 21 설치 중..."
if brew install --cask temurin@21; then
export JAVA_HOME=$(/usr/libexec/java_home -v 21 2>/dev/null || true)
if [ -n "$JAVA_HOME" ]; then
export PATH="$JAVA_HOME/bin:$PATH"
ok "JDK 21 설치 완료 — $JAVA_HOME"
else
fail "JDK 설치 경로를 찾을 수 없습니다"
ERRORS=$((ERRORS + 1))
fi
else
fail "JDK 설치 실패 — 수동으로 JDK 21을 설치하세요"
ERRORS=$((ERRORS + 1))
fi
else
fail "Homebrew 없음 — https://adoptium.net 에서 JDK 21을 수동 설치하세요"
ERRORS=$((ERRORS + 1))
fi
else
# Linux — apt / yum / dnf
INSTALL_OK=0
if command -v apt-get &>/dev/null; then
info "apt로 Temurin JDK 21 설치 중..."
if sudo apt-get update -qq && sudo apt-get install -y temurin-21-jdk 2>/dev/null; then
INSTALL_OK=1
else
# Adoptium 저장소 추가 후 재시도
info "Adoptium 저장소 추가 중..."
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://packages.adoptium.net/artifactory/api/gpg/key/public | sudo tee /etc/apt/keyrings/adoptium.asc >/dev/null
echo "deb [signed-by=/etc/apt/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/adoptium.list >/dev/null
if sudo apt-get update -qq && sudo apt-get install -y temurin-21-jdk; then
INSTALL_OK=1
fi
fi
elif command -v yum &>/dev/null; then
info "yum으로 Temurin JDK 21 설치 중..."
if sudo yum install -y temurin-21-jdk 2>/dev/null; then
INSTALL_OK=1
else
info "Adoptium 저장소 추가 중..."
cat <<-REPO | sudo tee /etc/yum.repos.d/adoptium.repo >/dev/null
[Adoptium]
name=Adoptium
baseurl=https://packages.adoptium.net/artifactory/rpm/rhel/\$releasever/\$basearch
enabled=1
gpgcheck=1
gpgkey=https://packages.adoptium.net/artifactory/api/gpg/key/public
REPO
if sudo yum install -y temurin-21-jdk; then
INSTALL_OK=1
fi
fi
else
fail "패키지 관리자를 찾을 수 없음 — https://adoptium.net 에서 JDK 21을 수동 설치하세요"
ERRORS=$((ERRORS + 1))
fi
# 설치 결과 확인
if [ $INSTALL_OK -eq 1 ]; then
if command -v java &>/dev/null; then
JAVA_VER=$(java -version 2>&1 | head -1 | awk -F '"' '{print $2}' | cut -d. -f1)
if [ "$JAVA_VER" -ge 21 ] 2>/dev/null; then
ok "JDK 21 설치 완료"
else
fail "JDK 설치 후에도 버전이 21 미만입니다"
ERRORS=$((ERRORS + 1))
fi
else
fail "JDK 설치 후 java 명령어를 찾을 수 없습니다"
ERRORS=$((ERRORS + 1))
fi
elif [ $INSTALL_OK -eq 0 ] && command -v apt-get &>/dev/null || command -v yum &>/dev/null; then
fail "JDK 설치 실패 — 수동으로 JDK 21을 설치하세요"
ERRORS=$((ERRORS + 1))
fi
fi
fi
# ---------- 2. Git ----------
@@ -57,8 +144,8 @@ echo "4. Gradle 빌드"
if [ $ERRORS -gt 0 ]; then
fail "사전 요구사항 미충족 — 빌드 건너뜀"
else
chmod +x gradlew
if ./gradlew build -x test --console=plain -q; then
chmod +x "$PROJECT_ROOT/gradlew"
if "$PROJECT_ROOT/gradlew" build -x test --console=plain -q; then
ok "BUILD SUCCESSFUL"
else
fail "빌드 실패"
@@ -68,8 +155,8 @@ fi
# ---------- 5. .env 템플릿 ----------
echo "5. 환경변수 파일"
if [ ! -f .env ]; then
cat > .env << 'ENVEOF'
if [ ! -f "$PROJECT_ROOT/.env" ]; then
cat > "$PROJECT_ROOT/.env" << 'ENVEOF'
# ===== WBX Spring Core — 환경변수 =====
# 이 파일을 환경에 맞게 수정하세요.
@@ -119,7 +206,7 @@ LOG_PATH=/opt/wbx-app/logs/app.log
# AWS_ACCESS_KEY=
# AWS_SECRET_KEY=
ENVEOF
chmod 600 .env
chmod 600 "$PROJECT_ROOT/.env"
ok ".env 생성 완료 (값을 수정하세요)"
else
warn ".env 이미 존재 — 건너뜀"
@@ -127,7 +214,7 @@ fi
# ---------- 6. 디렉토리 ----------
echo "6. 디렉토리 생성"
mkdir -p logs uploads backup
mkdir -p "$PROJECT_ROOT/logs" "$PROJECT_ROOT/uploads" "$PROJECT_ROOT/backup"
ok "logs/ uploads/ backup/"
# ---------- 결과 ----------

5
scripts/run-install.bat 일반 파일
파일 보기

@@ -0,0 +1,5 @@
@echo off
set "JAVA_HOME=C:\Program Files\Eclipse Adoptium\jdk-21.0.10.7-hotspot"
set "PATH=%JAVA_HOME%\bin;%PATH%"
cd /d "%~dp0.."
call scripts\install.bat