Post

Balance-Book 개발기 (6) - 백엔드 배포환경에 ADB 연결

Balance-Book 개발기 (6) - 백엔드 배포환경에 ADB 연결

📝 작업 개요

.NET 백엔드를 Railway에 배포하고, OCI ADB <-> Railway <-> API 호출 테스트 완료.

Railway와 비슷한 방식으로 Render에 적용 - 2025.06.26


🔧 주요 작업 내용

📦 1. Oracle Wallet을 Base64로 변환하여 Docker 이미지에 통합

  • Wallet 파일(.zip) → base64로 인코딩 후 환경변수 또는 Secret File로 등록

✅ Railway

  • Railway 환경변수(Variables)에 base64 문자열 등록
  • Docker 컨테이너 내 entrypoint.sh에서 복호화 & unzip
1
2
echo "$WALLET_B64" | base64 -d > /app/wallet.zip
unzip -o /app/wallet.zip -d /app/wallet

✅ Render

  • Secret File 업로드 가능. 단, 바이너리 파일은 불가.
  • .zip을 base64로 변환한 .txt 파일을 Secret File로 등록
  • entrypoint_render.sh파일로 복호화 및 unzip 수행 ※ Render 배포용 .sh 파일 분리
1
2
cat /etc/secrets/Wallet_A_b64.txt | base64 -d > /app/wallet.zip
unzip /app/wallet.zip -d /app/wallet

🔐 2. .NET 백엔드 연결 문자열 환경변수로 분리

1
2
3
4
5
var user = Environment.GetEnvironmentVariable("");
var pw = Environment.GetEnvironmentVariable("");
var dataSource = builder.Configuration.GetConnectionString("dataSource");

var connectionString = $"User Id={user};Password={pw};Data Source={dataSource};Connection Timeout=30;";
  • 민감 정보는 Railway/Render의 환경변수 기능으로 관리
  • 연결 문자열 일부만 appsettings.json에 정의하고, 나머지는 런타임 조합

🌍 3. 외부 IP 확인 및 출력

  • curl ifconfig.meentrypoint.sh 또는 .NET 앱 시작 시점에 추가하여 로그에 외부 IP 출력
1
2
echo "🌍 현재 외부 IP:"
curl ifconfig.me || wget -qO- ifconfig.me

🛡️ 4. Oracle Cloud ACL(Access Control List) 설정

  • Oracle Autonomous DB → Network 설정에서
  • Access type: Allow secure access from specified IPs and VCNs
  • ACL 항목에 외부 배포 서버의 IP를 수동 등록

⚠️ 주의

  • Railway / Render는 재배포 시마다 외부 IP가 바뀔 수 있음
  • 그에 따라 Oracle ACL에서 접속 차단 발생 가능

✅ 대안

  • Oracle REST API로 현재 IP를 자동 등록하는 스크립트 구성
  • GitHub Actions 또는 앱 실행 시점에 IP → ACL 업데이트 자동화

🚀 5. 배포 후, API 호출하여 정상 응답 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[
  {
    "date": "2025-06-08T00:00:00",
    "dayOfWeek": "SUN",
    "routineChecks": [
      {
        "templateId": "T100",
        "status": "PROG",
        "checkTime": "2025-06-08T00:00:00"
      }
    ]
  },
  ...
]

🔮 향후 계획

  • Oracle ACL 자동화 스크립트(Curl + REST API) 구성
  • 루틴체크기능 프론트 <-> 백엔드 연결
This post is licensed under CC BY 4.0 by the author.