DATABASE 공부

Template

Rocomi 2024. 8. 1. 18:36

JDBC Template은 스프링 프레임워크의 모듈 중 하나로, 데이터베이스 작업을 단순화하고 코드의 가독성을 높여주는 기능을 제공합니다. JDBC API를 사용하여 데이터베이스와 상호 작용할 때 발생하는 반복적인 코드와 예외 처리를 줄여줍니다. 이를 통해 개발자는 비즈니스 로직에 더 집중할 수 있게 됩니다.

주요 특징

  1. 반복 코드 감소:
    • JDBC Template은 데이터베이스 연결, SQL 실행, 자원 해제 등의 반복적인 작업을 자동으로 처리합니다.
  2. 예외 처리:
    • JDBC API의 체크 예외를 런타임 예외로 변환하여 예외 처리를 단순화합니다.
  3. 쿼리 실행:
    • SQL 쿼리를 실행하고 결과를 처리하는 다양한 메서드를 제공합니다.
  4. 자동 자원 관리:
    • JDBC 자원(연결, 명령문, 결과 집합)을 자동으로 관리하여 리소스 누수를 방지합니다.
  5. 편리한 콜백 지원:
    • 콜백 인터페이스를 사용하여 복잡한 데이터베이스 작업을 수행할 수 있습니다.

JDBC Template 사용 방법

JDBC Template을 사용하기 위해서는 스프링 프레임워크와 데이터베이스 연결 설정이 필요합니다. 다음은 JDBC Template을 사용하는 기본적인 단계입니다.

1. 의존성 추가

Maven 프로젝트의 경우, pom.xml 파일에 스프링 JDBC 의존성을 추가합니다.

1
2
3
4
5
6
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.3.9</version>
</dependency>
 
cs

2. 데이터베이스 설정

스프링 설정 파일에서 데이터베이스 연결을 설정합니다. 여기서는 Java Config를 사용합니다.

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
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
 
import javax.sql.DataSource;
 
@Configuration
public class AppConfig {
    
    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
        dataSource.setUsername("root");
        dataSource.setPassword("password");
        return dataSource;
    }
    
    @Bean
    public JdbcTemplate jdbcTemplate() {
        return new JdbcTemplate(dataSource());
    }
}
 
cs

3. 데이터베이스 작업

JdbcTemplate을 사용하여 데이터베이스 작업을 수행합니다.

데이터 삽입 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
 
@Repository
public class UserRepository {
    
    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    public void addUser(String name, int age) {
        String sql = "INSERT INTO users (name, age) VALUES (?, ?)";
        jdbcTemplate.update(sql, name, age);
    }
}
 
cs

데이터 조회 예제

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
31
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
 
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
 
@Repository
public class UserRepository {
    
    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    public List<User> getAllUsers() {
        String sql = "SELECT * FROM users";
        return jdbcTemplate.query(sql, new UserRowMapper());
    }
    
    private static final class UserRowMapper implements RowMapper<User> {
        public User mapRow(ResultSet rs, int rowNum) throws SQLException {
            User user = new User();
            user.setId(rs.getInt("id"));
            user.setName(rs.getString("name"));
            user.setAge(rs.getInt("age"));
            return user;
        }
    }
}
 
cs

4. 예외 처리

스프링은 JDBC 예외를 런타임 예외로 변환합니다. 예를 들어, SQLException은 DataAccessException으로 변환됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
 
@Repository
public class UserRepository {
    
    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    public void addUser(String name, int age) {
        String sql = "INSERT INTO users (name, age) VALUES (?, ?)";
        try {
            jdbcTemplate.update(sql, name, age);
        } catch (DataAccessException e) {
            // 예외 처리 로직
            System.out.println("Error inserting data: " + e.getMessage());
        }
    }
}
 
cs

결론

JDBC Template은 데이터베이스 작업을 단순화하고 코드의 가독성을 높여주는 강력한 도구입니다. 반복적인 작업을 줄이고 예외 처리를 일관성 있게 관리할 수 있어, 개발자는 비즈니스 로직에 더 집중할 수 있습니다. 스프링 프레임워크를 사용하여 데이터베이스와 상호 작용할 때 JDBC Template을 활용하면 생산성을 크게 향상시킬 수 있습니다.