728x90
728x90
스프링 JDBC를 이용한 데이터베이스 연결: 상세 가이드
소개
스프링 프레임워크는 JDBC를 사용하여 데이터베이스와 상호 작용하는 것을 간소화하고, 반복적인 작업을 줄여주는 강력한 기능을 제공합니다. 이 글에서는 스프링 JDBC를 이용하여 데이터베이스에 연결하고, 데이터를 조회, 삽입, 수정, 삭제하는 방법을 상세하게 설명합니다.
1. 환경 설정
- 의존성 추가:
- pom.xml (Maven) 또는 build.gradle (Gradle) 파일을 통해 스프링 JDBC 의존성을 추가합니다.
- 데이터베이스 드라이버 의존성도 함께 추가해야 합니다.
- 데이터 소스 설정:
- application.properties 또는 application.yml 파일에서 데이터베이스 연결 정보를 설정합니다.
- 데이터베이스 URL, 사용자 이름, 비밀번호 등을 포함합니다.
- JdbcTemplate 설정:
- 스프링 빈으로 JdbcTemplate을 설정합니다.
- 데이터 소스를 JdbcTemplate에 주입합니다.
2. JdbcTemplate 사용하기
- 쿼리 실행:
- queryForObject(): 단일 행, 단일 열 결과를 가져올 때 사용합니다.
- queryForList(): 여러 행의 결과를 List 형태로 가져올 때 사용합니다.
- update(): INSERT, UPDATE, DELETE 쿼리를 실행할 때 사용합니다.
- batchUpdate(): 여러 개의 쿼리를 한 번에 실행할 때 사용합니다.
- 매개변수 바인딩:
- PreparedStatement와 유사하게 ?를 사용하여 매개변수를 지정하고, JdbcTemplate의 메서드를 통해 값을 바인딩합니다.
- SQL 인젝션을 방지하기 위해 매개변수 바인딩을 사용하는 것이 중요합니다.
- RowMapper 사용:
- 결과셋을 자바 객체로 매핑하기 위해 RowMapper 인터페이스를 구현합니다.
- query() 메서드와 함께 사용하여 결과를 객체로 변환합니다.
728x90
3. 예제 코드
@Repository
public class UserRepository {
@Autowired
private JdbcTemplate jdbcTemplate;
public User findById(Long id) {
String sql = "SELECT * FROM users WHERE id = ?";
return jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), id);
}
public void save(User user) {
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
jdbcTemplate.update(sql, user.getName(), user.getEmail());
}
}
4. 스프링 데이터 JPA와의 비교
- JDBC:
- 저수준 API, 직접 SQL 작성
- 유연성이 높지만, 개발 생산성이 낮을 수 있음
- JPA:
- 객체-관계 매핑, JPQL 사용
- 개발 생산성이 높지만, 학습 곡선이 있음
스프링 JDBC 선택 시 고려 사항:
- 성능: 복잡한 쿼리나 대량 데이터 처리 시 JDBC가 유리할 수 있습니다.
- 유연성: JDBC는 직접 SQL을 작성하기 때문에 유연성이 높습니다.
- 생산성: JPA는 개발 생산성을 높여주지만, 복잡한 경우에는 JDBC가 더 적합할 수 있습니다.
5. 추가 고려 사항
- 트랜잭션: @Transactional 어노테이션을 사용하여 트랜잭션을 관리합니다.
- 예외 처리: DataAccessException을 상속받는 예외를 처리하여 데이터베이스 관련 오류를 처리합니다.
- PreparedStatementCreator: 복잡한 쿼리를 작성할 때 사용합니다.
- CallableStatementCreator: 저장 프로시저를 호출할 때 사용합니다.
결론
스프링 JDBC는 데이터베이스와의 상호 작용을 위한 강력한 도구입니다. JdbcTemplate을 사용하면 간결하고 효율적인 코드로 데이터베이스를 관리할 수 있습니다. 하지만, 복잡한 데이터 모델이나 성능이 중요한 경우에는 스프링 데이터 JPA와 같은 고급 ORM 솔루션을 고려해야 합니다.
728x90
728x90
'SpringBoot 를 배워보자 > 5. 데이터베이스 연동' 카테고리의 다른 글
트랜잭션 관리 (0) | 2024.09.29 |
---|---|
엔티티 설계 및 CRUD 작업 (0) | 2024.09.29 |
Spring Data JPA를 이용한 데이터베이스 연동 (0) | 2024.09.29 |