[Oracle] 애플 실리콘 오라클 클라우드 및 JDBC 연동

쥬니·2022년 10월 7일
2

일상

목록 보기
1/3

❗️이 글은 오라클 클라우드와 애플 실리콘(맥북에어m2)을 4박5일동안 맞장뜨게한 썰형식이며.. 똑같이 따라하셔도 안 될 수도 있습니다....

서론

국비 교육 하면서 JDBC를 연동 할 때 오라클을 사용했다. 그런데 애플 실리콘과 Oracle호환이 안 되는 건 알고 있었고, Docker를 통해서 로컬로 오라클 데이터베이스를 연동할 수 있어서 애플 실리콘에서도 오라클을 쓸 수 있다고 들었다. 그래서 안심하고 집에와서 도커를 설치하고 어찌저찌 DBeaver로 SELECT 까지 잘 날려보았다. 그러나 문제가 생겼다... 우선 타임존이 안 맞았고, Docker 를 처음 접해보아서 컨테이너가 뭔지, 어떻게 켜는지 조차 몰랐다. 그래도 이 분의 글에 정말 자세히 설명이 되어있다!
그래서 오라클 클라우드를 데이터베이스로 쓰기로 했는데, 또 가입에서 막혔다. 오라클 계정은 예전부터 있었는데, 통합 로그인을 지원 안 해주는 건지, 내가 못하는 건지...
새로 가입하려니까 가입에서 한 다섯번 튕긴 것 같다.

수많은 가입 시도의 흔적들...
너무 화나서 이때 노트북 끄고 핸드폰으로 구글링좀 해봤는데, 체크카드는 안 된다는 이야기가 있어서 절망했다. 나는 회사 다닐 때도 신용카드 발급을 안 했는데... 그렇게 절망하고 있다가 학원 쉬는시간에 다시 생각나서 가입했는데 됐다!

진짜 어이가 없어서 헛웃음이 나왔다.
그 후 오라클 클라우드 데이터 생성과 SQLDeveloper등의 설정은 이 분의 글을 참고하여서 진행했다. 그리고 JDBC를 학원에서 했던 것처럼 연결하려했는데... 오류가 났다. (근데 또 재현해보려니 안 된다)

프로젝트 자바 버전 수정

먼저 자바 버전은 11버전을 받아서 사용했다. 여기서 받았다!

zip버전을 받은 다음 /Library/Java/JavaVirtualMachines에 풀어주었다. 기존에 쓰던 자바 버전이랑 다르기 때문에 프로젝트에서 자바 경로를 따로 잡아주었다.
프로젝트에 자바 경로를 설정하는 방법은 Properties -> Java Buil Path -> JRE System Library 누른 후 -> Edit -> 창이 뜨면 두번째 있는 Alternate JER에서 설정하여 주었다.

Oracle JDBC 다운

그 다음은 JDBC jar 파일을 받는 것이다. https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html 여기서 받는데, 주의할 점이 있다!
나는 8버전을 다운받았는데, 다운 받을 때 꼭

저기 맨 아래에 있는 버전-full.tar.gz를 받아야 한다!!!!!!!
압축을 풀면 jar파일이 많을 텐데, 우리가 ojdbc8.jar와 함께
사진에 표시된 oraclepki.jar osdt_cert.jar osdt_core.jarbuild path에 꼭 같이 추가해주자!!!!!!!!!
물론 지금은 재현이 안 되지만... 이것 때문에 두시간 반을 머리싸매고 고민했다. 임포트 하지 않으면 오류가 발생할 것이다!
build path에 잘 추가했다.

Connection 객체 생성

오라클 클라우드를 하면 Connection객체를 설정해 줄 때, url을 조금 다르게 설정해야 한다. jdbc:oracle:thin:@클라우드 전자지갑 이름_high?TNS_ADMIN=클라우드 전자지갑 압축 해제한 경로
나는 아래와 같이 Connection객체를 생성해 주었다.

conn = DriverManager.getConnection("jdbc:oracle:thin:@khacademyDB_high?TNS_ADMIN=/Users/Wallet_khacademyDB", "JDBC_TEST", "FOGBOWjuni0313");

그 다음, 아래의 예제 코드를 실행하면...

package com.juni.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class test2 {

	public static void main(String[] args) {
		int result = 0;
		Connection conn = null;
		Statement stmt = null;

		String sql = "INSERT INTO TEST VALUES(52, '쥬니쥬니', SYSDATE)";
			
		try {
					
			Class.forName("oracle.jdbc.driver.OracleDriver");
			System.out.println("driver 등록 성공!!");

			conn = DriverManager.getConnection("jdbc:oracle:thin:@khacademyDB_high?TNS_ADMIN=/Users/Wallet_khacademyDB", "JDBC_TEST", "FOGBOWjuni0313");
			System.out.println("Connection 객체 생성!");
					
			stmt = conn.createStatement();
			System.out.println("Statement 객체 생성!");

			result = stmt.executeUpdate(sql);

			if (result > 0) { // 성공했을 경우 commit
				conn.commit();
			} else { // 실패했을 경우 rollback
				conn.rollback();
			}
		} catch (ClassNotFoundException e) {
				e.printStackTrace();
		} catch (SQLException e) {
				e.printStackTrace();
		} finally {
				try {
					stmt.close();
					conn.close();
				} catch (SQLException e) {
						e.printStackTrace();
				}

		}

		if (result > 0) { 
			System.out.println("insert 성공");
		} else { 
			System.out.println("insert 실패");
		}
	}
}


insert는 잘 되는데 오류가 뜬다! 이게 거슬린다면 Connection객체 생성 후 아래의 코드를 추가해주자.

conn.setAutoCommit(false); 

그 후에는 위의 오류가 발생하지 않는 걸 확인할 수 있다!

마치며

진짜 하면서 쌍욕을 얼마나 한 지 모르겠다... 내가 제일 싫어하는 개발환경 잡기인데 하나 해결하면 다음 거 안 되고, 또 해결하면 그다음 거 안 되고... 개발은 환경설정이 전부라는 걸 다시 느끼게끔 해주었다. 또 AutoCommit같은 경우에는 ojdbc버전에 따라서 달라지는 것 같았다!
많은 사람들이 내 글을 보고 참고하라는 게 아니라, 혹시라도 미래에 또 환경설정할 일이 있다면 내가 내 글을 보고 어떻게 했는지 기억을 더듬어보려고 작성하였다.
끝!😖

0개의 댓글