개인기록

[Spring Boot] Heroku로 간단한 무료 DB 서버 연결하기 (MariaDB) 본문

Spring Boot

[Spring Boot] Heroku로 간단한 무료 DB 서버 연결하기 (MariaDB)

jenn.dph 2022. 8. 16. 18:54

현재 진행중인 토이 프로젝트에서 DB가 필요한데,

1. 웹 백엔드를 두 명이 분담해서 하고 있고

2. 100개 내외의 테스트용 데이터를 사용하기 때문에 DB 서버의 성능이 크게 중요하지 않으며

3. 시간이 매우(x100) 부족한 상황이기 때문에

로컬에서 각자 DB를 구축해서 테스트하기보다는 온라인에 테스트용 DB 서버를 구축하기로 했다.

 

 

구글링을 해 보니 무료로 제공되는 서버를 몇몇 찾을 수 있었는데,

장단점을 비교해봤을 때 Oracle Cloud나 Heroku를 사용하는 게 가장 좋을 것 같았다

(AWS는 지난 프로젝트를 진행하며 free tier credit을 모두 사용했기 때문에 애초에 고려하지 않았음)

 

 

원래는 Oracle Cloud를 사용하려 했지만 실패했다.

Oracle Clouds는 단점이 딱 하나인데 그게 장점을 모두 압도한다.

가입이 너무 어렵다 •᷅‎ࡇ•᷄

"트랜잭션을 처리하는 중 오류 발생"이라는 말을 대체 몇 번이나 본 건지;;

카드 문제인가 해서 바꿔봤지만 Master, VIsa 둘 다 실패했고 메일도 바꿔봤지만 결과는 똑같았다.

고객센터에 메일을 보내봤지만 역시 형식적인 답변만 받을 수 있었고..ㅎㅎ

Hello,
 
Unfortunately, we are unable to resolve this or process the transaction. 
This is all the information we can provide.
 
Regards,
Customer Service Agent

현지 시간에 맞춰 라이브챗도 시도해봤으나 연결되지 않았다.

이럴거면 로컬에 각자 DB를 구축하는 게 더 빠르지 않았을까 하는 후회가 들기 시작했다..ㅋㅋ

더 이상 시도해볼 수 있는 게 없을 것 같아서 Oracle Cloud는 포기하고 2안이었던 Heroku로 갈아타기로 했다

(참고한 글 ☞ https://blog.jungbin.kim/service/2019/03/02/deploy-mariadb-heroku.html)

 

 

회원 가입 후 Create New App을 선택하면 다음과 같은 화면을 볼 수 있다.

https://www.heroku.com

 

Cloud Application Platform | Heroku

Heroku is a platform as a service (PaaS) that enables developers to build, run, and operate applications entirely in the cloud.

www.heroku.com

 

나는 DB 서버로만 사용할 생각이기 때문에 App name은 (토이프로젝트명)-db로 간단하게 설정했다.

리전을 US나 Europe으로만 설정할 수 있다는 점이 아쉽긴 하지만 무료니까 ᵔ-ᵔ

(Oracle Cloud는 서울, 춘천 리전도 있는데..ㅎㅎ)

 

 

Create app을 누르고, 해당 App의 resource에서 JawsDB Add-on을 선택해준다.

Add-on을 사용하려면 카드 정보를 등록해야 하는데, Kitefin은 무료이기 때문에 과금이 발생하지 않으니 걱정없이 등록해도 된다.

 

 

이제 Settings에 가면 Config Vars 항목을 찾을 수 있다.

JAWSDB_MARIA_URL이 이러한 형식으로 저장되어 있는 것을 볼 수 있을 것이다.

mysql://<username>:<password>@<host>:<port>/<db>

이제 이 주소를 Spring Boot 프로젝트의 application.properties에 잘 넣어 주기만 하면 된다

 

 

spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://<host>:<port>/<db>
spring.datasource.username=<username>
spring.datasource.password=<password>

위의 URL에서 host, port, db, username, password에 해당하는 부분을 넣어주면 프로젝트에 Heroku 서버가 연결된다.

데이터는 DBeaver 등으로 넣어 주면 끝!

 

 

 

+

WARN 78935 --- [onnection adder] o.m.jdbc.message.server.ErrorPacket : Error: 1226-42000: User '*' has exceeded the 'max_user_connections' resource (current value: 10)

잘 돌아가다가 갑자기 이런 에러가 떴다.

차이점이 뭘까 생각해보니 애플리케이션 구동중에 DBeaver에서 DB 서버에 연결하면 에러가 발생하고, 연결을 종료하면 에러가 사라지는 것을 발견함

 

 

https://gaga-kim.tistory.com/entry/211220-211227-WebApp-Project-6주차 에서 해결책을 찾았다.

여태까지는 로컬 DB에서만 개발해봐서 connection pool에 대해 고려해본 적이 없었는데

Heroku는 max_user_connections이 10으로 설정되어 있기 때문에 maxium-pool-size 조정이 필요했던 것! 

프로젝트 하면서 또 하나 배워간다 ( ᵒ̴̶̷̤໐ᵒ̴̶̷̤ )

 

 

application.properties에 마지막 줄을 추가하니 문제 해결!

spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://<host>:<port>/<db>
spring.datasource.username=<username>
spring.datasource.password=<password>
spring.datasource.hikari.maximum-pool-size=8