Spring JDBC 란 무엇인가
Spring JDBC 는 Spring Framework에서 제공하는 JDBC (Java Database Connectivity) 추상화 라이브러리임.
기본 Java JDBC API는 매우 낮은 수준의 코드 작성이 요구되고, 반복 코드가 많으며 예외 처리가 복잡함.
Spring JDBC 는 이런 복잡한 과정을 간결하고 일관성 있는 방식으로 처리할 수 있도록 도와주는 모듈임.
기본 JDBC 기능은 그대로 사용하면서도, Spring이 제공하는 템플릿 기반의 API를 통해 코드량을 줄이고 예외 처리, 트랜잭션 관리, 리소스 정리를 자동화할 수 있음.
1. Spring JDBC 의 주요 특징
- JDBC 코드 간소화
- 반복되는 Connection, PreparedStatement, ResultSet 코드를 줄일 수 있음.
- 템플릿 기반 API (JdbcTemplate)
- 데이터베이스 작업을 추상화하여 일관된 방식으로 처리할 수 있음.
- 예외 변환 처리
- SQLException 을 스프링의 DataAccessException 계열 예외로 변환하여 일관된 방식으로 처리 가능함.
- 트랜잭션 관리 통합
- Spring의 선언적 트랜잭션과 자연스럽게 통합됨.
- 명시적인 SQL 제어 가능
- ORM(JPA)과 달리 SQL을 직접 작성할 수 있으므로, 복잡한 쿼리 최적화가 쉬움.
2. JdbcTemplate 이란
JdbcTemplate 은 Spring JDBC 의 핵심 클래스임.
SQL 실행, 파라미터 바인딩, 예외 처리, 자원 해제를 자동으로 처리해 줌.
주요 메서드
메서드 | 설명 |
query() | SELECT 쿼리 수행, 결과를 리스트로 반환 |
queryForObject() | 단일 결과 조회 |
update() | INSERT, UPDATE, DELETE 쿼리 수행 |
batchUpdate() | 여러 건의 쿼리를 한 번에 처리 |
execute() | 쿼리 실행 (DDL 등) |
3. Spring JDBC 기본 사용 흐름
- DataSource 빈 등록
- JdbcTemplate 생성 및 주입
- SQL 작성
- JdbcTemplate 의 메서드로 쿼리 실행
4. 사용 예제
1) 의존성 추가 (Gradle)
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'com.mysql:mysql-connector-j'
2) application.yml 설정
spring:
datasource:
url: jdbc:mysql://localhost:3306/testdb
username: root
password: password
driver-class-name: com.mysql.cj.jdbc.Driver
3) Repository 코드 예시
@Repository
public class UserRepository {
private final JdbcTemplate jdbcTemplate;
public UserRepository(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public List<User> findAll() {
String sql = "SELECT * FROM users";
return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
}
public void save(User user) {
String sql = "INSERT INTO users(name, age) VALUES(?, ?)";
jdbcTemplate.update(sql, user.getName(), user.getAge());
}
}
5. BeanPropertyRowMapper 란?
- ResultSet의 컬럼 이름과 자바 객체의 필드 이름을 매핑해주는 매퍼임.
- 예: SELECT id, name FROM users → User 클래스의 id, name 필드에 자동 매핑됨.
- 단, 필드 이름과 DB 컬럼 이름이 정확히 일치해야 함.
6. Spring JDBC 의 장단점
장점 | 단점 |
JDBC의 복잡한 작업을 간소화함 | SQL 직접 작성이 필요하여 반복 가능성 존재 |
SQL을 직접 제어할 수 있음 | 코드가 JPA보다 장황해질 수 있음 |
Spring 트랜잭션 관리와 잘 통합됨 | 객체 간 관계를 매핑하려면 추가 로직 필요 |
학습 난이도가 비교적 낮음 | 대형 프로젝트에서는 코드 분리가 필요함 |
7. 실무 활용 사례
- 복잡한 쿼리가 필요한 경우
- JPA보다 SQL 성능이 중요한 경우 직접 작성 가능함.
- 레거시 시스템 통합
- 기존 JDBC 코드나 SQL 기반 시스템과 연동할 때 유리함.
- 배치 처리
- 대량의 데이터를 다룰 때 batchUpdate() 등으로 처리 성능을 높일 수 있음.
- JPA 대체 또는 보완
- 단순 조회나 고성능 쿼리를 위해 JPA와 혼용하여 사용하는 경우도 많음.
정리
Spring JDBC 는 순수 JDBC 코드의 복잡한 부분을 템플릿 방식으로 감싸서, 간단하고 일관된 방식으로 DB 작업을 처리할 수 있도록 도와주는 라이브러리임.
특히 JdbcTemplate 을 사용하면 SQL 작성은 그대로 유지하면서, 자원 해제, 예외 처리, 반복 코드를 최소화할 수 있음.
JPA 의 복잡함을 피하고, SQL 최적화가 필요한 경우에 효과적으로 사용 가능함.
출처 : ChatGPT
'BE > Spring & Spring Boot' 카테고리의 다른 글
[Spring Boot] STOMP (1) | 2025.04.26 |
---|---|
모놀리식 아키텍처와 MSA (0) | 2025.04.24 |
[Spring Boot] 웹소켓 (1) | 2025.04.19 |
[Spring Boot] @CacheEvict (0) | 2025.04.15 |
[Spring Boot] 소셜로그인 (1) | 2025.04.07 |