티스토리 뷰

스프링 실습 중 스프링 프로젝트와 JDBC를 연결하는 부분이 나왔다.

 

우선 오라클 데이터베이스는 오리지널하게는 M1이든 인텔이든 Mac OS에는 설치할 수 없다. (윈도우와 리눅스만 지원)

 

그래서 인텔 맥의 경우 도커를 이용해 설치하면 되지만...

 

M1 맥의 경우 아키텍처가 다르기 때문에 이마저도 불가능하다.

 

따라서 클라우드 서비스를 이용해 데이터베이스를 원격으로 접속하는 방법을 사용해야 한다. 

 

https://shanepark.tistory.com/173

 

Mac) Oracle Cloud FreeTier 이용해 웹 어플리케이션 배포하기 4) 무료 데이터 베이스 만들기 및 데이터

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

shanepark.tistory.com

 

위 포스트를 참고하여 오라클 클라우드 서비스를 이용해 프리 티어 데이터베이스를 이용할 것이다.

 

다 잘 되다가... 로컬에서 원격 데이터베이스에 접속하는 클라이언트인 SQL Developer에서 접속하는데 실패하는 현상이 벌어지는데...

 

[그림 1] 데이터베이스 연결 오류

Test failed: ORA-00604: error occurred at recursive SQL level 1 ORA-01756: quoted string not properly terminated

 

해당 에러 번호로 구글링해보니 나오는건 대부분 SQL 구문에 따옴표가 빠졌네 등등 전혀 관계없는 것들이었는데...

 

https://proni.tistory.com/entry/%E2%9C%85-Solved-oracle-sqldeveloper-%EC%97%B0%EA%B2%B0-%EC%8B%9C-%EC%97%90%EB%9F%AC-at-Mac

 

✅ Solved * oracle sqldeveloper 연결 시 에러? ( at. Mac )

status : failure -test failed: ora-00604: error occurred at recursive sql level 1 ora-01756: quoted string not properly terminated 또는 status: Locale not recognized 등등.. MacOS..

proni.tistory.com

한줄기 빛이 되어주신 분이 나타났다.

 

[그림 2] 언어 및 지역

먼저 언어 및 지역 설정으로 들어간다.

 

[그림 3] 영어 추가 및 기본으로 지정

참고한 포스트에서는 영어가 있었지만 나는 없어서

새로 추가해준 뒤 첫 번째 순서로 드래그하여 기본으로 설정해줬다.

 

[그림 4] 다시 한국어를 기본으로

그 뒤 다시 한국어를 기본으로 설정해준 다음, 오라클 SQL Developer를 다시 실행해주면,

[그림 5] 테스트 연결 성공

위와 같이 한글로 바뀌면서 테스트 연결도 정상적으로 이루어지는 것을 확인할 수 있다.

 


이제 JDBC를 통해 데이터베이스에 접근해야 한다.

 

오라클 클라우드 데이터베이스는 보통의 URL이 아닌 Wallet을 이용해 접속하기 때문에 조금 다르다.

 

우선 오라클 홈페이지에서 JDBC Driver를 다운로드 해주자.

https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html

 

클라우드 서비스가 아니라면 자신의 데이터베이스 버전에 알맞은 드라이버를 받으면 되지만, 클라우드 데이터베이스는

19 버전이기 때문에 19 버전 드라이버로 들어가 준다.

 

[그림 5] JDBC 드라이버 다운로드

여기서 중요한 점은, 우리는 보통의 IP와 Port를 이용한 접근이 아닌

Wallet을 이용한 TNS 접근이기 때문에 ojdbc8.jar 파일과

osdt_core.jar, osdt_cert.jar, oraclepki.jar 파일까지 추가로 받아야 한다!

 

저 세개를 받아야하는지 몰라서 한시간 반 정도 삽질만 해댔다

왜안되지? url 입력을 잘못했나? 계정 비번 잘못쳤나? 아닌데 인텔리제이 데이터베이스로는 접근되는데

드라이버가 잘못된건가?

 

총 4개의 jar 파일을 받은 뒤 IntelliJ의 Project Structure로 들어가준다.

[그림 6] JDBC 드라이버 추가

[Libraries] -> [+] -> [Java] 순으로 클릭한 뒤 다운받은 4개의 jar 파일들을 지정하고 [Apply] 눌러주자.

그 뒤 [Artifacts] 로 이동하여 라이브러리들을 추가해주자.

 

테스트 코드를 이용하여 세팅이 정상적으로 되었음을 확인해야만 한다.

아래 테스트 코드는 '구멍가게 코딩단'의 '코드로 배우는 스프링 웹 프로젝트' 책을 참고하였다.

package com.bamboo.persistence;

import lombok.extern.log4j.Log4j;
import org.junit.Test;

import java.sql.Connection;
import java.sql.DriverManager;

import static org.junit.Assert.fail;

@Log4j
public class JDBCTests {
    static {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void testConnection() {
        try (Connection con =
                     DriverManager.getConnection(
                             "jdbc:oracle:thin:@여기에디비이름?TNS_ADMIN=여기에지갑경로",
                             "계정이름",
                             "계정비밀번호"
                     )) {
            log.info(con);
        } catch (Exception e) {
            fail(e.getMessage());
        }
    }
}

 

먼저 앞서 받은 지갑 zip 파일을 압축 해제해보면 tnsnames.ora 파일이 있다.

열어보면, [디비이름_high] 이런식으로 되어 있는 것이 있다. 저걸 그대로 위의 url의 [여기에디비이름] 자리에 넣어주자.

[여기에지갑경로]는, 압축 파일을 해제한 디렉토리의 경로를 그대로 붙여넣어 주자.

 

이제 테스트 코드를 실행해서 정상적으로 라이브러리가 추가되었고 연결이 잘 되는지 확인해 보자.

[그림 7] 정상 작동 확인

 

테스트 코드가 잘 작동하여 전반적인 세팅과 연결이 잘 이루어졌음을 확인할 수 있다.

 

댓글