스프링

스프링5 프로그래밍 입문 - DB 연동

담쏙 2023. 11. 5. 21:27
728x90

JDBC 프로그래밍의 단점 보완

  • JDBC 사용 시, DB 연동에 필요한 Connection을 구한 다음 쿼리를 실행하기 위한 PreparedStatement 생성 / 쿼리 실행 후 finally 블록에서 ResultSet, PreparedStatement, Connection을 닫는 과정이 구조적으로 반복
  • 이를 위해 스프링은 템플릿 메서드 패턴과 전략 패턴을 엮은 JdbcTemplate 클래스 제공
  • 또한 트랜잭션을 사용하는 메서드에 @Transactional 애노테이션만 붙이면 되어 트랜잭션 관리가 쉬움

 

DataSource 설정

  • JDBC API는 DriverManager 외에 DataSource를 이용해서 DB 연결 가능
Connection conn = null;
try {
	// dataSource는 생성자나 설정 메서드를 이용해서 주입받음
    conn = dataSource.getConnection();
    ...
  • DB 연동에 사용할 DataSoruce를 스프링 빈으로 등록하고 DB 연동 기능을 구현한 빈 객체는 DataSource를 주입받아 사용

 

Tomcat JDBC의 주요 프로퍼티

  • 커넥션 풀은 커넥션을 생성하고 유지
  • 커넥션 풀에 커넥션을 요청하면 해당 커넥션은 활성(active) 상태가 되고, 커넥션을 다시 커넥션 풀에 반환하면 유휴(idle) 상태가 됨
설정 메서드 설명
setInitialSize(int) 커넥션 풀을 초기화할 때 생성할 초기 커넥션 개수를 지정.
기본값은 10
setMaxActive(int) 커넥션 풀에서 가져올 수 있는 최대 커넥션 개수 지정.
기본값은 100
setMaxIdle(int) 커넥션 풀에 유지할 수 있는 최대 커넥션 개수를 지정.
기본값은 maxActive와 같음.
setMinIdle(int) 커넥션 풀에 유지할 최소 커넥션 개수를 지정.
기본값은 initialSize에서 가져옴.
setMaxWait(int) 커넥션 풀에서 커넥션을 가져올 때 대기할 최대 시간을 밀리초 단위로 지정. 기본값은 30000밀리초 (30초)
setMaxAge(long) 최초 커넥션 연결 후 커넥션의 최대 유효 시간을 밀리초 단위로 지정. 기본값은 0 (유효시간이 없음)
setValidationQuery(String) 커넥션이 유효한지 검사할 때 사용할 쿼리 지정. 언제 검사할지는 별도 설정으로 지정. 기본값은 null.
null 이면 검사하지 않으며, select 1 이나 select 1 from dual 과 같은 쿼리 주로 사용.
setValidationQueryTimeout(int) 검사 쿼리의 최대 실행 시간을 초 단위로 지정. 이 시간을 초과하면 검사에 실패한 것으로 간주.
0 이하로 지정하면 비활성화한 것. 기본값 -1
setTestOnBorrow(boolean) 풀에서 커넥션을 가져올 때 검사 여부를 지정. 기본값은 false
setTestOnReturn(boolean) 풀에서 커넥션을 반환할 때 검사 여부를 지정. 기본값은 false
setTestWhileIdle(boolean) 커넥션이 풀에 유휴 상태로 있는 동안에 검사할지 여부를 지정. 기본값은 false
setMinEvictableIdleTimeMillis(int) 커넥션 풀에 유휴 상태로 유지할 최소 시간을 밀리초 단위로 지정. testWhileIdle이 true면 유휴 시간이 이 값을 초과한 커넥션을 풀에서 제거. 기본 값은 60000밀리초(60초)
setTimeBetweenEvictionRunsMillis(int) 커넥션 풀의 유휴 커넥션을 검사할 주기를 밀리초 단위로 지정. 기본값은 5000밀리초(5초).
해당 값은 1초 이하로 지정하면 안 됨