
server:
tomcat:
accept-count: 10
threads:
max: 300
connection-timeout: 10000
spring:
datasource:
hikari:
poolName: Hikari
max-lifetime: 1800000
auto-commit: false
maximum-pool-size: 5
data-source-properties:
cachePrepStmts: true
prepStmtCacheSize: 250
prepStmtCacheSqlLimit: 2048
validation-query: select 1
test-on-borrow: true
- server.tomcat.accept-count: 10
Tomcat 서버의 요청 큐에 대기할 수 있는 최대 요청 수를 설정합니다.
클라이언트 요청이 모두 처리되고 있는 상황에서 추가적인 요청이 들어올 경우,
요청이 큐에 쌓이게 됩니다.
이때, 큐의 최대 크기를 10으로 제한하는 설정입니다.
큐가 가득 찼을 때 추가 요청이 들어오면, 서버는 더 이상 해당 요청을 수락하지 않고
클라이언트에 "503 Service Unavailable" 응답을 반환합니다.
- server.tomcat.threads.max: 300
Tomcat 서버에서 사용할 수 있는 최대 스레드 수를 설정합니다.
이 설정은 서버가 동시에 처리할 수 있는 최대 요청 수를 의미하며,
기본적으로 200으로 설정되어 있습니다.
여기서는 300으로 설정되어 있어, 동시에 300개의 요청을 처리할 수 있습니다.
- server.tomcat.connection-timeout: 10000
클라이언트와의 연결 대기 시간을 설정합니다. 밀리초 단위로 설정되며,
여기서는 10초(10,000 밀리초)로 설정되었습니다.
이 시간 내에 클라이언트로부터 요청이 오지 않으면 연결을 끊습니다.
- spring.datasource.hikari.poolName: Hikari
HikariCP라는 JDBC 커넥션 풀을 사용할 때의 풀 이름을 설정합니다.
이 이름은 로그에서 해당 커넥션 풀을 식별하는 데 사용될 수 있습니다.
- spring.datasource.hikari.max-lifetime: 1800000
커넥션이 풀에서 제거되기 전까지의 최대 수명을 설정합니다.
이 값은 밀리초 단위로 설정되며, 여기서는 30분(1,800,000 밀리초)으로 설정되었습니다.
이 시간이 지나면 커넥션이 풀에서 제거되고 새로운 커넥션이 생성됩니다.
- spring.datasource.hikari.auto-commit: false
HikariCP 커넥션 풀에서 제공하는 커넥션에 대해 자동 커밋 기능을 사용하지 않도록 설정합니다.
이 설정을 false로 설정하면 트랜잭션을 수동으로 관리해야 합니다.
트랜잭션이 끝난 후 commit()이나 rollback() 메서드를 명시적으로 호출해야 합니다.
- spring.datasource.hikari.maximum-pool-size: 5
커넥션 풀에서 동시에 사용할 수 있는 최대 커넥션 수를 설정합니다.
여기서는 5로 설정되어 있어, 동시에 5개의 커넥션만 사용할 수 있습니다.
이를 초과하는 요청은 커넥션이 반환될 때까지 대기하게 됩니다.
- spring.datasource.hikari.data-source-properties
데이터베이스 연결과 관련된 추가 설정을 지정합니다.
이 설정은 HikariCP가 내부적으로 사용하는 데이터 소스에 전달됩니다.
- cachePrepStmts: true: PreparedStatement 캐시를 활성화하여 성능을 향상시킵니다
.
- prepStmtCacheSize: 250: PreparedStatement 캐시의 최대 크기를 250으로 설정합니다.
- prepStmtCacheSqlLimit: 2048: 캐시할 수 있는 SQL 문의 최대 크기를 2048바이트로 설정합니다.
- spring.datasource.validation-query: select 1
데이터베이스 커넥션의 유효성을 검사하기 위해 실행할 SQL 쿼리를 지정합니다.
select 1은 매우 간단한 쿼리로, 커넥션이 유효한지 확인하기 위해 사용됩니다.
- spring.datasource.test-on-borrow: true
커넥션을 풀에서 가져올 때마다 유효성을 검사하도록 설정합니다.
이 설정이 true일 경우, validation-query에서 설정된 쿼리가 실행되어 커넥션이
유효한지 확인합니다.
아래는 Spring Boot 애플리케이션에서 위 설정을 사용하여
간단한 REST API를 구현한 예제입니다
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
@RestController
public class DatabaseController {
@Autowired
private DataSource dataSource;
@GetMapping("/db-test")
public String testDatabaseConnection() {
String result = "Connection failed";
try (Connection connection = dataSource.getConnection()) {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT 1");
if (rs.next()) {
result = "Connection successful: " + rs.getInt(1);
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
이 예제에서는 /db-test 엔드포인트로 접근할 때,
데이터베이스 커넥션을 테스트하고 결과를 반환합니다.
spring.datasource 설정에 의해 커넥션 풀의 설정이 적용됩니다.
이번 포스팅을 통해 Spring Boot 애플리케이션에서 Tomcat과 HikariCP 설정을 최적화하여
성능을 향상시키는 방법을 이해할 수 있었습니다.
서버의 효율성을 높이는 것은 사용자 경험을 개선하고, 더 나은 시스템 안정성을 제공하는 데
중요합니다.
특히, 적절한 커넥션 풀 설정은 자원을 효율적으로 관리하고,
서버 부하를 최소화하는 데 큰 도움이 됩니다. 이 과정을 통해 작은 설정 변경이 성능에
얼마나 큰 영향을 미칠 수 있는지 깨달았고,
앞으로도 최적화에 대한 지속적인 관심이 필요하다는 것을 느꼈습니다.