| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 컨테이너
- Routing Key
- JPA
- docker
- @ComponentScan
- MSA
- 서블릿 컨테이너
- @Transactional
- 페이징
- securitycontextholderfilter
- 쿠버네티스
- CORS
- redis
- docker compose
- mybatis
- AWS
- Spring
- dockerhub
- DI
- JPQL
- JdbcTemplate
- Web
- kafka
- JWT
- DLQ
- 스프링 부트
- Spring Data JPA
- 지연 로딩
- Dead Letter Queue
- Spring Container
- Today
- Total
look-forest
스프링 DB 접근 기술(구) 본문
개요
- H2 데이터베이스: 개발이나 테스트 용도로 가볍고 편리한 DB. (웹 화면 제공)
- 순수 JDBC: DB와 애플리케이션 서버를 연결할 때 필요한 기술. (복잡..)
- 스프링 JdbcTemplate: JDBC를 편리하게 쓸 수 있도록 감싼 기술. (JDBC 사용 과정 중 중복 제거)
- JPA: 쿼리없이! '객체' 저장 및 조회. SQL을 자동 생성.
- 스프링 데이터 JPA: JPA를 편리하게 쓸 수 있도록 감싼 기술. (구현없이 인터페이스 만으로!)
순수 JDBC로 DB 연결
DB와 애플리케이션 서버를 연결할 때 필요한 기술이다.
그러나 너무 복잡해서 거의 쓰지 않는다. 그냥 기본 용어 정도만 참고하자.
- JDBC 드라이버
Java는 DB와 연결할 때 JDBC 드라이버가 필요하다
- DataSource
데이터베이스 커넥션을 획득할 때 사용하는 객체
스프링 부트는 applications.properties의 데이터베이스 커넥션 정보를 바탕으로
DataSource를 생성하고 스프링 빈으로 만들어둔다. 그래서 DI를 받을 수 있다


DataSource는 java에서 connection pool을 지원하기 위한 인터페이스이기도 하다.
순수 JDBC로 데이터베이스에 접근하면, 접근할 때마다 connection을 맺고 끊는 작업을 한다.
이런 부담스러운 작업을 줄이기 위해 미리 connection을 생성해둔다.
이 connection들을 모아두는 장소를 connection pool이라 한다.
- ResultSet
SQL 결과 집합
DB의 행 집합뿐만 아니라 열 이름, 각 열의 유형 및 크기와 같은 쿼리에 대한 메타 데이터
※ resultSet 내부에는 데이터를 읽을 수 있는 커서가 있다.
이게 처음에는 데이터를 읽을 수 없는 가장 앞쪽에 있어서 한번은 rs.next()를 호출해주어야 그 다음부터 데이터를 읽을 수 있다
※ JdbcMemberRepository를 사용하도록 스프링 설정 변경
앞서 배운 DI를 통해, 단 한줄 만으로 구현체를 갈아 끼울 수 있다!


Spring JdbcTemplate
복잡한 JDBC API를 편리하게 쓸 수 있도록 감싼 기술이다.
스프링 JdbcTemplate과 MyBatis 같은 라이브러리는 JDBC API를 활용할 때의 반복 코드를 제거해준다.
(by template method 패턴, callback 등)
하지만 여전히 SQL은 직접 작성해야 한다.
- 순수 Jdbc와 동일한 환경설정을 하면 된다
- 사용 예


- RowMapper
ResultSet의 row 하나만을 매핑하기 위해 사용
템플릿으로부터 ResultSet을 전달받고, 필요한 정보를 추출해서 리턴하는 방식으로 동작.

RowMapper에서 만들어진 Member 오브젝트는 jdbc템플릿이 미리 준비한 List 컬렉션에 추가되며,
작업을 마치면 모든 row에 대한 Member 오브젝트를 담고 있는 List 오브젝트가 리턴된다.
이처럼 JDBC Template 방식은 직접 쿼리를 작성하고, 객체 맵핑까지 해줘야 한다..
참고 자료
스프링 입문(김영한 님)
'Spring > Spring 웹 개발 큰 그림' 카테고리의 다른 글
| AOP (0) | 2021.05.02 |
|---|---|
| 스프링 DB 접근 기술(신) (0) | 2021.05.01 |
| 스프링 빈과 의존 관계 (0) | 2021.04.27 |
| Spring 웹 개발 기초 (0) | 2021.04.24 |
| 프로젝트 환경 설정 (0) | 2021.04.24 |