Files
vpd-permission-poc/docs/design/546-hermes-vm-deploy/README.md
2026-06-28 21:12:25 +09:00

2.9 KiB

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/configHost hermes 항목이 잡히지 않아 ssh hermesCould not resolve hostname hermes로 실패했다.
  • 이후 Host hermes130.162.134.59, User opc, IdentityFile /Users/joungminko/devkit/credential/8-31.pem로 확인됐다.
  • 로컬 .envTNS_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_ADMIN
    • BACKOFFICE_DB_URL
    • BACKOFFICE_ORDS_DB_URL
    • BACKOFFICE_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/tcp open
  • OCI NSG: 218.39.170.82/32 -> tcp/8082 ingress 추가
  • 외부 헬스체크: http://130.162.134.59:8082/login HTTP 200

검증

  • mvn test
  • scripts/deploy-backoffice-vm.sh --dry-run
  • ssh hermes 접속 확인
  • scripts/deploy-backoffice-vm.sh --host hermes --skip-build
  • 원격 내부 /login HTTP 200
  • 외부 /login HTTP 200