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