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은 다음에 포함되어 있습니다:
@@ -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:
|
||||
|
||||
새 Issue에서 참조
사용자 차단