본문 바로가기
DevOps/클라우드

오라클 클라우드(OCI) 자율 운영 데이터베이스 연결하기

by yongckim 2022. 9. 28.
728x90
반응형

이번에 개인 프로젝트를 진행하면서 무료로 사용할 수 있는 오라클 클라우드의 자율운영 데이터베이스(오라클 DB)를 사용하게 되었습니다.

인텔리제이에서 개발하면서 내부 테이블 확인 등 쿼리를 날릴 수 있도록 데이터베이스 연동이 필요하다고 생각하였고 이를 위해 했던 삽질들을 기록하게 됐습니다.

여기서는 Database를 생성하는 과정이 아닌 생성후 DB 연결과정만 다룹니다.

삽질1,  OCID를 통해 연결하기

AWS에서 RDS로 DB를 연결할때 사용했던 것 처럼 OCID가 DB의 EndPoint 주소라고 생각했고 다음과 같이 Host에 OCID를 적고 User 정보를 입력했더니 연결에 실패했었습니다.

검색해보니 Oracle에 연결할 때 전자 지갑이라는 것이 필요하다는 것을 알게 되어 전자 지갑으로 연결하는 방법을 찾아보았습니다.

삽질2, OCI(Oracle Instant Client) 드라이버로 지정 후 연결하기

https://www.jetbrains.com/help/datagrip/connect-to-oracle-cloud-by-using-wallets.html

 

Connect to Oracle Cloud by using wallets | DataGrip

 

www.jetbrains.com

 

검색했을 때 다음과 같이 Oracle Cloud를 사용하여 OCI로 Oracle 연결하는 방법에 대한 공식문서를 찾을 수 있었고 해당 문서를 토대로 연결을 시도해봤습니다.

(OCI가 오라클 클라우드를 의미하는 Oracle Cloud Infrastructure인 줄 알았는데 그게 아닌 Oracle에 연결하기 위해 사용되는 드라이버인 Oracle Call Interface의 약자였습니다..)

사전준비

먼저 패키지를 저장할 디렉터리를 만듭시다. 경로는 크게 상관없으며, 설명의 편의성을 위해 앞으로 ~/Oracle/instantclient_19_8 경로를 기본으로 이야기 하겠습니다.

 

해당 방법은 먼저 해당 사이트(https://www.oracle.com/database/technologies/instant-client/downloads.html)에서 OS에 맞는 다음 패키지를  설치해야 합니다.

  • Basic Package
  • SQL*Plus Package
  • JDBC Supplement Package

그리고 받은 3개의 패키지를 압축 해제 후 "~/Oracle/instantclient_19_8"에 전부 넣습니다.

 

그 다음에 해당 사이트(https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html)에서 oraclepki.jar 파일을 다운받습니다.

 

사이트에 들어가면 oraclepki.jar 파일이 보이지 않는데 다음 압축파일에 같이 들어있으니 해당 파일을 다운받으면 됩니다.

압축 해제 후 oraclepki.jar 파일을 ~/Oracle/instantclient_19_8에 저장합니다.

 

그다음에 Oracle Cloud에 들어가서 자율운영 데이터베이스 -> 자율운영 데이터베이스 세부정보로 들어가서 DB 접속버튼을 누릅니다.

DB 접속을 누르면 전자 지갑을 다운로드 할 수 있으며 여기서 전자 지갑 다운로드를 누릅니다.

그 다음 비밀번호를 입력하고 다운로드 버튼을 누릅니다.

그다음에 저장한 전자지갑을 압축 해제 후 ~/Oracle/instantclient_19_8/network/wallet 경로에 저장합니다.

 

환경변수 추가(선택)

다음과 같은 값을 환경변수로 등록하면 작업을 단순화할 수 있습니다.

export ORACLE_HOME=~/Oracle/instantclient_19_8
export TNS_ADMIN=$ORACLE_HOME/network/admin
export NLS_LANG=English_America.UTF8
export PATH=$PATH:$ORACLE_HOME
 

ora 파일 구성

~/Oracle/instantclient_19_8/network/wallet 경로에서 ~/Oracle/instantclient_19_8/network/admin에 timenames.ora와 sqlnet.ora 파일 두개를 옮깁니다.
 
이때, sqlnet.org의 WALLET_LOCATION을 자신의 전자지갑이 있는 경로로 작성합니다.
WALLET_LOCATION = (SOURCE = (METHOD = file)
(METHOD_DATA = (DIRECTORY="/Users/jetbrains/Oracle/instantclient_19_8/network/wallet")))
SSL_SERVER_DN_MATCH=yes

# DIRECTORY="현재 전자지갑 경로"

oracle cloud 연결 하기

인텔리제이 기준으로 우측 상단에 Database를 선택한 후 + 버튼을 누른 후 DataSource -> Oracle로 이동합니다.

그 다음 Data Sources 옆에 Drivers를 선택합니다.

그 다음 Duplicate 버튼(+ 버튼 2번째 옆에 사각형 버튼) 눌러 Oracle 드라이버를 복제합니다.

그 다음 구분을 위해 Name을 Oracle[cloud]로 변경한 후

다음 파일을 추가합니다.

  • Driver Files의 + 버튼 -> Custom JARs... -> ~/Oracle/instantclient_19_8에서 ojdbc8.jar, orai18n.jar, oraclepki.jar 파일을 추가합니다.
  • Driver Files + 버튼 -> Native Library Path ->  ~/Oracle/instantclient_19_8 적용

이제 DataSource 설정은 끝났으니 OCI 연결을 하면 됩니다.

이번에는 Database -> + 버튼 -> Data Source -> Oracle[cloud]로 이동합니다.

이제 다음과 같이 정보를 넣고 연결하면 OCI 드라이버로 Oracle Cloud 자율운영 데이터베이스 연결이 완료됩니다.

  • Connection type : TNS
  • TNSADMIN : 드라이버를 설치한 디렉터리 (~/Oracle/instantclient_19_8
  • TNS name : Oracle Cloud의 DB 이름
  • Driver : OCI
  • User & Password : DB 생성시 지정했던 유저 ID + 패스워드

하지만 이 방법의 경우 Oracle에서 M1 MAC을 지원하지 않아서 아키텍처 문제로 계속 연결에 실패하였고 이에 대한 해결 방법을 찾지 못했습니다.

해결방법, Thin 드라이버로 전자지갑을 통해 연결하기

OCI 문제를 해결하기 위해 검색하던 중 다음 블로그를 발견하게 됐습니다.

https://shanepark.tistory.com/207

 

Mac) Oracle Cloud FreeTier 이용해 웹 어플리케이션 배포하기 6) 오라클 전자지갑 사용해 프로젝트와 연

관련 글 목록 Mac) Oracle FreeTier 이용해 웹 어플리케이션 배포하기 1)인스턴스 만들고 접속하기. Mac) Oracle FreeTier 이용해 웹 어플리케이션 배포하기 2) 톰캣 설치하기 및 배포 + 외부 접속 허용 Mac) Ora

shanepark.tistory.com

해당 블로그에서 전자 지갑 경로를 지정한 후 Thin 드라이버로 연결했을 때 연결이 잘 되는 것을 보고 해당 방법으로 시도해보았습니다.

  • Connection Type : TNS
  • TNSADMIN : 다운받은 전자지갑의 경로
  • TNS name : timenames.ora에 적혀있는 이름(db이름_high, db이름_middle 등)
  • Driver : Thin
  • User & Password : DB 생성시 지정했던 유저 ID + 패스워드

삽질끝에 드디어 DB 테스트 연결이 성공되었습니다

DB 드라이버 Thin과 OCI Driver의 차이점

  • Thin : 순수하게 자바 패키지만으로 DB와 연결하는 방식으로 범용성이 높지만, 상대적으로 OCI보다 속도가 느립니다.
  • OCI(Oracle Call Interface) : .DLL, .SO 파일과 같이 특정 운영체제 내에서만 돌아가는 Native 모듈을 통해 DB에 연결하는 방식입니다. 하드웨어 또는 소프트웨어 전용의 모듈이기 때문에 Thin 보다 속도가 빠릅니다.

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=james2021&logNo=30116987802 

 

JDBC의 THIN방식 OCI방식 구분

DBMS 접속시 사용되는 방식중 Thin 과 OCI 방식을 정리 한다. THIN => 순수하게 자바 패키...

blog.naver.com

정리

  • 전자지갑을 이용하여 Oracle 자율운영 데이터베이스에 접속할 수 있다.
반응형