Spring DB : 데이터베이스 연결
- Spring/Spring DB
- 2022. 4. 28.
이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다.
데이터베이스 연결하기
가장 초기에는 어플리케이션과 DB를 연결하기 위해 DriverManager를 사용했다고 한다. DriverManager는 기본적으로 JDBC 인터페이스를 구현한 구현체를 통해 Connection을 받아온다. DriverManager를 사용하기 위해 두 가지 코드를 작성하고자 한다.
- 전역 상수용 추상 클래스 생성
- DB Connection 얻는 클래스 생성 with DriverManager
전역 상수용 추상 클래스
public abstract class ConnectionConst {
// DB 정보
public static final String URL = "jdbc:h2:tcp://localhost/~/test";
public static final String USERNAME = "sa";
public static final String PASSWORD = "1";
}
- 전역 상수용 추상 클래스를 생성한다.
- DrvierManager를 이용해 Connection을 얻을 때, URL / USERNAME / PASSWORD 정보를 매번 입력해야한다.
- 따라서 매번 사용할 수 있도록 전역 상수로 생성해둔다.
DB 연결용 클래스 생성 with DriverManager
@Slf4j
public class DbConnectionUtil {
public static Connection getConnection() {
try {
Connection conn = DriverManager.getConnection(ConnectionConst.URL, ConnectionConst.USERNAME, ConnectionConst.PASSWORD);
log.info("Connection = {}, class = {}", conn, conn.getClass());
return conn;
} catch (SQLException e) {
throw new IllegalStateException(e);
}
}
}
- DriverManager를 이용해서 Connection을 얻어오는 클래스를 생성한다
- DriverManager.getConnection()은 Static Method로 제공된다. 이 때, URL + USERNAME + PASSWORD를 설정해주면 DriverManager는 Connection을 제공해준다.
- 이 때, SQL Exception이 발생할 수 있기 때문에 Try / Catch 문으로 감싼다.
데이터베이스 연결 테스트
@Test
void driverManager() {
Connection con = DBConnectionUtil.getConnection();
DBConnectionUtil.getConnection();
assertThat(con).isNotNull();
}
- 다음 코드를 작성한다.
- DriverManager를 통한 코드 생성을 2번 요청한다.
실행 결과를 보면 class = org.h2.jdbc.JdbcConnection을 확인할 수 있다. 이 클래스는 JDBC 인터페이스를 H2 DB 드라이버가 구현한 구현체다. 즉, H2 전용 Connection이다. 이 커넥션은 Jdbc 표준 Connection 인터페이스인 java.sql.Connection 인터페이스를 구현하고 있다.
JDBC DriverManager 연결 이해
위의 코드에서 H2 Connection을 얻기 위해 URL / Username / Password 정도만으로 Connection을 얻어올 수 있었다. 어떻게 이런 일이 가능한 것일까?
- JDBC는 java.sql.Connection을 통해 표준 커넥션 인터페이스를 정의한다.
- H2 DB는 JDBC Connection 인터페이스를 구현한 org.h2.jdbc.JdbcConnection 구현체를 제공한다.
구현체는 각 데이터베이스가 제공해주는 것으로 이해할 수 있다. 그런데 어떻게 URL / Username / Password만 쳤는데 필요한 H2 Connection을 찾아와서 넣어준 것일까? DriverManager는 위 정보를 바탕으로 사용가능한 DB 드라이버를 찾아온다.
Jdbc가 제공하는 DriverManager는 라이브러리에 등록된 DB 드라이버들을 관리하고 커넥션을 획득하는 기능을 제공한다. DriverManager는 Connection을 얻기 위해 다음과 같이 동작한다.
- 어플리케이션에서 Connection이 필요하면 DriverManager.getConnection()을 호출한다.
- DriverManager는 호출되면 다음 일을 한다
- 라이브러리에 등록된 드라이버 목록을 자동으로 인식한다.
- 드라이버 목록에 있는 드라이버에게 URL / Username / Password 정보를 넘겨서 Connection을 획득할 수 있는지 확인한다.
- 각각의 드라이버는 URL 정보를 체크해서 본인이 처리할 수 있는 요청인지 확인한다. 본인이 처리할 수 있는 요청이면, 드라이버는 DB에서 커넥션을 얻어와서 반환해준다.
정리
- DriverManager를 통해 각 DB가 제공하는 JDBC 인터페이스 구현체에게서 DB Connection을 불러올 수 있었다.
- DriverManager는 DB 드라이버를 관리하고 있으며, URL / Username / PassWord가 넘어오면 이 정보를 바탕으로 사용가능한 DB Driver를 찾고, 그 Drvier에게서 Connection을 얻어와서 반환해준다.
- DriverManager는 Connection을 불러올 때 마다 설정 정보를 넣어줘야한다. 설정 + 사용이 동시에 일어나기 때문에 책임의 분리가 필요하다.
'Spring > Spring DB' 카테고리의 다른 글
Spring DB : DataSource 이해 (0) | 2022.04.28 |
---|---|
Spring DB : 커넥션 풀 (0) | 2022.04.28 |
Spring DB : JDBC 개발 + 등록 + 조회 + 수정 + 삭제 (0) | 2022.04.28 |
Spring DB : JDBC와 ORM의 필요성 (0) | 2022.04.28 |
스프링 DB : 프로젝트 생성 (0) | 2022.04.28 |