fix: DB 설정 통일 및 설치 스크립트에 Redis/MySQL 연결 체크 추가

- DB 기본값을 ws.ubuilder.co.kr/mos/jsh로 전체 통일
- context-path /spring → / 로 변경
- install.sh/bat에 Redis 자동 시작, MySQL 연결 확인 단계 추가
- health URL /health → /actuator/health 수정
- 개발환경 가이드 문서 동기화

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
이 Commit은 다음에 포함되어 있습니다:
2026-03-25 19:01:09 +09:00
부모 dc108df513
커밋 ce70702240
8개의 변경된 파일131개의 추가작업 그리고 49개의 파일을 삭제

파일 보기

@@ -12,9 +12,9 @@ services:
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: wbx_spring
MYSQL_USER: wbxapp
MYSQL_PASSWORD: password
MYSQL_DATABASE: mos
MYSQL_USER: jsh
MYSQL_PASSWORD: jsh@
MYSQL_ROOT_PASSWORD: rootpassword
volumes:
- mysql_dev:/var/lib/mysql
@@ -26,9 +26,9 @@ services:
ports:
- "5432:5432"
environment:
POSTGRES_DB: wbx_spring
POSTGRES_USER: wbxapp
POSTGRES_PASSWORD: password
POSTGRES_DB: mos
POSTGRES_USER: jsh
POSTGRES_PASSWORD: jsh@
volumes:
- pg_dev:/var/lib/postgresql/data

파일 보기

@@ -9,8 +9,8 @@ services:
environment:
SPRING_PROFILES_ACTIVE: prod,mysql
JWT_SECRET: ${JWT_SECRET}
SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/wbx_spring?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true
SPRING_DATASOURCE_USERNAME: wbxapp
SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/mos?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true
SPRING_DATASOURCE_USERNAME: jsh
SPRING_DATASOURCE_PASSWORD: ${DB_PASSWORD}
SPRING_DATA_REDIS_HOST: redis
SERVER_CONTEXT_PATH: ${SERVER_CONTEXT_PATH:-/}
@@ -21,7 +21,7 @@ services:
condition: service_started
restart: always
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://localhost:8080/health"]
test: ["CMD", "wget", "-q", "--spider", "http://localhost:8080/actuator/health"]
interval: 30s
timeout: 3s
retries: 3
@@ -29,8 +29,8 @@ services:
db:
image: mysql:8.0
environment:
MYSQL_DATABASE: wbx_spring
MYSQL_USER: wbxapp
MYSQL_DATABASE: mos
MYSQL_USER: jsh
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
ports:

파일 보기

@@ -114,9 +114,9 @@
+------------------+----------+------------------------------------------+
DB 생성 예시 (MySQL):
CREATE DATABASE wbx_spring CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wbxapp'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON wbx_spring.* TO 'wbxapp'@'localhost';
CREATE DATABASE mos CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'jsh'@'%' IDENTIFIED BY 'jsh@';
GRANT ALL ON mos.* TO 'jsh'@'%';
[2-3] Redis
@@ -155,8 +155,8 @@
docker compose -f docker-compose-dev.yml up -d
# 4) .env 파일 수정 (DB 비밀번호를 docker-compose 설정에 맞춤)
# DB_USER=wbxapp
# DB_PASS=password
# DB_USER=jsh
# DB_PASS=jsh@
# JWT_SECRET=dev-secret-key-for-local-development-only
# 5) 앱 실행
@@ -164,7 +164,7 @@
./gradlew bootRun (Linux/macOS)
# 6) 확인
http://localhost:8080/health → {"status":"UP"}
http://localhost:8080/actuator/health → {"status":"UP"}
http://localhost:8080/swagger-ui → API 문서
http://localhost:8080/admin/login → 관리 콘솔
@@ -194,9 +194,9 @@
+------------------+--------+----------+------------------------------+
| 서비스 | 포트 | 계정 | 비고 |
+------------------+--------+----------+------------------------------+
| MySQL 8.0 | 3306 | wbxapp | PW: password (기본 프로필) |
| MySQL 8.0 | 3306 | jsh | PW: jsh@ (기본 프로필) |
| | | | root PW: rootpassword |
| PostgreSQL 16 | 5432 | wbxapp | PW: password (--profile pg) |
| PostgreSQL 16 | 5432 | jsh | PW: jsh@ (--profile pg) |
| Redis 7 | 6379 | - | 인증 없음 (개발용) |
+------------------+--------+----------+------------------------------+

파일 보기

@@ -208,7 +208,7 @@ echo " [ ] DB 생성 + 사용자 권한 부여"
echo " [ ] Redis 설치 + bind 127.0.0.1 + requirepass"
echo " [ ] JAR 빌드: ./gradlew bootJar"
echo " [ ] 서비스 시작: sudo systemctl start ${SERVICE_NAME}"
echo " [ ] 확인: curl http://localhost:8080/health"
echo " [ ] 확인: curl http://localhost:8080/actuator/health"
echo " [ ] 리버스 프록시 설정 (Nginx/Caddy)"
echo " [ ] SSL 인증서 설치"
echo "=========================================="

파일 보기

@@ -88,8 +88,53 @@ if !ERRORLEVEL! equ 0 (
echo [WARN] Docker 미설치 — DB/Redis를 직접 설치해야 합니다
)
:: ---------- 4. 빌드 ----------
echo 4. Gradle 빌드
:: ---------- 4. Redis 확인 ----------
echo 4. Redis 확인
set "REDIS_OK=0"
where redis-cli >nul 2>&1
if !ERRORLEVEL! equ 0 (
redis-cli -h localhost -p 6379 ping 2>nul | findstr /i "PONG" >nul 2>&1
if !ERRORLEVEL! equ 0 (
echo [OK] Redis 응답 OK
set "REDIS_OK=1"
)
)
if !REDIS_OK! equ 0 (
where docker >nul 2>&1
if !ERRORLEVEL! equ 0 (
docker ps --format "{{.Names}}" 2>nul | findstr /i "redis" >nul 2>&1
if !ERRORLEVEL! equ 0 (
echo [OK] Redis Docker 컨테이너 실행 중
) else (
echo [INFO] Redis 미실행 — Docker로 자동 시작...
docker run -d --name redis -p 6379:6379 redis:7-alpine >nul 2>&1
if !ERRORLEVEL! equ 0 (
echo [OK] Redis 컨테이너 시작 완료
) else (
echo [WARN] Redis 자동 시작 실패 — 수동으로 Redis를 실행하세요
)
)
) else (
echo [WARN] Redis 연결 불가 — Redis를 설치/실행하세요
)
)
:: ---------- 5. MySQL 연결 확인 ----------
echo 5. MySQL 연결 확인
where mysql >nul 2>&1
if !ERRORLEVEL! equ 0 (
mysql -h"%DB_HOST%" -P"%DB_PORT%" -u"%DB_USER%" -p"%DB_PASS%" -e "USE %DB_NAME%;" >nul 2>&1
if !ERRORLEVEL! equ 0 (
echo [OK] MySQL 연결 OK ^(%DB_USER%@%DB_HOST%:%DB_PORT%/%DB_NAME%^)
) else (
echo [WARN] MySQL 연결 실패 — .env 의 DB 설정을 확인하세요
)
) else (
echo [INFO] mysql 클라이언트 없음 — DB 연결은 앱 시작 시 확인됩니다
)
:: ---------- 6. 빌드 ----------
echo 6. Gradle 빌드
if !ERRORS! GTR 0 (
echo [FAIL] 사전 요구사항 미충족 — 빌드 건너뜀
) else (
@@ -102,8 +147,8 @@ if !ERRORS! GTR 0 (
)
)
:: ---------- 5. .env 템플릿 ----------
echo 5. 환경변수 파일
:: ---------- 7. .env 템플릿 ----------
echo 7. 환경변수 파일
if not exist "!PROJECT_ROOT!\.env" (
(
echo # ===== WBX Spring Core — 환경변수 =====
@@ -119,11 +164,11 @@ if not exist "!PROJECT_ROOT!\.env" (
echo JWT_SECRET=your-production-secret-key-minimum-256-bits-long
echo.
echo # --- DB ---
echo DB_HOST=localhost
echo DB_HOST=ws.ubuilder.co.kr
echo DB_PORT=3306
echo DB_NAME=wbx_spring
echo DB_USER=wbxapp
echo DB_PASS=StrongP@ss
echo DB_NAME=mos
echo DB_USER=jsh
echo DB_PASS=jsh@
echo.
echo # --- Redis ---
echo SPRING_DATA_REDIS_HOST=localhost
@@ -160,8 +205,8 @@ if not exist "!PROJECT_ROOT!\.env" (
echo [WARN] .env 이미 존재 — 건너뜀
)
:: ---------- 6. 디렉토리 ----------
echo 6. 디렉토리 생성
:: ---------- 8. 디렉토리 ----------
echo 8. 디렉토리 생성
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"
@@ -177,7 +222,7 @@ if !ERRORS! equ 0 (
echo 1. .env 파일을 환경에 맞게 수정
echo 2. DB 생성 ^(또는 docker compose -f docker-compose-dev.yml up -d^)
echo 3. gradlew.bat bootRun
echo 4. http://localhost:8080/health 확인
echo 4. http://localhost:8080/actuator/health 확인
) else (
echo 오류 !ERRORS!건 — 위의 [FAIL] 항목을 해결하세요
)

파일 보기

@@ -139,8 +139,45 @@ else
warn "Docker 미설치 — DB/Redis를 직접 설치해야 합니다"
fi
# ---------- 4. 빌드 ----------
echo "4. Gradle 빌드"
# ---------- 4. Redis 확인 ----------
echo "4. Redis 확인"
REDIS_HOST="${SPRING_DATA_REDIS_HOST:-localhost}"
REDIS_PORT="${SPRING_DATA_REDIS_PORT:-6379}"
if command -v redis-cli &>/dev/null && redis-cli -h "$REDIS_HOST" -p "$REDIS_PORT" ping 2>/dev/null | grep -q PONG; then
ok "Redis 응답 OK ($REDIS_HOST:$REDIS_PORT)"
elif command -v docker &>/dev/null; then
if docker ps --format '{{.Names}}' 2>/dev/null | grep -q redis; then
ok "Redis Docker 컨테이너 실행 중"
else
info "Redis 미실행 — Docker로 자동 시작..."
if docker run -d --name redis -p "${REDIS_PORT}:6379" redis:7-alpine &>/dev/null; then
ok "Redis 컨테이너 시작 완료"
else
warn "Redis 자동 시작 실패 — 수동으로 Redis를 실행하세요"
fi
fi
else
warn "Redis 연결 불가 ($REDIS_HOST:$REDIS_PORT) — Redis를 설치/실행하세요"
fi
# ---------- 5. MySQL 연결 확인 ----------
echo "5. MySQL 연결 확인"
DB_HOST="${DB_HOST:-ws.ubuilder.co.kr}"
DB_PORT="${DB_PORT:-3306}"
DB_NAME="${DB_NAME:-mos}"
DB_USER="${DB_USER:-jsh}"
if command -v mysql &>/dev/null; then
if mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"${DB_PASS:-}" -e "USE $DB_NAME;" 2>/dev/null; then
ok "MySQL 연결 OK ($DB_USER@$DB_HOST:$DB_PORT/$DB_NAME)"
else
warn "MySQL 연결 실패 — .env 의 DB 설정을 확인하세요"
fi
else
info "mysql 클라이언트 없음 — DB 연결은 앱 시작 시 확인됩니다"
fi
# ---------- 6. 빌드 ----------
echo "6. Gradle 빌드"
if [ $ERRORS -gt 0 ]; then
fail "사전 요구사항 미충족 — 빌드 건너뜀"
else
@@ -153,8 +190,8 @@ else
fi
fi
# ---------- 5. .env 템플릿 ----------
echo "5. 환경변수 파일"
# ---------- 7. .env 템플릿 ----------
echo "7. 환경변수 파일"
if [ ! -f "$PROJECT_ROOT/.env" ]; then
cat > "$PROJECT_ROOT/.env" << 'ENVEOF'
# ===== WBX Spring Core — 환경변수 =====
@@ -170,11 +207,11 @@ SERVER_CONTEXT_PATH=/
JWT_SECRET=your-production-secret-key-minimum-256-bits-long
# --- DB ---
DB_HOST=localhost
DB_HOST=ws.ubuilder.co.kr
DB_PORT=3306
DB_NAME=wbx_spring
DB_USER=wbxapp
DB_PASS=StrongP@ss
DB_NAME=mos
DB_USER=jsh
DB_PASS=jsh@
# --- Redis ---
SPRING_DATA_REDIS_HOST=localhost
@@ -212,8 +249,8 @@ else
warn ".env 이미 존재 — 건너뜀"
fi
# ---------- 6. 디렉토리 ----------
echo "6. 디렉토리 생성"
# ---------- 8. 디렉토리 ----------
echo "8. 디렉토리 생성"
mkdir -p "$PROJECT_ROOT/logs" "$PROJECT_ROOT/uploads" "$PROJECT_ROOT/backup"
ok "logs/ uploads/ backup/"
@@ -227,7 +264,7 @@ if [ $ERRORS -eq 0 ]; then
echo " 1. .env 파일을 환경에 맞게 수정"
echo " 2. DB 생성 (또는 docker compose -f docker-compose-dev.yml up -d)"
echo " 3. ./gradlew bootRun"
echo " 4. http://localhost:8080/health 확인"
echo " 4. http://localhost:8080/actuator/health 확인"
else
echo -e " ${RED}오류 ${ERRORS}건 — 위의 [FAIL] 항목을 해결하세요${NC}"
fi

파일 보기

@@ -3,9 +3,9 @@
spring:
datasource:
url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:wbx_spring}?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Seoul
username: ${DB_USER:wbxapp}
password: ${DB_PASS:password}
url: jdbc:mysql://${DB_HOST:ws.ubuilder.co.kr}:${DB_PORT:3306}/${DB_NAME:mos}?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Seoul
username: ${DB_USER:jsh}
password: ${DB_PASS:jsh@}
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
maximum-pool-size: ${DB_POOL_SIZE:20}

파일 보기

@@ -17,9 +17,9 @@ spring:
enabled: false # 개발 시 hibernate ddl-auto 사용, 프로덕션 시 true
datasource:
url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:wbx_spring}?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Seoul
username: ${DB_USER:accura}
password: ${DB_PASS:ubuilder0117}
url: jdbc:mysql://${DB_HOST:ws.ubuilder.co.kr}:${DB_PORT:3306}/${DB_NAME:mos}?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Seoul
username: ${DB_USER:jsh}
password: ${DB_PASS:jsh@}
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
maximum-pool-size: 20
@@ -35,7 +35,7 @@ server:
port: 8080
forward-headers-strategy: native
servlet:
context-path: ${SERVER_CONTEXT_PATH:/spring} # 독립 도메인 시 '/' 또는 제거
context-path: ${SERVER_CONTEXT_PATH:/}
# WBX Spring Framework
wbx: