SpringBoot 를 배워보자/5. 데이터베이스 연동

스프링 JDBC를 이용한 데이터베이스 연결

_Blue_Sky_ 2024. 9. 29. 15:45
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