• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

mysql드라이버와 H2 드라이버는 다른건가요?

23.08.04 19:08 작성 조회수 349

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

 

" 반면에 URL이 jdbc:h2 로 시작했는데 MySQL 드라이버가 먼저 실행되면 이 경우 본인이 처리할 수 없다는 결과를 반환하게 되고, 다음 드라이버에게 순서가 넘어간다."

라고 강의 자료에 나와있습니다.

이 부분이 잘 이해가 안됩니다

URL이 JDBC:h2로 시작했는데 MySQL 드라이버가 먼저 실행되면이 무슨 의미인가요??

H2도 DB의 한 종류이고 MySQL도 DB의 한 종류이므로

코드에서 H2를 사용할지 MySQL을 사용할지 하나를 선택해서 코드를 작성하고 그 뒤에

작성된 코드에 따라 H2 드라이버나 MySQL 드라이버를 선택해서 실행되는것 아닌가요??

답변 2

·

답변을 작성해보세요.

1

고냥님의 프로필

고냥

2023.08.06

영한님 강의자료를 보시면, 라이브러리에 여러 개의 JDBC 드라이버가 존재하는 경우를 예로 들어주셨고(H2, MySQL)
개발자가 작성한 URL이 H2 형식인 경우, JDBC는 어떻게 적절한 드라이버를 찾는지 설명한 것 입니다.

ChatGPT에게 얻은 답변 전해드립니다.

JDBC DriverManager는 등록된 모든 드라이버를 순회하면서 연결 요청에 적합한 드라이버를 찾습니다. 
이 과정은 `DriverManager.getConnection()` 메소드를 호출할 때 발생합니다.

컴퓨터에 Oracle, MySQL, H2와 같이 여러 JDBC 드라이버가 설치되어 있다고 가정해 봅시다. 
DriverManager.getConnection()을 호출하면, DriverManager는 등록된 모든 드라이버를 순회하면서 
각 드라이버의 `acceptsURL()` 메소드를 호출하여 연결 요청을 처리할 수 있는지 확인합니다.

예를 들어, JDBC URL이 "jdbc:h2:tcp://localhost/~/test"라면, 
Oracle과 MySQL 드라이버의 `acceptsURL()` 메소드는 이 URL을 처리할 수 없다고 판단하여 `false` 반환하고, 
H2 드라이버의 `acceptsURL()` 메소드는 이 URL을 처리할 수 있다고 판단하여 `true`를 반환합니다.

따라서, DriverManager는 H2 드라이버를 사용하여 데이터베이스 연결을 생성합니다. 
이 과정은 모든 JDBC 드라이버가 `java.sql.Driver` 인터페이스를 구현해야 하며,
 `acceptsURL()` 메소드를 포함하여 여러 메소드를 구현해야 하는 것이 필요합니다.

이렇게 JDBC DriverManager는 등록된 여러 드라이버 중에서 적합한 드라이버를 찾아 연결을 생성하는 역할을 합니다. 
이를 통해 개발자는 데이터베이스 연결 코드를 한 곳에서 관리하고, 
다양한 데이터베이스 시스템에 동일한 코드를 사용하여 연결할 수 있습니다.

0

y2gcoder님의 프로필

y2gcoder

2023.08.07

안녕하세요. blackhole124님, 공식 서포터즈 y2gcoder입니다. 고냥님 답변에 더하여 답변 드립니다.

자바에서는 JDBC 드라이버 인터페이스를 제공하고, Oracle, MySQL, H2와 같은 DB 벤더사들은 해당 JDBC 인터페이스를 구현해 자신들의 DB와 연동해서 사용할 수 있는 구현체들을 제공합니다. 이를 드라이버라고 생각해주시면 좋을 것 같습니다.

근데 해당 드라이버들이 여러 개 있을 때, 스프링 부트에서는 URL을 분석하여 어떤 드라이버를 선택해야 할 지 결정할 수 있습니다. 그리고 JDBC 드라이버는 지금 MySQL, H2 두 개가 존재한다고 가정한다면 해당 드라이버들을 순회하면서 URL에 맞는 드라이버를 찾아 DB 연결을 해주게 됩니다. URL을 보시면 "jdbc:h2:~"라고 개발자가 명시해줬기 때문에, JDBC 드라이버 목록을 순회하는 중 MySQL 드라이버를 먼저 체크하게 되면 URL을 보고 건너뛰기를 해주신다고 이해해주시면 될 것 같습니다.

감사합니다.