훈훈훈

Amazon AWS :: Aurora MySQL JDBC driver 정리 본문

인프라/Amazon AWS

Amazon AWS :: Aurora MySQL JDBC driver 정리

훈훈훈 2022. 8. 18. 00:45

Introduction


이번 글은 AWS Aurora MySQL 를 사용할 때 어떤 MySQL JDBC driver 라이브러리 사용할지 고민하면서 찾아보게 된 내용을 정리해보기로 하였다.

 

간단하게 요약하자면 MariaDB connector / J 와 AWS MySQL JDBC 사이에 고민을 했고, 두 라이브러리를 비교해보게 되었다.

 

 

MariaDB connector / J


MariaDB Connector / J 공식문서를 보면 아래와 같이 auroa 옵션을 부여할 경우 replication 과 failover 기능을 사용할 수 있는 것을 알 수 있다. 해당 기능의 장점은 별 다른 구현 없이 failover 와 replication 를 쉽게 이용할 수 있다는 점이다.

 

 

하지만, MariaDB JDBC drvier 버전 3 부터는 더 이상 해당 기능을 지원하지 않는 것으로 명시되어 있다.

 

MariaDB JDBC drvier 2 버전대를 사용하여 애플리케이션을 운영할 수 있겠지만, 시간이 지남에 따라 결국에는 라이브러리를 교체하게 될 것이다. 

 

처음에는 기존에 사용하였던 MariaDB connector / J 를 사용하려고 하였지만, 위와 같은 문제로 대안을 찾기 위해 AWS 공식 문서를 확인해보기로 했다.

 

참고로 MariaDB JDBC drvier 에서 지원하는 replication 기능은 애플리케이션에서 코드로 직접 구현할 수 있다. (참고 글)

하지만, slave 를 여러대 사용하는 경우 아래처럼 yml 파일에 매번 추가하고 Bean 으로 수동 등록해야하는 번거로움이 있다.

 

spring:
  datasource:
    master:
      hikari:
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://127.0.0.1:3306/master?serverTimezone=UTC
        username: root
        password: 1234

    slave1:
      hikari:
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://127.0.0.1:3306/slave1?serverTimezone=UTC
        username: root
        password: 1234
    
    slave2:
      hikari:
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://127.0.0.1:3306/slave2?serverTimezone=UTC
        username: root
        password: 1234
        
    slave3:
      hikari:
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://127.0.0.1:3306/slave3?serverTimezone=UTC
        username: root
        password: 1234

 

현재는 MariaDB JDBC drvier 를 사용하여 replication 과 failover 기능을 사용하고 있다.

spring:
  datasource:
    hikari:
      jdbc-url: jdbc:mariadb:aurora://___.rds.amazonaws.com:3306/db_name
      driver-class-name: org.mariadb.jdbc.Driver
      username:
      password:

 

 

 

MariaDB Connector / J vs AWS MySQL JDBC


MariaDB connector / J 버전 이슈에 대한 방안을 찾기 위해 관련 AWS 공식 문서를 찾아보았고, 해당 공식 문서에서 찾아 볼 수 있었다. 해당 문서에는 Amazon AWS 에서 개발한 AWS JDBC driver for MySQL 를 사용하는 것을 권장하는 것을 알 수 있다.

 

 

아래 문서에서도 관련 내용을 이야기 하고 있다.

AWS MySQL JDBC driver 를 사용하면 좀 더 향상된 failover 속도를 제공한다고 한다.

 

 

성능 관련해서는 아래 문서에서 확인할 수 있었다.

장애가 발생했을 때, MariaDB Connector / J 보다 더 빠르게 대응하는 것을 볼 수 있다.

 

 

이제까지 AWS 공식 문서에서 AWS JDBC driver for MySQL 에 관하여 소개하는 글들을 살펴보았다.

 

하지만 뭔가 놓친 기분이 들었다. failover 에 관한 내용은 성능 테스트 자료까지 자세하게 설명이 되어 있었지만, replication 에 관한 내용은 볼 수 없었다.

 

그래서 해당 프로젝트 github 을 보기로 하였다.

 

프로젝트 README 를 보면 Read-Write spliting (replication) 기능은 현재 지원하고 있지 않는 것을 알 수 있다.

현재 MariaDB Connector / J 에서 read only 트랜잭션인 경우 reader DB 로 라우팅 해주는 기능은 없는 것 같다.

 

사실 저 기능을 지원하지 않는다면 AWS JDBC driver for MySQL 를 사용할 이유는 없다고 생각한다.

아쉽지만, 혹시나 해당 기능은 언제 지원이 되는지 궁금하여 PR 들을 찾아보았다.

 

최근에 관련 몇몇 PR 들이 반영 된 것으로 보인다.

 

 

 

해당 PR 을 보면 1.2.0 버전에는 Read-write splitiing 기능이 배포될 것 같다.

 

현재 1.1.0 버전까지 릴리즈 되었으니, 빠르면 올해 안에 해당 기능을 사용할 수 있지 않을까 싶다.

 

이번에 작성한 글을 짧게 요약하자면, 아직은 MariaDB connector / J 2 버전대를 사용하고

추후 AWS JDBC driver for MySQL 1.2.0 버전이 나오고 별 다른 이슈가 없을 때, 라이브러리를 교체해도 좋을 것 같다.

 

 

 

# reference

https://github.com/awslabs/aws-mysql-jdbc

 

GitHub - awslabs/aws-mysql-jdbc: The Amazon Web Services (AWS) JDBC Driver for MySQL is a driver that enables applications to ta

The Amazon Web Services (AWS) JDBC Driver for MySQL is a driver that enables applications to take full advantage of the features of clustered MySQL databases. - GitHub - awslabs/aws-mysql-jdbc: Th...

github.com

https://github.com/mariadb-corporation/mariadb-connector-j

 

GitHub - mariadb-corporation/mariadb-connector-j: MariaDB Connector/J is used to connect applications developed in Java to Maria

MariaDB Connector/J is used to connect applications developed in Java to MariaDB and MySQL databases. MariaDB Connector/J is LGPL licensed. - GitHub - mariadb-corporation/mariadb-connector-j: Maria...

github.com

https://johngrib.github.io/wiki/mariadb-connector-j/#failover-and-load-balancing-parameters

 

MariaDB Connector/J

 

johngrib.github.io

https://aws.amazon.com/ko/blogs/database/improve-application-availability-with-the-aws-jdbc-driver-for-amazon-aurora-mysql/

 

Improve application availability with the AWS JDBC Driver for Amazon Aurora MySQL | Amazon Web Services

In this post, we demonstrate how to use the Amazon Web Services (AWS) JDBC Driver for MySQL, which allows an application to take advantage of the features of clustered MySQL databases. You can use this driver as a drop-in replacement for the MySQL Connecto

aws.amazon.com

https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/AuroraUserGuide/Aurora.Connecting.html

 

Amazon Aurora DB 클러스터에 연결 - Amazon Aurora

SSL을 사용하여 클러스터 엔드포인트에 연결하려면 클라이언트 연결 유틸리티에서 Subject Alternative Names(SAN)를 지원해야 합니다. 클라이언트 연결 유틸리티에서 SAN을 지원하지 않는 경우, Aurora DB

docs.aws.amazon.com

https://hoing.io/archives/1285

 

AWS JDBC Driver for Amazon Aurora MySQL

안녕하세요 이번 포스팅에서는 Amazon AWS 에서 새롭게 출시한 Java의 MySQL 접속 드라이버인 AWS JDBC Driver 에 대해서 확인 해보려고 합니다. 드라이버의 특징AWS JDBC Driver 는 MySQL 8.0.28 community driver 를

hoing.io

 

Comments