Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 그리디
- http
- 스프링 핵심 원리
- Android
- 스프링 핵심 기능
- Spring Boot
- Servlet
- JPQL
- SpringBoot
- 알고리즘
- java
- QueryDSL
- AOP
- 김영한
- db
- transaction
- 인프런
- 백준
- Thymeleaf
- pointcut
- Proxy
- springdatajpa
- Greedy
- 스프링
- JDBC
- jpa
- 자바
- Exception
- kotlin
- spring
Archives
- Today
- Total
개발자되기 프로젝트
DB 연결 본문
ConnectionConst
package hello.jdbc.connection;
public abstract class ConnectionConst {
public static final String URL = "jdbc:h2:tcp://localhost/~/dbtest";
public static final String USERNAME = "sa";
public static final String PASSWORD = "";
}
DB에 접속하는데 필요한 기본 정보를 편리하게 사용하도록 상수로 만들었다.
이 때 해당 클래스는 객체로 생성하지 못하도록 abtract로 막아두었다.
DBConnectionUtil
package hello.jdbc.connection;
import lombok.extern.slf4j.Slf4j;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import static hello.jdbc.connection.ConnectionConst.*;
@Slf4j
public class DBConnectionUtil {
public static Connection getConnection(){
try {
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
log.info("get connection={}, class={}", connection, connection.getClass());
return connection;
} catch (SQLException e) {
throw new IllegalStateException(e);
}
}
}
- 데이터베이스에 연결하려면 JDBC가 제공하는 DriverManager.getConnection(..) 를 사용하면 된다.
- 라이브러리에 있는 데이터베이스 드라이버를 찾아서 해당 드라이버가 제공하는 커넥션을 반환해준다.
- 여기서는 H2 데이터베이스 드라이버가 작동해서 실제 데이터베이스와 커넥션을 맺고 그 결과를 반환해준다.
DBConnectionUtilTest
package hello.jdbc.connection;
import lombok.extern.slf4j.Slf4j;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import java.sql.Connection;
import static org.junit.jupiter.api.Assertions.*;
@Slf4j
class DBConnectionUtilTest {
@Test
void getConnection() {
Connection connection= DBConnectionUtil.getConnection();
Assertions.assertThat(connection).isNotNull();
}
}
23:06:22.787 [main] INFO hello.jdbc.connection.DBConnectionUtil - get connection=conn0: url=jdbc:h2:tcp://localhost/~/dbtest user=SA,
class=class org.h2.jdbc.JdbcConnection
- 실행 결과를 보면 class=class org.h2.jdbc.JdbcConnection 부분을 확인할 수 있다.
- 이것이 바로 H2 데이터베이스 드라이버가 제공하는 H2 전용 커넥션이다.
- 물론 이 커넥션은 JDBC 표준 커넥션 인터페이스인 java.sql.Connection 인터페이스를 구현하고 있다.
JDBC DriverManager 연결 이해
JDBC 커넥션 인터페이스와 구현
- JDBC는 java.sql.Connection 표준 커넥션 인터페이스를 정의한다.
- H2 데이터베이스 드라이버는 JDBC Connection 인터페이스를 구현한 org.h2.jdbc.JdbcConnection 구현체를 제공.
DriverManager 커넥션 요청 흐름
JDBC가 제공하는 DriverManager 는 라이브러리에 등록된 DB 드라이버들을 관리하고,
커넥션을 획득하는 기능을 제공한다.
- 애플리케이션 로직에서 커넥션이 필요하면 DriverManager.getConnection() 을 호출한다.
- DriverManager 는 라이브러리에 등록된 드라이버 목록을 자동으로 인식한다.
이 드라이버들에게 순서대로 다음 정보를 넘겨서 커넥션을 획득할 수 있는지 확인한다.
- URL: 예) jdbc:h2:tcp://localhost/~/test
- 이름, 비밀번호 등 접속에 필요한 추가 정보
- 여기서 각각의 드라이버는 URL 정보를 체크해서 본인이 처리할 수 있는 요청인지 확인한다.
예를 들어서 URL이 jdbc:h2 로 시작하면 이것은 h2 데이터베이스에 접근하기 위한 규칙이다.
따라서 H2 드라이버는 본인이 처리할 수 있으므로 실제 데이터베이스에 연결해서 커넥션을 획득하고
이 커넥션을 클라이언트에 반환한다.
반면에 URL이 jdbc:h2 로 시작했는데 MySQL 드라이버가 먼저 실행되면
이 경우 본인이 처리할 수 없다는 결과를 반환하게 되고, 다음 드라이버에게 순서가 넘어간다. - 이렇게 찾은 커넥션 구현체가 클라이언트에 반환된다
'인프런 > [인프런] 스프링 DB 1편 - 데이터 접근 핵심 원리' 카테고리의 다른 글
JDBC 개발 - 수정, 삭제 (0) | 2022.05.28 |
---|---|
JDBC 개발-조회 (0) | 2022.05.23 |
JDBC개발-등록 (0) | 2022.05.23 |
JDBC와 최신 데이터 접근 기술 (0) | 2022.05.22 |
JDBC 이해 (0) | 2022.05.22 |
Comments