
Hackathon을 하다가 dependencies에 MySQL을 적용하는데 2가지 방법이 있어 헷갈려 알아봤다.
보통 dependencies에 추가할때 Add Starters를 통해서 추가한다.
runtimeOnly 'com.mysql:mysql-connector-j'
하지만 MySQL에 버전을 명시하지 않으면 에러가 나는 경우가 있다는 동료의 말에 따라 기존내용을 지우고 아래 내용을 추가했다.
implementation 'mysql:mysql-connector-java:8.0.33'
Hackathon때에는 결과를 내는것이 목적이다보니 동료의 말에 따라갔지만 정확이 무엇을 사용해야 하는지 그리고 이 둘의 차이가 너무나도 궁금했다.
runtimeOnly 'com.mysql:mysql-connector-j'
runtimeOnly을 사용하면 애플리케이션 실행(Runtime)에만 MySQL 드라이버가 필요함을 명시하는것.
빌드 과정에서 사용되지 않고, 실행할 때만 MySQL Connector가 로드됨.
Spring Boot에서 공식적으로 권장하는 방식(Spring Boot 2.5이상)
spring-boot-starter-data-jpa 또는 spring-boot-starter-jdbc가 있는 경우 자동으로 적절한 버전의 MySQL 드라이버를 참조한다.
또한 버전을 명시하지 않아도 Spring Boot의 자동 관리 시스템에 의해 버전이 자동으로 설정됨.
`mysql:mysql-connector-java:8.0.33'
implementation을 사용하면 MySQL 드라이버가 컴파일 타임에도 필요하게 됨.
mysql:mysql-connector-java는 MySQL 공식 패키지 네이밍 방식.
이전 방식의 MySQL JDBC 드라이버. (Spring Boot 2.5 이상에서는 권장되지 않음.)
모든 코드에서 MySQL Connector를 직접 참조할 수 있음.
반드시 버전을 직접 지정해야 하므로, 유지보수가 번거로울 수 있음.
Spring Boot에서 관리되지 않으므로, 업데이트 시 직접 버전을 변경해야 함.
Spring Boot 최신 버전(3.x)을 사용하고 있다면 com.mysql:mysql-connector-j(1번)를 사용하는 것이 정답!
→ runtimeOnly 'com.mysql:mysql-connector-j' 를 사용하면 Spring Boot가 자동으로 MySQL 드라이버 버전을 관리해 주기 때문.
반면, mysql:mysql-connector-java:8.0.33(2번)은 버전을 직접 지정해야 해서 관리가 번거롭고 충돌 위험이 있음.
→ Spring Boot의 자동 의존성 관리 기능을 활용하지 못하기 때문