Spring Boot에서는 JdbcTemplate을 사용하여 MySQL 데이터베이스와 쉽게 상호작용할 수 있습니다. 이 섹션에서는 JDBC를 이용한 데이터 삽입, 조회, 수정, 삭제 작업을 단계별로 설명합니다. 이를 통해 애플리케이션에서 데이터를 효율적으로 처리할 수 있는 방법을 배우게 됩니다.
4.1 JdbcTemplate란?
JdbcTemplate은 Spring Framework에서 제공하는 유틸리티 클래스입니다. JDBC(Java Database Connectivity)를 간소화하여 다음과 같은 작업을 쉽게 처리할 수 있습니다:
- 데이터베이스 연결 및 쿼리 실행.
- PreparedStatement를 사용한 안전한 SQL 실행.
- SQL 실행 후 결과를 객체로 매핑.
JdbcTemplate의 주요 특징
- JDBC의 반복적인 작업(예: 커넥션 관리, 쿼리 실행, 예외 처리)을 자동화.
- 간결하고 가독성 높은 코드 작성 가능.
- SQL Injection 방지를 위한 PreparedStatement 지원.
4.2 JdbcTemplate 설정
JdbcTemplate을 사용하려면 먼저 Spring Boot에 이를 설정해야 합니다.
설정 코드 예제
@Configuration 클래스를 사용하여 JdbcTemplate을 Bean으로 등록합니다:

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("cohttp://m.mysql.cj.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/my_database"); dataSource.setUsername("app_user"); dataSource.setPassword("password123"); return dataSource; } @Bean public JdbcTemplate jdbcTemplate(DataSource dataSource) { return new JdbcTemplate(dataSource); } } |
4.3 데이터 삽입 (INSERT)
데이터를 테이블에 삽입하는 방법입니다. 사용자 정보를 저장한다고 가정해보겠습니다.
예제 코드

import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; @Repository public class UserRepository { private final JdbcTemplate jdbcTemplate; public UserRepository(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public int addUser(String name, String email) { String sql = "INSERT INTO user (name, email) VALUES (?, ?)"; return jdbcTemplate.update(sql, name, email); } } |
설명
- jdbcTemplate.update: SQL 쿼리를 실행하고, 영향을 받은 행의 개수를 반환합니다.
- ?는 PreparedStatement를 사용하여 SQL Injection 방지에 도움을 줍니다.
4.4 데이터 조회 (SELECT)
데이터를 조회하여 결과를 객체로 매핑하는 방법입니다.
예제 코드

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 { private final JdbcTemplate jdbcTemplate; public UserRepository(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public List<User> getAllUsers() { String sql = "SELECT * FROM user"; return jdbcTemplate.query(sql, new RowMapper<User>() { @Override public User mapRow(ResultSet rs, int rowNum) throws SQLException { User user = new User(); user.setId(rs.getLong("id")); user.setName(rs.getString("name")); user.setEmail(rs.getString("email")); user.setCreatedAt(rs.getTimestamp("created_at").toLocalDateTime()); return user; } }); } } |
설명
- jdbcTemplate.query: SQL 쿼리를 실행하고 결과를 리스트로 반환합니다.
- RowMapper: 데이터베이스의 각 행을 Java 객체로 매핑합니다.
4.5 데이터 수정 (UPDATE)
테이블의 데이터를 수정하는 방법입니다.
예제 코드

public int updateUser(Long id, String name, String email) { String sql = "UPDATE user SET name = ?, email = ? WHERE id = ?"; return jdbcTemplate.update(sql, name, email, id); } |
설명
- 업데이트할 데이터와 조건을 PreparedStatement를 통해 전달합니다.
- 반환값은 영향을 받은 행의 개수입니다.
4.6 데이터 삭제 (DELETE)
테이블에서 데이터를 삭제하는 방법입니다.
예제 코드

public int deleteUser(Long id) { String sql = "DELETE FROM user WHERE id = ?"; return jdbcTemplate.update(sql, id); } |
설명
- 특정 ID의 데이터를 삭제하며, PreparedStatement로 안전한 SQL 실행이 가능합니다.
4.7 예외 처리
SQL 실행 중 오류가 발생하면 Spring은 DataAccessException을 던집니다. 이를 처리하려면 try-catch 블록 또는 전역 예외 처리기를 사용할 수 있습니다.
예제 코드

public int addUserSafe(String name, String email) { try { String sql = "INSERT INTO user (name, email) VALUES (?, ?)"; return jdbcTemplate.update(sql, name, email); } catch (DataAccessException e) { System.err.println("Database error: " + e.getMessage()); return 0; // 실패 시 0 반환 } } |
4.8 전체 예제
아래는 CRUD 작업을 포함한 완전한 코드입니다.
UserRepository.java
@Repository public class UserRepository { private final JdbcTemplate jdbcTemplate; public UserRepository(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public int addUser(String name, String email) { String sql = "INSERT INTO user (name, email) VALUES (?, ?)"; return jdbcTemplate.update(sql, name, email); } public List<User> getAllUsers() { String sql = "SELECT * FROM user"; return jdbcTemplate.query(sql, (rs, rowNum) -> { User user = new User(); user.setId(rs.getLong("id")); user.setName(rs.getString("name")); user.setEmail(rs.getString("email")); user.setCreatedAt(rs.getTimestamp("created_at").toLocalDateTime()); return user; }); } public int updateUser(Long id, String name, String email) { String sql = "UPDATE user SET name = ?, email = ? WHERE id = ?"; return jdbcTemplate.update(sql, name, email, id); } public int deleteUser(Long id) { String sql = "DELETE FROM user WHERE id = ?"; return jdbcTemplate.update(sql, id); } } |
결론
이 섹션에서는 JDBC와 MySQL을 사용하여 데이터를 삽입, 조회, 수정, 삭제하는 방법을 배웠습니다. Spring의 JdbcTemplate을 활용하면 데이터베이스 작업을 간소화하고 안전하게 처리할 수 있습니다. 다음 섹션에서는 REST API와 연동하여 이 작업들을 수행하는 방법을 알아보겠습니다.
'Spring Boot & MySQL' 카테고리의 다른 글
1.6. 데이터 타입 변환과 오류 처리 (0) | 2024.12.25 |
---|---|
1.5. REST API와 연동 (1) | 2024.12.22 |
1.3. MySQL 데이터베이스 설정 (0) | 2024.12.22 |
1.2. 개발 환경 설정 (0) | 2024.12.22 |
1.1. 개요 (1) | 2024.12.22 |