반응형

1. DataSource

DB와 관계된 커넥션 정보를 담고 있으며 빈으로 등록하여 인자로 넘겨줌
  • DB 서버와의 연결을 해줌
  • DB Connection pooling(DBCP) 기능
    • DB Connection Pooling
      • 자바 프로그램에서 데이터베이스 연결(커넥션 객체를 얻는것)은 오래걸림
      • 일정량의 Connection 객체를 미리 만들어 저장해두었다가 요청시 사용
      • 속도와 퍼포먼스 증가
      • 커넥션 풀을 관리하고 커넥션 객체를 풀에서 꺼냈다 반납하는 과정을 DataSource가 수행

 

 

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

  • DB와의 연결을 위해 DB서버정보(Property)를 설정
  • 설정한 property file을 통해 DataSource를 빈으로 등록
    • Spring JDBC를 이용하려면 DB 커넥션을 가져오는 DataSource를 빈으로 먼저 등록해줘야함
  • 생성된 DataSource 빈을 Spring JDBC에 주입

 

2. JDBC

자바 어플리케이션에서 표준화된 방법으로 다양한 데이터베이스에 접속할 수 있도록 설계된 인터페이스

DB에 접근할 수 있도록 Java에서 제공하는 API
  • 애플리케이션에서는 드라이버 관리자를 통해 필요한 데이터베이스 드라이버를 로드한 다음 해당 데이터베이스에 접속
  • 응용 프로그램과 DBMS간의 통신을 중간에서 번역(DBMS의 종류에 상관 X)

 

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 객체가 사용할 데이터소스를 빈에 등록하고 주입하도록 한다.
@Repository
public class JdbcIngredientRepository implements IngredientRepository {
	
	private JdbcTemplate jdbc;
	
	@Autowired
	public JdbcIngredientRepository(JdbcTemplate jdbc) {
		this.jdbc = jdbc;
	}
	
	@Override
	public Iterable<Ingredient> findAll() {
		return jdbc.query("select id, name, type from Ingredient",
				this::mapRowToIngredient);
	}
	
	@Override
	public Ingredient findById(String id) {
		return jdbc.queryForObject(
				"select id, name, type from Ingredient where id=?",
				this::mapRowToIngredient, id);
	}

<코드 분석>

  • @Repository로 인해 Class명의 레포지토리(DataSource)가 자동으로 생성
  • @Autowired로 인해 해당 Class명의 레포지토리와 JdbcTemplate이 자동으로 연결

 

  1. 빈으로 등록되어있는 DataSource를 JDBC 템플릿에 주입한다.
  2. JDBC템플릿은 JDBC Driver를 이용해 DB에 접근한다.

 

반응형

'Spring' 카테고리의 다른 글

JDBC - 데이터 UPDATE, INSERT, DELETE  (0) 2022.05.23
JDBC - DBMS 조작 기본 지식, SELECT  (0) 2022.05.21
JDBC - 기본 구조와 API  (0) 2022.05.20
Spring 데이터로 작업하기 3  (0) 2022.05.18
Spring 데이터로 작업하기 2  (0) 2022.05.18

+ Recent posts