BE/Spring & Spring Boot

[Spring Boot] Spring JDBC

baek-dev 2025. 4. 22. 13:13

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 기본 사용 흐름

  1. DataSource 빈 등록
  2. JdbcTemplate 생성 및 주입
  3. SQL 작성
  4. 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