Redmine #546 - 외부 VM 배포 설계
프로젝트 개요
VPD Backoffice는 Oracle Database VPD/ORDS 기능을 백오피스 권한 테이블로 제어하는 Spring Boot 관리 도구다. 사용자는 Oracle DB schema user가 아니라 Bearer Token으로 식별되는 application user이며, 사용자/그룹/역할/권한/행 규칙/컬럼 NULL 처리 설정이 VPD policy function과 ORDS 조회 결과에 반영된다.
목표
외부 VM에 VPD Backoffice를 올려 상시 실행하고, 이후 개선 작업을 같은 방식으로 반복 배포할 수 있게 한다.
초기 확인 결과
- 초기 확인 시점에는
~/.ssh/config에Host hermes항목이 잡히지 않아ssh hermes가Could not resolve hostname hermes로 실패했다. - 이후
Host hermes가130.162.134.59,User opc,IdentityFile /Users/joungminko/devkit/credential/8-31.pem로 확인됐다. - 로컬
.env는TNS_ADMIN=/Users/.../Wallet_D8AUKRO81636MON0처럼 로컬 절대 경로를 사용하므로, VM 배포 시 wallet 디렉토리와TNS_ADMIN을 원격 경로로 재작성해야 한다.
배포 방식
- 기본 대상 SSH host는
hermes로 두되, 스크립트 인자로 다른 SSH alias를 받을 수 있게 한다. - 로컬에서
mvn -DskipTests package로 jar를 빌드한다. - 원격 디렉토리 기본값은
~/apps/vpd-backoffice다. - 배포 패키지 구성:
- Spring Boot executable jar
- VM용
.env - ADB wallet 디렉토리
start.sh,stop.sh,status.sh
- VM용
.env는 로컬.env를 기반으로 하되 아래 값을 원격 경로 기준으로 덮어쓴다.TNS_ADMINBACKOFFICE_DB_URLBACKOFFICE_ORDS_DB_URLBACKOFFICE_PORT
- 원격 프로세스는
nohup java -jar app.jar방식으로 기동한다.- systemd 등록은 VM의 sudo 정책과 포트 공개 정책이 확정된 뒤 별도 이슈에서 다룬다.
완료 기준
scripts/deploy-backoffice-vm.sh가 jar,.env, wallet, start/stop/status 스크립트를 원격에 설치할 수 있다.- 대상 alias가 없으면 명확하게 실패한다.
- 배포 후 원격
status.sh와 HTTP/login헬스체크가 가능하다. - OCI NSG와 VM firewalld에서 운영자 IP 기준
8082/tcp접근을 허용한다.
배포 결과
- 배포 대상:
hermes/opc@130.162.134.59 - 원격 경로:
/home/opc/apps/vpd-backoffice - Java runtime:
java-21-openjdk-headless - 기동 방식:
/home/opc/apps/vpd-backoffice/start.sh - PID 파일:
/home/opc/apps/vpd-backoffice/app.pid - 로그 파일:
/home/opc/apps/vpd-backoffice/app.log - VM firewalld:
8082/tcpopen - OCI NSG:
218.39.170.82/32 -> tcp/8082ingress 추가 - 외부 헬스체크:
http://130.162.134.59:8082/loginHTTP 200
검증
mvn testscripts/deploy-backoffice-vm.sh --dry-runssh hermes접속 확인scripts/deploy-backoffice-vm.sh --host hermes --skip-build- 원격 내부
/loginHTTP 200 - 외부
/loginHTTP 200