인프런 커뮤니티 질문&답변

이민준님의 프로필 이미지
이민준

작성한 질문수

스프링 DB 1편 - 데이터 접근 핵심 원리

데이터베이스 연결

DriverManager 가 Driver 후보들을 가지는 방법

작성

·

474

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)


2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
안녕하세요. 데이터베이스 연결을 보면서 궁금증이 생겼습니다.

DriverManager 는 제공받은 url 을 핸들링할 수 있는 Driver 구현체를 찾는다고 이해했는데요.

DriverManager 는 위의 검증 이전에 어떻게 Driver 구현체들을 후보로 리스트로 들고있게되나요?

답변 3

2

'com.h2database:h2' 의존성 라이브러리의 org.h2.Driver 클래스에서 public static synchronized Driver load() 함수를 찾을 수 있습니다. 여기서 DriverManger를 직접 호출해서 자기 자신 즉 org.h2.Driver를 등록하는 것을 볼 수 있습니다.

public static synchronized Driver load() {
        try {
            if (!registered) {
                registered = true;
                DriverManager.registerDriver(INSTANCE);
            }
        } catch (SQLException e) {
            DbException.traceThrowable(e);
        }
        return INSTANCE;
    }

registerDriver() 메소드를 더 타고 들어가보면 DriverManager의 변수중 하나인 CopyOnWriteArrayList<DriverInfo> registeredDrivers에 저장되는 것을 확인할 수 있습니다.

아마 MySql, Oracle 등 다른 드라이버들도 각자 이런식으로 하지 않을까 생각합니다!

디버깅 모드를 사용하여 직접 확인해본 것이라 혹시 틀린 부분이 있다면 정정해주세요!

감사합니다

0

제가 질문을 제대로 이해했다면....build.gradle에 runtimeOnly 'com.h2database:h2' 의존성을 추가 했기 때문 아닐까요.

0

안녕하세요, 이민준 님! 공식 서포터즈 codesweaver 입니다.

스프링부트를 사용하기 전 과거에는 프로젝트에 사용할 데이터베이스 드라이버(jar 파일)을

프로젝트 라이브러리 안에 포함하는 식으로 사용했었습니다.

질문하신 내용이 이 부분이 맞는지 궁금하네요 :)

감사합니다.

이민준님의 프로필 이미지
이민준

작성한 질문수

질문하기