--- ## 설치 및 실행 ### 1) 소스 가져오기 ``` git clone cd VMIS-interface ``` ### 2) 빌드 ``` # 테스트 포함 빌드 ./gradlew build # 테스트 제외 빌드(필요 시) ./gradlew clean build -x test ``` Windows PowerShell에서는 `./gradlew.bat` 사용 가능합니다. ### 3) 실행 #### 방법 1: Gradle bootRun 사용 (개발 권장) **개발 환경 (포트 8081)** ```bash # Linux/Mac ./gradlew bootRun --args='--spring.profiles.active=dev' # Windows gradlew.bat bootRun --args='--spring.profiles.active=dev' ``` **운영 환경 (포트 8080)** ```bash # Linux/Mac ./gradlew bootRun --args='--spring.profiles.active=prd' # Windows gradlew.bat bootRun --args='--spring.profiles.active=prd' ``` #### 방법 2: JAR 파일 실행 (배포 권장) **개발 환경** ```bash # Linux/Mac java -Dspring.profiles.active=dev -jar build/libs/VMIS-interface-0.0.1-SNAPSHOT.jar # Windows PowerShell java -Dspring.profiles.active=dev -jar build/libs/VMIS-interface-0.0.1-SNAPSHOT.jar # 또는 환경변수 사용 (Windows PowerShell) $env:SPRING_PROFILES_ACTIVE = "dev" java -jar build/libs/VMIS-interface-0.0.1-SNAPSHOT.jar ``` **운영 환경 (환경변수 포함)** ```bash # Linux/Mac export SPRING_PROFILES_ACTIVE=prd export VMIS_SYSTEM_INFO_SYS_ID="41-345" export VMIS_SYSTEM_SIGUNGU_CODE="41460" java -jar build/libs/VMIS-interface-0.0.1-SNAPSHOT.jar # Windows PowerShell $env:SPRING_PROFILES_ACTIVE = "prd" $env:VMIS_SYSTEM_INFO_SYS_ID = "41-345" $env:VMIS_SYSTEM_SIGUNGU_CODE = "41460" java -jar build/libs/VMIS-interface-0.0.1-SNAPSHOT.jar ``` #### 백그라운드 실행 (Linux 서버) ```bash # nohup 사용 (기본 java 경로, 콘솔 출력을 app.log에 저장) nohup java -Dspring.profiles.active=prd -jar build/libs/VMIS-interface-0.0.1-SNAPSHOT.jar > app.log 2>&1 & # Java 경로를 직접 지정하는 방법 (Java 17 이상) nohup /usr/bin/java -Dspring.profiles.active=prd -jar build/libs/VMIS-interface-0.0.1-SNAPSHOT.jar > app.log 2>&1 & # 또는 사용자 지정 Java 경로 사용 nohup /opt/jdk-17/bin/java -Dspring.profiles.active=prd -jar build/libs/VMIS-interface-0.0.1-SNAPSHOT.jar > app.log 2>&1 & # 콘솔 출력을 남기지 않을 때 (애플리케이션 자체 로그는 logback-spring.xml 설정에 따라 별도 저장됨) # 개발 환경 nohup /usr/bin/java -Dspring.profiles.active=dev -jar build/libs/VMIS-interface-0.0.1-SNAPSHOT.jar > /dev/null 2>&1 & # 운영 환경 (애플리케이션 로그: d:/data/VMIS-interface/logs/vmis-interface.log) nohup /usr/bin/java -Dspring.profiles.active=prd -jar build/libs/VMIS-interface-0.0.1-SNAPSHOT.jar > /dev/null 2>&1 & # Java 경로 확인 방법 which java # 또는 readlink -f $(which java) # 프로세스 확인 ps aux | grep VMIS-interface # 종료 kill -9 ``` **참고:** `/dev/null` 사용 시 콘솔 출력만 버려지며, 애플리케이션 자체 로그는 `logging.file.path` 설정에 따라 정상적으로 기록됩니다. - 개발: `d:/data/VMIS-interface/logs/vmis-interface.log` - 운영: `d:/data/VMIS-interface/logs/vmis-interface.log` #### 백그라운드 실행 (Windows 서버) **PowerShell - 백그라운드 프로세스로 실행** ```powershell # 개발 환경 (콘솔 출력을 app.log에 저장) Start-Process -NoNewWindow -FilePath "java" -ArgumentList "-Dspring.profiles.active=dev","-jar","build\libs\VMIS-interface-0.0.1-SNAPSHOT.jar" -RedirectStandardOutput "app.log" -RedirectStandardError "app.log" # 운영 환경 (콘솔 출력을 app.log에 저장) Start-Process -NoNewWindow -FilePath "java" -ArgumentList "-Dspring.profiles.active=prd","-jar","build\libs\VMIS-interface-0.0.1-SNAPSHOT.jar" -RedirectStandardOutput "app.log" -RedirectStandardError "app.log" # Java 경로를 직접 지정하는 방법 Start-Process -NoNewWindow -FilePath "C:\Program Files\Java\jdk-17\bin\java.exe" -ArgumentList "-Dspring.profiles.active=prd","-jar","build\libs\VMIS-interface-0.0.1-SNAPSHOT.jar" -RedirectStandardOutput "app.log" -RedirectStandardError "app.log" # 콘솔 출력을 남기지 않을 때 (NUL로 리다이렉트) Start-Process -NoNewWindow -FilePath "java" -ArgumentList "-Dspring.profiles.active=prd","-jar","build\libs\VMIS-interface-0.0.1-SNAPSHOT.jar" -RedirectStandardOutput "NUL" -RedirectStandardError "NUL" ``` **CMD - javaw 사용 (콘솔 창 없이 실행)** ```cmd # 개발 환경 start /B javaw -Dspring.profiles.active=dev -jar build\libs\VMIS-interface-0.0.1-SNAPSHOT.jar # 운영 환경 start /B javaw -Dspring.profiles.active=prd -jar build\libs\VMIS-interface-0.0.1-SNAPSHOT.jar # Java 경로를 직접 지정 (경로에 공백이 있을 경우 빈 창제목 "" 필요) start "" /B "C:\Program Files\Java\jdk-17\bin\javaw.exe" -Dspring.profiles.active=prd -jar build\libs\VMIS-interface-0.0.1-SNAPSHOT.jar # 또는 절대 경로 사용 start "" /B "D:\DEV\.jdks\azul-17.0.14\bin\javaw.exe" -Dspring.profiles.active=prd -jar D:\workspace\git\VMIS-interface\build\libs\VMIS-interface-0.0.1-SNAPSHOT.jar cd /d d: cd D:\VMIS-interface\jdk1.8.0_271\bin java -Dspring.profiles.active=prd -jar D:\VMIS-interface\VMIS-interface-0.0.1-SNAPSHOT.jar # local : java -Dspring.profiles.active=prd -jar D:\workspace\git\VIPS\build\libs\VIPS-BOOT.war java -Dspring.profiles.active=prd -jar D:\VMIS-interface\VMIS-interface-0.0.1-SNAPSHOT.jar "D:\VMIS-interface\jdk1.8.0_271\bin\javaw.exe" -Dspring.profiles.active=prd -jar D:\VMIS-interface\VMIS-interface-0.0.1-SNAPSHOT.jar start "" /B "D:\VMIS-interface\jdk1.8.0_271\bin\javaw.exe" -Dspring.profiles.active=prd -jar D:\VMIS-interface\VMIS-interface-0.0.1-SNAPSHOT.jar ``` **참고:** `start` 명령어는 첫 번째 따옴표 문자열을 창 제목으로 인식하므로, 경로를 따옴표로 묶을 때는 앞에 빈 창제목 `""`을 추가해야 합니다. **프로세스 관리** ```powershell # 프로세스 확인 Get-Process | Where-Object {$_.ProcessName -like "*java*"} | Select-Object Id, ProcessName, Path # 또는 특정 포트로 확인 netstat -ano | findstr :18080 # 프로세스 종료 (PID로) Stop-Process -Id -Force # 또는 taskkill 사용 taskkill /F /PID ``` **Java 경로 확인 (Windows)** ```powershell # PowerShell where.exe java # 또는 (Get-Command java).Source # Java 버전 확인 java -version ``` **참고:** Windows 환경에서도 콘솔 출력을 `NUL`로 리다이렉트하면, 애플리케이션 자체 로그는 `d:/data/VMIS-interface/logs/vmis-interface.log`에 정상적으로 기록됩니다. ### 4) API 문서(Swagger UI) - 개발 환경: `http://localhost:8081/swagger-ui/index.html` - 운영 환경: `http://localhost:18080/swagger-ui/index.html` --- ## 실행 스크립트/명령(Gradle) - 테스트 실행: `./gradlew test` - 애플리케이션 실행(bootRun): `./gradlew bootRun --args='--spring.profiles.active=dev'` - 의존성 갱신: `./gradlew --refresh-dependencies` - --- ## GPKI 연계 - 구현: `gpki/GpkiService.java`, `gpki/RealGpkiService.java`, `gpki/NoopGpkiService.java` - 인증서/키 위치(예): `src/GPKI/certs/*` - 운영에서는 `RealGpkiService` 사용 및 JNI 라이브러리 로딩 필요(`lib/libgpkiapi_jni_1.5.jar`) - 유틸: `util/GpkiCryptoUtil.java`, `util/NewGpkiUtil.java` - 주의사항 - 운영 키/패스워드 노출 금지, 파일 권한/경로 점검 - 네이티브 라이브러리 로딩 경로와 JCE 정책 확인 ---