이숭간 공부기록

[Spring] Spring JDBC, DataSource란? 본문

공부공부/Spring Boot

[Spring] Spring JDBC, DataSource란?

이숭간 2021. 7. 25. 17:49
728x90

DataSource란?

  • DB와 관계된 커넥션 정보를 담고있으며 빈으로 등록하여 인자로 넘겨준다. → 이 과정을 통해 Spring은 DataSource로 DB와의 연결을 획득한다.
    • DB 서버와의 연결을 해준다.
    • DB Connetion pooling기능
  • 종류 : JDBC Driver vendor(MySQL, Oracle)별로 여러가지가 존재한다.

DataSource를 설정하고 빈에등록, 주입하는 방법

  1. DB와의 연결을 위해 **DB서버 정보(Property)**를 설정한다. (하드코딩을 피하기위해 파일로 설정 → 이곳에서만 수정하면 다른 모든부분에 변경내용이 적용되므로 이렇게 하는것이 좋다.)
  2. 설정한 property file을 통해 DataSource를 빈으로 등록한다.
    1. Spring JDBC를 이용하려면 DB 커넥션을 가져오는 DataSource를 빈으로 먼저 등록해줘야함!!
  3. 생성된 DataSource빈을 Spring JDBC에 주입한다.

DB Connection Pooling이란?

  • 자바 프로그램에서 데이터베이스 연결(커넥션 객체를 얻는것)은 오래걸림
  • 일정량의 Connection객체를 미리 만들어 저장해두었다가 요청시 꺼내쓴다!
  • 속도와 퍼포먼스가 좋아짐
  • 커넥션풀을 관리하고, 커넥션객체를 풀에서 꺼냈다 반납하는 이러한 과정을 DataSource가 하는것!

 

JDBC란?

DB에 접근할수 있도록 Java에서 제공하는 API (Java Database Connectivity)

즉, 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다.

JDBC를 이용하면 데이터베이스에 비 종속적인 DB연동로직을 구현할 수 있다. 즉 mysql을 쓰다가 postgre로 얼마든지 옮길 수 있다는건데 이는 jdbc api가 여러 DB Driver를 호환할 수 있는 인터페이스를 제공하기 때문이다.

Plain JDBC의 문제점

  • 쿼리를 실행하기 전과 후에 많은 코드를 작성해야한다. (연결생성, 명령문, 등등)
  • 예외처리코드와 트랜잭션 처리등에 시간과 자원이 소모
    • jdbc에서 발생하는 에러는 Runtime Exception이다. 따라서 모두 예외처리를 해줘야함
  • 이러한 문제점을 보완하여 생겨난것이 Spring JDBC

 

Spring JDBC란?

JDBC의 단점을 보완하여 더 편리한 기능을 제공

Spring JDBC가 하는일

  • Connection 열기와 닫기
  • Statement 준비와 닫기
  • Statement 실행
  • ResultSet Loop처리
  • Exception 처리와 반환
  • Transaction 처리

Spring JDBC에서 개발자가 할 일

핵심적으로 해야될 작업만 해주면 나머지는 Framwork가 알아서 처리해준다.

  • datasource 설정
  • sql문 작성
  • 결과 처리

 

JDBC Template이란?

Spring JDBC접근 방법중 하나로, 내부적으로 Plain JDBC API를 사용하지만 위와같은 문제점을 해결한 Spring에서 제공하는 클래스

JdbcTemplate이 제공하는 기능

  • 실행 : Insert나 Update같이 DB의 데이터에 변경이 일어나는 쿼리를 수행하는 작업
  • 조회 : Select를 이용해 데이터를 조회하는 작업
  • 배치 : 여러 개의 쿼리를 한 번에 수행해야 하는 작업
  • jdbc template을 사용하면 커넥션 연결/종료와같은 세부적인 작업을 개발자가 직접 처리하지 않아도 되게된다.

DataSource설정

  • JDBC템플릿 클래스가 JDBC API를 이용하고 DB연동을 처리하려면 DB로부터 커넥션을 얻어야한다. 따라서 JdbcTemplate 객체가 사용할 데이터소스를 빈에 등록하고 주입하도록 한다.DataSource설정
    출처 : https://gmlwjd9405.github.io/2018/05/15/setting-for-db-programming.html
     
    1. 빈으로 등록되어있는 DataSource를 JDBC 템플릿에 주입한다.
    2. JDBC템플릿은 JDBC Driver를 이용해 DB에 접근한다.

 

정리

spring-jdbc를 이용해서 plain jdbc의 단점을 보완하며 핵심 로직에만 집중할수 있도록 한다. 이때 Spring-jdbc의 여러 접근방법중 가장 많이 쓰이는 jdbcTemplate을 선택한다.

DataSource를 빈으로 등록하고 이를 jdbc템플릿에 주입한다. 이러한 과정을 통해 데이터소스는 디비와 연결을 획득한다. 어떤 디비를 사용하느냐에 따라 디비에 맞는 jdbc driver가 존재한다.

jdbc템플릿이 jdbc드라이버를 이용해서 DB에 접근한다.

 

 

 

출처:

https://velog.io/@ehdrms2034/%EC%8A%A4%ED%94%84%EB%A7%81-MVC-Spring-JDBC

https://gmlwjd9405.github.io/2018/05/15/setting-for-db-programming.html