이번에 개인 프로젝트를 진행하면서 무료로 사용할 수 있는 오라클 클라우드의 자율운영 데이터베이스(오라클 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
검색했을 때 다음과 같이 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 파일 구성
WALLET_LOCATION = (SOURCE = (METHOD = file)
(METHOD_DATA = (DIRECTORY="/Users/jetbrains/Oracle/instantclient_19_8/network/wallet")))
SSL_SERVER_DN_MATCH=yes
# DIRECTORY="현재 전자지갑 경로"
oracle cloud 연결 하기
그 다음 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
해당 블로그에서 전자 지갑 경로를 지정한 후 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
정리
- 전자지갑을 이용하여 Oracle 자율운영 데이터베이스에 접속할 수 있다.
'DevOps > 클라우드' 카테고리의 다른 글
Oracle Cloud에서 HTTP 포트 열기 (0) | 2022.09.25 |
---|---|
jenkins를 사용하여 배포중 EC2 인스턴스가 터지는 증상 발생 해결법 (0) | 2022.08.27 |