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초 이하로 지정하면 안 됨 |
'스프링' 카테고리의 다른 글
Spring Boot JPA 에서 enum type 사용하기 (0) | 2024.08.26 |
---|---|
[스프링] @RequiredArgsConstructor 생성자 주입 애노테이션 (0) | 2023.11.15 |
스프링5 프로그래밍 입문 - AOP 프로그래밍 (0) | 2023.10.28 |
스프링5 프로그래밍 입문 - 빈 라이프사이클과 범위 (0) | 2023.10.02 |
스프링5 프로그래밍 입문 - 컴포넌트 스캔 (0) | 2023.10.02 |