사이드 프로젝트를 배포할 클라우드 서비스로 AWS, GCP, Oracle Cloud중에 고민을 하였습니다.
비용 측면에서 AWS, GCP, Oracle Cloud 모두 무료로 사용할 수 있지만 AWS는 1년의 시간, GCP는 3개월의 기간만 무료 사용할 수 있다는 제한이 있습니다.
제공하는 서비스는 부족하지만 Oracle Cloud는 평생 무료이기 때문에 비용 측면과 장기적인 사용 가능성을 고려하여 Oracle Cloud를 사용하기로 선택하였고 Oracle Cloud instance와 DB를 사용해서 배포하는 과정을 정리해보겠습니다.
사용하는 기술 스택은 아래와 같습니다.
Spring boot(3.23), JDK(17), docker, ubuntu(20.04), nginx, let's encrypt
오라클 클라우드 회원가입, 로그인은 다른 블로그글에도 정리가 되어있는 글이 많으니 생략하겠습니다.
Oracle DB이외의 DB는 유료이기 때문에 Oracle Database 메뉴를 선택합니다.
이전에 생성한 db가 있어서 하나가 있고 처음 들어올 경우 아무것도 없을 겁니다.
- 표시 이름: oracle cloud 사이트에서 보여지는 값으로 원하는 값 입력
- 데이터 베이스 이름: tnsnames를 생성하는데 사용되며 예를들어 oracl 이라고 이름을 생성하면 tnsnames 은 oracle_high 와 같이 생성되고 추후에 접속할 때 다시 설명하겠습니다.
- 작업 로드 유형 선택: 트랜잭션 처리(추천)
- 배치 유형 선택: 서버 미사용
- 데이터 베이스 구성: 항상 무료
- 데이터베이스 버전 선택: 19c
- 사용자 이름: db접속할 때 username으로 사용(admin으로 고정)
- 비밀번호: db접속할 때 password로 사용하므로 잘 기억하기
- 라인 센스 및 Oracle Database 에디션 선택: 무료로 사용해야 하므로 전환 클릭하지 않기
- 연락처 전자 메일: 알림을 받고 싶다면 이메일 입력(선택)
- 자율운영 데이터 베이스 생성: 데이터 베이스 생성 완료
데이터 베이스를 생성하고 잠시기다리고 사용가능으로 바뀌면 데이터베이스 접속을 클릭합니다.
비밀번호: 전자지갑 비밀번호 설정 후 다운로드 받습니다.
압축해제 하지 않고 그대로 나둡니다.
SQL Developer은 Oracle DB에 접속할 수 있도록 도와주는 RDBMS로 download 받지 않았다면 아래 페이지에 들어가서 다운로드를 받아줍니다.
https://www.oracle.com/database/sqldeveloper/technologies/download/
JDK included 인 버전을 받는 것이 편합니다.
sqldeveloper 실행 파일을 클릭하여 sqldeveloper를 실행 시킵니다.
- Name: 원하는 값 입력
- 사용자 이름: admin(데이터 베이스 생성할 때 만들어준 이름으로 초기에는 admin을 고정)
- 비밀번호: 데이터 베이스 생성할 때 입력한 비밀번호 입력
- 접속 유형: 클라우드 전자지갑
- 구성 파일: download 받은 전자지갑 압축파일 선택
- 서비스: oracl_high 선택
테스트해서 상태가 성공이면 접속 클릭하여 접속
Intellij Ultimate에서 사용할 수 있는 db 접속 툴로 Spring boot를 사용할 때 편리하게 db접속할 수 있습니다.
Driver를 donwload 받아야한다는 안내가 나오면 클릭하여 download 받아주면 됩니다.
- Name: 원하는 값 입력
- Connection type : TNS
- TNSADMIN: 전자지갑경로
- TNS name: oracle_high
- User: admin
- Password: 데이터베이스 생성시 입력한 비밀번호 입력
- URL: TNS name 작성하면 자동으로 입력됨
Test Connection한 뒤 성공이 되면 OK를 눌러서 접속
db접속 정보만 알면 되기 때문에 프로젝트 생성하는 과정은 생략하도록 하겠습니다.
build.gradle에 아래와 같이 oracle cloud db에 접속하기 위한 의존성을 추가합니다.
// oracle cloud db
runtimeOnly 'com.oracle.database.jdbc:ojdbc11'
implementation 'com.oracle.database.security:osdt_cert'
implementation 'com.oracle.database.security:oraclepki'
implementation 'com.oracle.database.security:osdt_core'
압축되어있는 전자지갑폴더를 압축해제 후 application.yaml 의 설정 값을 아래와 같이 입력합니다.
spring:
datasource:
url: jdbc:oracle:thin:@oracl_high?TNS_ADMIN={전자지갑경로}
driver-class-name: oracle.jdbc.OracleDriver
username: admin
password: {전자지갑 비밀번호}
jpa:
hibernate:
ddl-auto: create
database-platform: org.hibernate.dialect.OracleDialect
show-sql: true
프로젝트가 에러 없이 실행되면 Oracle cloud db에 접속성공입니다.
- 에러가 발생한다면 전자지갑 경로나 username, password를 실수 했을 확률이 높습니다.
- 프로젝트가 실행은 되었는데 ddl문이 실행중 에러가 발생해다면 oracle db 예약어 때문일 가능성이 높으므로 아래 사이트에 접속하여 예약어랑 겹치는 테이블명이나 컬럼명이 있는지 확인합니다.
https://docs.oracle.com/cloud/help/ko/pbcs_common/PFUSA/restrictions_for_dimensions_members_aliases_and_forms.htm#PFUSA-f_restricted_names_2
Oracle Cloud Instance 생성 및 접속
https://velog.io/@wontaekoh/Oracle-Cloud-Instance-%EC%83%9D%EC%84%B1-%EB%B0%8F-%EC%A0%91%EC%86%8D