[sql] 연결 끊김 상황에서의 무정지 서비스 처리 방법

데이터베이스의 연결이 끊기는 상황에서도 무정지 서비스를 유지하기 위해서는 몇 가지 방법을 고려할 수 있습니다. 이 포스트에서는 해당 상황에 대한 처리 방법을 살펴보겠습니다.

1. 연결 풀링 사용하기

연결 풀링은 데이터베이스 연결을 미리 생성하여 풀에 보관하고, 연결이 필요할 때마다 풀에서 가져다 사용하는 기법입니다. 이를 통해 데이터베이스와의 연결을 끊었을 때, 이미 생성된 연결을 재활용하여 서비스에 영향을 최소화할 수 있습니다.

-- 연결 풀링 구성예시
dataSource.setInitialSize(10);
dataSource.setMaxTotal(100);
dataSource.setMaxIdle(50);
dataSource.setMinIdle(10);

2. Retry 로직 구현

데이터베이스 연결이 끊어졌을 때, 일시적인 장애로 간주하고 재시도 로직을 구현할 수 있습니다. 일정 시간 간격으로 연결을 재시도하여 데이터베이스와의 연결을 회복시키는 방법입니다.

-- 연결 재시도 로직 예시
int maxRetryCount = 3;
int retryInterval = 5000; // 5
int retryCount = 0;
boolean isConnected = false;

while (!isConnected && retryCount < maxRetryCount) {
    try {
        // 연결 재시도
        // ...
        isConnected = true; // 연결 성공  플래그 업데이트
    } catch (SQLException e) {
        // 연결 실패  로깅
        // ...
    } finally {
        retryCount++;
        if (!isConnected) {
            // 재시도 간격만큼 대기
            Thread.sleep(retryInterval);
        }
    }
}

3. Circuit Breaker 패턴 적용

Circuit Breaker 패턴은 일시적 장애가 지속되는 경우, 해당 서비스나 시스템을 격리시키는 방법입니다. 이를 통해 장애 전파를 막고 시스템에 안정성을 유지할 수 있습니다.

-- Circuit Breaker 패턴 예시
CircuitBreaker circuitBreaker = new CircuitBreaker();
circuitBreaker.setThreshold(3);
circuitBreaker.setDelay(1000); // 1 지연 시간 설정

try {
    // 연결 시도
    // ...
    circuitBreaker.success(); // 성공  호출
} catch (SQLException e) {
    circuitBreaker.fail(); // 실패  호출
}

if (circuitBreaker.isTripped()) {
    // Circuit Breaker 동작
    // ...
}

위의 방법들을 조합하여 데이터베이스 연결 끊김 상황에서도 무정지 서비스를 제공할 수 있습니다.

이상으로 SQL 연결 끊김 상황에서의 무정지 서비스 처리 방법에 대해 알아보았습니다.

참고 문헌