JDBC Connection 구현 실습

zzangbae·2023년 4월 24일
0

스프링 DB

목록 보기
3/4

이 글은 개발 공부하는 "학생"의 글입니다. 참고용으로만 활용해주시길 바랍니다. 혹시 오류를 찾으셨다면 답글달아주시면 정말 감사드리겠습니다:)

공부한 곳 : 김영한 스프링 DB 핵심강의1 -> 정말 이해가 잘갑니다,,강추,,!

오늘은 JDBC 공부한 내용을 직접 코드로 쳐보면서 적용해 보겠습니다. 복습하자면, JDBC는 DB마다 달랐던 커넥션 연결, SQL 전달, 결과 응답을 인터페이스를 하나 두고, 각 DB사 마다 구현체를 만들게 해서 개발자가 JDBC 활용법만 알면 쉽게 DB 연결을 할 수 있도록 하기 위해서 나왔다는 것을 기억해봅시다!

1. Springboot로 파일 생성

  • 스프링부트로 파일을 생성할 때, 아래의 두 가지를 dependancy에 넣어서 받습니다.
    1. Spring JDBC API
    2. h2 driver -> h2 db 구현체
  • 추가적으로 @어노테이션을 쉽게 활용할 수 있도록 lombok정도를 추가적으로 넣어주세요!

2. 데이터베이스 켜기

  • h2 데이터베이스를 이용하겠습니다.
  • 버전은 각자의 spring 버전에 맞게 받아주시면 될 것 같습니다.
    (종종 버전이 안맞아서 오류가 뜨는데, 그럴 땐 1.4.200을 추천드립니다.)
  • 추가로 먼저 DB파일을 구성하고, 연결하는 과정이 있기는 하지만, 생략하겠습니다.
  • 아래와 데이터베이스 연결할 수 있는 상태를 만듦니다.
  • 여기서 사용자명, 비밀번호는 알아서 지정해주시되, 기억해주세요.
    -> 스프링 서버에서 DB를 접속할 때, 알아야할 데이터들입니다!
  • JDBC URL은 해당 DB의 URL이므로, 이 또한 DB 접속 때 사용하니, 기억해주세요!

3. 연결에 필요한 상수 선언

public abstract class ConnectionConst {
	public static final String URL = "jdbc:h2:tcp://localhost/~/test";
    public static final String USERNAME = "sa";
    public static final String PASSWORD = "";
}
  • 추상 클래스로 선언한 것은 인스턴스로 만들어지는 것을 막기 위해서입니다.
  • 모든 곳에서 이 클래스의 멤버 변수를 사용하게 하기위해 static을 썼습니다.
  • 바뀌는 값이 아니기 때문에 final을 추가했습니다.
  • ""안의 값은 데이터베이스를 연결할 때 정해준 값입니다.(JDBC URL, 사용자 명, 비밀번호)

4. 데이터베이스와 연결하는 코드 작성

// ConnectionConst에 있는 멤버변수들을 정적선언해줌
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 IllegalStatementException(e)
        }
    }
}
  • 데이터베이스와의 연결을 하기 위해서 JDBC가 제공하는 DriverManager.getConnection(..)을 이용했다.
    -> 아까 위에서 다운받아주었던 DB 드라이버를 찾고, 해당 드라이버가 제공하는 커넥션을 반환해준다.

5. 연결 테스트하기

  • 테스트 코드는 test파트에서 해준다.
// 정적 선언
import static org.assertj.core.api.Assertions.assertThat;

@Slf4j
class DBConnectionUtilTest {
	@Test
    void connection() {
    	Connection connection = DBConnectionUtil.getConnection();
        assertThat(connection).isNotNull();
    }
}

아래와 같은 결과가 나온다.

DBConnectionUtil - get connection=conn0: url=jdbc:h2:tcp://localhost/~/test
user=SA, class=class org.h2.jdbc.JdbcConnection
  • conn0: ~ user=SA가 반환된 connection이다.
  • class는 class org.h2.jdbc.JdbcConnection임을 확인할 수 있다.
    -> java.sql.Connection인터페이스를 H2전용으로 구현한 것이다.

6. 정리

정리

  • JDBC는 java.sql.Connection 표준 커넥션 인터페이스를 정의한다.
  • 각 DB마다 해당 인터페이스를 구현한 구현체가 존재하며, Driver를 라이브러리로 받아서 활용할 수 있다.
    -> 위의 경우, org.h2.jdbc.JdbcConnetion이 그 구현체이다.

profile
배우는 게 너무 즐거운 개발자

0개의 댓글