들어가며
이전 글까지 Oracle cloud 환경에 기존 스프링 부트 프로젝트를 배포해보았다.
인스턴스 생성부터 배포까지 성공적이었지만
아직 기존 프로젝트의 환경은 aws의 s3, rds 를 바라보고있었다.
이제부터 이 부분을 바꿔본다.
Comehear 프로젝트는 처음에 말했다싶이 Jpa 를 활용한 스프링 부트 프로젝트였다.
Jpa를 공부할 당시 실무에 적용해보고싶은 마음에
공모전에서 사용하게 되었는데
사용할 당시에도 mybatis를 쓰지않고 객체 지향적으로 개발을 하는 것 자체가
너무나 신기하고 재밌는 경험이었다.
이번에 클라우드 환경을 이전하면서 Jpa의 매력에 대해 한번 더 빠지게 되었다.
RDS > ADW
기존 AWS RDS(Relational Database Service)를 사용하던 것에서
OCI 에서 제공하는 ADW(Autonomous Data Warehouse)로 전환이 필요했다.
Comehear 프로젝트는 DB로 Mysql 을 사용했었다.
물론 OCI에서도 Mysql을 제공하고 있지만
ADW가 무료이기 때문에 Mysql > Oracle 로 DB 마이그레이션을 진행했다.
ADW 생성
우선 ADW를 생성해보자.
Oracle Database > ADW > 자율운영 데이터베이스 생성을 차례로 클릭하면 아래와 같은 화면이 나온다.
표시 이름(ADW 에서 표시될 이름)
데이터베이스 이름(실제 데이터베이스로 쓰이게 될 이름)
둘 모두를 원하는 이름으로 바꿔준다.
나는 Comehear로 수정해주었고, 글 작성시에는 테스트용으로 cct라고 만들어주었다.
데이터베이스 구성에서 항상 무료 옵션을 클릭해주고 다른설정은 건드리지 않았고
관리자 인증서 생성 부분에서
사용자 이름은 ADMIN으로 수정이 불가능했고, 비밀번호를 설정했다.
네트워크 엑세스 선택에서는 모든 곳에서 보안 액세스를 선택했고
보안을 위해서는 두번째 탭인 허용되는 IP 및 VCN에서만 보안 엑세스를 선택하면 된다.
나머지 부분은 손대지 않은채 생성을 누르면
ADW 프로비전이 진행되고
프로비전이 완료되면 초록색으로 바뀌며 사용가능 이라고 뜬다.
ADW 접속
ADW 외부 접속을 위해
데이터베이스 접속을 누르고
전자 지갑 다운로드를 클릭한다.
전자 지갑의 비밀번호를 설정하고 다운로드를 클릭한다.
1. DBeaver 다운로드
외부 접속 툴로 DBeaver를 사용했다.
2. JDBC 다운로드
오라클에 접속하기 위해 JDBC 드라이버를 다운받는다.
https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html
링크에서 19c > ojdbc10-full.tar.gz를 다운받는다.
다운로드 받은 JDBC와 전자지갑(Wallet)을
폴더를 만들어서 압축해제해준다.
C드라이브 > Oracle_JDBC 폴더를 만들어서 넣어주었다.
3. DB 접속
위에서 봤던 '그림 1-1, ADW 접속정보' 를 보면
하단에 TNS 이름으로 cct_high, cct_medium, cct_low가 존재한다.
high는 속도는 빠르지만 다중 사용자 접속에 불리하고
medium은 중간 정도.
low는 속도는 느리지만 여러명이 접속하여 사용하는데 유리하다고 한다.
나는 직접 접속할 사람이 나밖에 없었기때문에
high를 이용해서 접속하였다.
DBeaver를 켜고 노란색 표시된 전기 코드를 누르고Oracle을 선택한 후, 다음을 클릭한다.
다운로드 받은 Ojdbc 설정을 위해Custrom 탭을 클릭하고 Edit Driver Settings를 클릭한다.
Libraries 탭 클릭 후,Add Folder를 눌러서 다운로드 받은 JDBC폴더를 추가하고,Find Class를 눌러서 oracle.jdbc.OracleDriver를 선택하고 확인을 눌러준다.
드라이버 설정을 마치고 나서
JDBC URL Template을 아래처럼 작성해준다.
// jdbc:oracle:thin:@데이터베이스 이름_high?TNS_ADMIN=전자지갑 설치한 폴더 위치
jdbc:oracle:thin:@cct_high?TNS_ADMIN=C:\\Oracle_JDBC\\Wallet_cct
Username에는 ADMIN
Password에는 ADW에서 전자지갑을 다운로드 할 때
설정했던 비밀번호를 작성한다.
Test Connection을 클릭하면 정상적으로 접속되는것을 확인할 수 있다.
나는 이렇게 설정한 후,
Invalid connection string format, a valid format is: "host:port:sid"
라는 에러가 나왔었는데
이럴 땐
'그림 1-2, Edit Driver Setting' 에서 ojdbc10-full 만 남기고
다른 것들은 전부 지워주면 정상적으로 접속을 확인할 수 있다.
스프링 부트 설정
1. dialect 수정
ADW의 생성 및 설정, 접속을 확인했다.
이제 스프링부트의 설정을 바꿔주도록 한다.
application.yml 파일의
dialect를 mysql에서 oracle로 수정해준다.
dialect: org.hibernate.dialect.Oracle10gDialect
2. oracle dependency 추가
build.gradle 파일에
oracle dependency를 추가하고
gradle을 reload해준다.
//db
runtimeOnly 'mysql:mysql-connector-java'
implementation 'com.oracle.database.jdbc:ojdbc10:19.18.0.0'
implementation 'com.oracle.database.security:osdt_cert'
implementation 'com.oracle.database.security:oraclepki'
implementation 'com.oracle.database.security:osdt_core'
3. datasource 수정
ADW 에 생성한 데이터베이스에 테이블을 생성해주기위해
ddl-auto를 create로 변경하고
url, username, password를 환경에 맞게 수정해준다.
driver-class-name: oracle.jdbc.OracleDriver
url: jdbc:oracle:thin:@cct_high?TNS_ADMIN=/home/ubuntu/Wallet_cct
username: ADMIN
password: password
여기서 TNS_ADMIN 뒤에 위치는
기존에 생성했던 인스턴스에 이번 글에서 내려받은 전자지갑(Wallet)을 업로드하고
해당 압축을 풀어준 위치를 적어주면 된다.
Comehear 기준으로 나는 /home/ubuntu에 Wallet_comehear 를 넣어주었다.
4. 배포
여기까지 코드 수정과 파일 업로드가 끝났다면
기존 글처럼 jar 혹은 war를 빌드하여 업로드후 배포 하면 된다.
이후 DBeaver 확인해보면 정상적으로 테이블이 생성된것을 확인할 수 있다.
물론 데이터는 따로 옮겨주었다.
마치며
너무도 재밌고 신기한 경험이었다.
실무에서 쓸 수 없으니 공모전에서 사용했던 jpa를
이런식으로 다른 DB로 마이그레이션 할거라곤 상상도 못했었다.
사실 이번 글에서 언급하진 않았지만 마이그레이션이
한번에 수월하게 이루어지진 않았다.
다만 몇개의 에러를 잡아주고나서는 mysql 에서 쓰던 그대로 oracle을 사용할 수 있는 것을 보고
이래서 orm을 쓰는구나 하고 몸으로 깨닫는 계기가 되었다.
이 프로젝트를 만약 mybatis로 짜뒀더라면
어마무시한 쿼리 작업에 골머리를 앓았을 것을 생각하니 소름이 돋았다.
다음 글에서는 마이그레이션을 진행하며 겪은 트러블슈팅을 적어보도록 한다.
**참조
'사이드 프로젝트 > 2022 관광데이터 활용 공모전' 카테고리의 다른 글
[Oracle Cloud] Spring boot 배포(gradle, jar) - (2) (0) | 2023.06.26 |
---|---|
[Oracle Cloud] Spring boot 배포(gradle, jar) - (1) (0) | 2023.06.22 |
[Oracle Cloud] Comehear Cloud 이전기(AWS -> OCI) (0) | 2023.06.22 |
2022 관광데이터 활용 공모전 - Come Hear (0) | 2022.10.19 |