드디어 오라클 클라우드 계정 권한 설정 완료
로그인이 안되고, 라이브챗에서 계정정보 확인이 안되고, DB생성이 안되고 했던 이유는.
계정 생성 이후 권한 부여 처리가 완료되지 않았기 때문이었다.
그리고 모든 권한설정이 완료된 시점에 메일을 받았고, 그 이후엔 DB생성이 정상적으로 수행되었다.
한국 시간으로 5월 16일 12시에 계정을 생성했고, 5월 18일 10시에 권한부여가 완료되었다.
주말임을 감안하면... 뭐 대략 24시간 정도 소요된다고 생각해야할듯.
권한 부여 완료 후 바뀐 점
Home Region 클릭 시 빨간 글씨로 머시기 에러가 나왔었는데 이제 정상적으로 조회되고 있다.
최상단에 저런 문구가 나오지 않았는데 나오기 시작했다.
오라클 클라우드는 상시 무료 서비스 + 1달간 사용할 수 있는 금액권을 주는 식인데,
나의 경우 400 싱가포르 달러를 1달동안 사용하면서 이것저것 사용해보라는 안내가 나오고 있다.
또한 1달이 경과하면 상시 무료 옵션으로 제한되며, 업그레이드를 언제든 할 수 있고, 업그레이드 하지 않으면 과금 걱정을 하지 않아도 된다. 이게 정말 크다.
드으 디어 DB생성을 완료했다. EC2와 RDS에서 오라클로 완전히 넘어갈 준비가 됐다.
오라클 클라우드 DB 접속 방법
DB접속 방법이 좀 특이하다.
내가 설정을 디폴트로 그냥 막 넘겨서 그런지 몰라도...
Security Connection from Everywhere 머 그런 설정을 선택했던 것 같은데...
나는 아무데서나 접근 가능하게 하고 싶어서 일단 그랬는데...
DB접속시에도 TNS와 JKS 파일을 통해서만 접근이 가능한 방식인 것 같다.
DB인스턴스에 접근해봤자 IP와 포트 그런 정보 자체가 없다.
그 대신 DB Connection 버튼을 누르면 Wallet을 다운받도록 하는데,
이 Wallet 에는 tnsnames.ora파일과 인증을 위한 jks파일이 함께 담겨있다.
나의 신원을 인증하고 접속하게 해줄 요소들을 한 데 묶어서 wallet이라고 표현하나보다.
암튼 그렇게 다운받고 압축을 푼 다음에,
해당 경로를 TNSADMIN 으로 지정해주고, TNSNAME과 DB생성시 지정한 ID, PW를 입력해서 접속한다.
tnsnames.ora 파일에 TNSNAME들이 있기 때문에 원하는 내용으로 변경하여 접속도 가능하다.
SpringBoot 에서 접속하기
위 내용까지는 순탄했다.
TNS파일을 이용한 접속은 이미 매일 사용하고 있었기 때문이다.
그런데... 스프링부트 내부 DB 접속 설정을 TNS로 하는 건... 해본적이 없었다.
게다가 단순 TNS가 아니라 jks파일을 통한 인증까지... 그러하다.
대략 두 시간 정도의 삽질 끝에 원하는 결과물을 얻었다.
일단 의존성이다.
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.4'
runtimeOnly 'com.oracle.database.jdbc:ojdbc8'
implementation 'com.oracle.ojdbc:ucp'
implementation 'com.oracle.database.security:oraclepki'
implementation 'com.oracle.database.security:osdt_core'
implementation 'com.oracle.database.security:osdt_cert'
마이바티스, ojdbc8은 ip, port, sid를 직접 입력해서 접속하는 설정에서도 쓰이는 내용이다.
그리고 그 아래 네 개의 의존성은 평소에 사용하지 않던 거다.
오라클 데이터베이스에 TNS 및 jks 파일을 이용한 인증 접속시 사용하는 의존성인 것 같다.
아마 평소에도 jks인증 방식을 사용하던 분들은 익숙한 내용일 것 같다.
그리고 YML
spring:
datasource:
driver-class-name: oracle.jdbc.OracleDriver
url: jdbc:oracle:thin:@[TNSNAME]?TNS_ADMIN=[Wallet폴더 경로]
username: [ID]
password: [PW]
SID 접속 방식에서는 host:port:sid 식으로 url에 입력하여 접속하는데, TNS방식에서는 다르다.
사용할 TNSNAME과 TNS_ADMIN 경로, 그리고 아이디와 비밀번호를 입력하면 되기 때문이다.
1. TNSNAME 자리에는 tnsnames.ora 파일에서 본인이 설정한 TNSNAME을 입력하면 된다.
2. Wallet 폴더 경로에는 폴더 경로를 잡으면 되는데, 이를 상대경로로 잡고 싶었다. 이게 내 삽질 부분이었다.
결론을 바로 말하기 민망하고 허망할 정도다.
Wallet 폴더를 통째로 resources 폴더에 집어넣고,
TNS_ADMIN에는 TNS_ADMIN=./src/main/resources/Wallet폴더명 이렇게 잡음으로써 끝났다.
resources 폴더 경로를 지칭하는 법을 알지 몰라서 무쟈게 헤맸다..... .ㅠㅠ.......
대신 삽질과정에서 yml에서 변수를 지정해서 사용하는 법을 배웠다. 아래처럼...
@Valid 애너테이션에 사용하는 것과 동일한 방식이다.
이 방식을 사용할 경우, 설정 방법을 공유하면서도 진짜 정보를 숨길 수 있다는 점이 있을 것 같다.
application.yml만 이그노어 처리하고, 이 파일 안에 실제 정보를 설정하고,
active profile들에는 별칭으로 가져다 쓰는 방식으로 말이다.
rich:
dbinfo:
id: 아이디
pw: 비밀번호
spring:
datasource:
username: ${rich.dbinfo.id}
password: ${rich.dbinfo.pw}
최종 샘플
application.yml 파일에서는 공통으로 쓰이거나 숨기고 싶은 설정값을 담고, 어떤 프로파일을 active로 쓸지 설정한다.
오라클 DB 월렛 폴더는 resources 폴더에 넣는다. 나는 OracleCloud로 폴더명을 바꿨고, tnsname.ora에서
tnsname 하나를 RichOracle로 수정했다.
그 결과 url에 들어가는 값은 다음과 같다.
url: jdbc:oracle:thin:@RichOracle?TNS_ADMIN=./src/main/resources/OracleCloud
저 ./ 이걸 몰라갖고 정말 ㅠ 에휴 부끄럽다.
끝
'Java & Spring' 카테고리의 다른 글
스프링부트가 정적 리소스 제공하는 과정 (0) | 2021.08.30 |
---|---|
SpringBoot 로그 레벨 동적으로 변경하기 (runtime logging level change) (0) | 2021.06.12 |
Google OTP 인증 Java로 구현하기 (2) | 2021.01.24 |
Head First Design Pattern - 1. 전략 패턴 (0) | 2021.01.24 |
Spring MVC 프로퍼티 파일 value 가져오기 (0) | 2020.09.29 |