[Spring] JDBC 이해하기

2025. 1. 24. 14:44·공부하기/Spring

JDBC란?

JDBC (Java DataBase Connectivity)

Java 표준 API로 , SQL 쿼리를 실행하고 결과를 가져오는 등의 데이터베이스 관련 작업을 수행하도록 하는 인터페이스와 클래스들의 집합

Java를 사용하여 DB와 상호작용하기 위해 가장 오래 & 널리 사용된 Java의 표준 API이다.

JDBC만 사용하여 데이터베이스와 상호작용하는 것은 가능하지만, 다음과 같은 문제점이 생긴다.

  1. 예외처리가 번거롭다. SQLException 예외 처리를 위해 Try-Catch 블록을 여러 곳에 작성해야 한다.
  2. Connection, Statement, ResultSet 객체를 사용한 뒤 반드시 close() 메서드를 호출하여야 한다. 이처럼 자원 누수를 방지하기 위해 많은 자원 관리 코드를 작성해야 한다.
  3. 쿼리 작성의 반복성. SQL쿼리를 직접 작성해야 하기 때문에 같은 유형의 SQL 쿼리나 DB 작업을 여러번 수행할 경우 반복적인 코드가 많아진다.

Spring JDBC란?

Spring JDBC는 JDBC 작업을 더 쉽게 도와준다.

JDBC 작업을 추상화한 계층을 제공하여 기본적인 JDBC 템플릿을 통해 반복적인 코드나 예외 처리, 자원 관리와 같은 기본 작업들을 대신 처리해준다.
  • `JdbcTemplate`클래스를 기반으로 다양한 클래스들을 제공한다.


Spring JDBC 주요 클래스

JdbcTemplate

central & lowest-level 클래스로, 다른 데이터베이스 접근 클래스들은 모두 JdbcTemplate을 내부적으로 사용한다.

Connection 생성과 종료, statement 생성과 실행과 같은 기본적인 JDBC 작업들을 수행한다.

  • SQL 쿼리를 실행한다. 결과를 ResultSet 형태로 받아온다. (ex. query() 메서드) 
  • UPDATE, INSERT, DELETE와 같은 DML문을 실행한다. (ex. update() 메서드)
  • 저장 프로시저를 호출한다. (ex. call() 메서드)
  • ResultSet을 순회하면서 쿼리 결과를 처리하는 작업을 할 수 있다. (ex. RowMapper 인터페이스 사용)
private final RowMapper<Actor> actorRowMapper = (resultSet, rowNum) -> {
	Actor actor = new Actor();
	actor.setFirstName(resultSet.getString("first_name"));
	actor.setLastName(resultSet.getString("last_name"));
	return actor;
};

public List<Actor> findAllActors() {
	return this.jdbcTemplate.query("select first_name, last_name from t_actor", actorRowMapper);
}
  • SQLException과 같은 JDBC 예외를 처리하고 더 구체적인 Spring Exception으로 변환한다.

(+) 유사하지만 파라미터에 `?` 대신 이름을 정해 삽입할 수 있는 기능을 제공하는 클래스로 `NamedParameterJdbcTemplate`이 존재한다.

사용 방법

@Repository
public class JdbcTemplateTodoRepository implements TodoRepository {
    private final JdbcTemplate jdbcTemplate;

    public JdbcTemplateTodoRepository(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }
    
    // 기타 메서드 ...
}
  • JdbcTemplate을 사용하는 클래스에 `@Repository` 어노테이션을 단다.
    • Srping 빈으로 등록된다.
    • 의존성 주입을 위한 컴포넌트 스캔 대상이 된다.
  • JdbcTemplate을 생성할 때, `DataSource`를 주입받도록 한다. (생성자 파라미터로 명시 / 혹은 @Autowired)
    • Spring Boot는 `applicaiton.properties` 또는 `application.yml`에 데이터베이스 관련 설정이 존재하면 해당 설정을 기반으로 DataSource 빈을 자동 생성한다.
    • 수동으로 생성하고싶을 경우, `@Configuration` 클래스에서 `@Bean`을 사용하여 직접 정의할 수 있다.

* 기타 내용은 공부 후 차후 추가 예정

 

 

 

 

 

 
저작자표시 비영리 변경금지 (새창열림)

'공부하기 > Spring' 카테고리의 다른 글

[Spring] JPA Cascade에 대해 정리해보자 💭  (0) 2025.03.11
[Spring] 영속성 컨텍스트에 대해 정리해보자  (0) 2025.02.27
[Spring] Interceptor에 대해 알아보자  (0) 2025.02.26
[Spring] LoginCheckFilter 구현 : 로그인/아웃 로직 구현하기  (0) 2025.02.10
[Spring] 기본 예외 처리와 Custom 예외 처리 함께 사용하기  (0) 2025.02.04
'공부하기/Spring' 카테고리의 다른 글
  • [Spring] 영속성 컨텍스트에 대해 정리해보자
  • [Spring] Interceptor에 대해 알아보자
  • [Spring] LoginCheckFilter 구현 : 로그인/아웃 로직 구현하기
  • [Spring] 기본 예외 처리와 Custom 예외 처리 함께 사용하기
다섯자두
다섯자두
All I need is 💻 , ☕️ and a dash of luck
  • 다섯자두
    subbni
    다섯자두
  • 전체
    오늘
    어제
    • 전체 글 (89)
      • 개발 이야기 (0)
      • 만들어보기 (17)
        • FromBookToBook (5)
        • Spring (5)
        • Node.js & React (3)
        • TroubleShooting (4)
      • 공부하기 (72)
        • Network (3)
        • Cloud (1)
        • Database (5)
        • Java (13)
        • Javascript (0)
        • Spring (9)
        • React (18)
        • Algorithm (8)
        • 자료구조 (7)
        • ETC (8)
      • 회고 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • velog
  • 공지사항

  • 인기 글

  • 태그

    redis
    재시도 로직
    outbox 패턴
    Express
    티스토리챌린지
    outbox
    pdf 자동 다운로드
    java
    springboot
    Spring
    자료구조
    network
    로그인
    Database
    오블완
    SQS
    Til
    알림 기능
    SQL
    최단거리
    HTTP
    알고리즘
    프로젝트
    서명알고리즘
    pdf 프리뷰 실패
    aws
    실시간 데이터 전송 기술
    mysql
    SSE
    JPA
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
다섯자두
[Spring] JDBC 이해하기
상단으로

티스토리툴바