Application Continuity (AC)란 무엇인가?
Application Continuity(AC)는 계획된 유지보수, 하드웨어 오류, 소프트웨어 결함, 네트워크 중단 등 다양한 유형의 중단으로부터 Oracle 데이터베이스 애플리케이션을 보호하는 기능입니다. AC의 목표는 최종 사용자가 오류를 인식하지 못하도록 장애 발생 시 애플리케이션의 작업을 투명하게 복구하는 것입니다.
AC의 주요 이점
- 투명한 장애 복구: 애플리케이션은 중단 시 자동으로 복구되므로 최종 사용자는 중단 자체를 인식하지 못합니다.
- 향상된 안정성: AC는 데이터베이스 시스템의 전반적인 안정성을 높여 비즈니스 연속성을 보장합니다.
- 유지보수 비용 절감: 계획된 유지보수 시 AC를 사용하면 다운타임을 최소화하여 유지보수 비용을 절감할 수 있습니다.
- 향상된 사용자 경험: 중단으로부터 애플리케이션을 투명하게 보호함으로써 사용자 경험을 향상시킵니다.
Application Continuity 작동 방식
AC는 다음과 같은 주요 단계로 작동합니다.
- 중단 감지: AC는 데이터베이스 인스턴스, 네트워크, 또는 애플리케이션에서 발생하는 중단을 감지합니다.
- 요청 복제: AC는 중단이 발생하기 전에 완료되지 않은 데이터베이스 요청을 복제합니다.
- 활성 세션 재구성: AC는 중단이 발생한 데이터베이스 인스턴스에서 사용 불가능해진 활성 세션을 대체 데이터베이스 인스턴스에서 재구성합니다.
- 요청 재실행: AC는 복제된 데이터베이스 요청을 재구성된 세션에서 다시 실행합니다.
- 결과 반환: AC는 재실행된 요청의 결과를 애플리케이션에 반환합니다.
Application Continuity 구성 및 사용 방법
AC를 구성하고 사용하는 방법은 다음과 같습니다.
1단계: 데이터 소스 구성
먼저, 애플리케이션이 사용할 데이터 소스를 구성해야 합니다. 데이터 소스는 연결 풀을 사용하도록 구성해야 하며, 속성 “oracle.jdbc.autoCommit”을 false로 설정해야 합니다. 이는 AC가 보류 중인 트랜잭션을 복구하는 데 필요합니다.
OracleDataSource ods = new OracleDataSource();
ods.setURL("jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=myservice)))");
ods.setUser("myuser");
ods.setPassword("mypassword");
ods.setConnectionCachingEnabled(true);
ods.setConnectionCacheProperties(new Properties());
ods.getConnectionCacheProperties().setProperty("MinLimit", "1");
ods.getConnectionCacheProperties().setProperty("MaxLimit", "5");
ods.getConnectionCacheProperties().setProperty("oracle.jdbc.autoCommit", "false");
2단계: 서비스 구성
Transparent Application Failover(TAF) 속성이 구성된 데이터베이스 서비스를 생성해야 합니다. 이를 통해 장애 발생 시 애플리케이션이 다른 인스턴스로 자동으로 연결을 전환할 수 있습니다.
EXECUTE DBMS_SERVICE.CREATE_SERVICE(
service_name => 'myservice',
network_name => 'myservice',
aq_service => FALSE,
failover_method => 'BASIC',
failover_type => 'SELECT',
failover_retries => 180,
failover_delay => 1
);
3단계: 서비스에 인스턴스 연결
데이터베이스 서비스를 하나 이상의 인스턴스에 연결합니다. 각 인스턴스는 서비스에 대한 장애 복구 대상 역할을 수행합니다.
EXECUTE DBMS_SERVICE.ADD_INSTANCE('myservice', 'instance1');
EXECUTE DBMS_SERVICE.ADD_INSTANCE('myservice', 'instance2');
4단계: 세션에서 Application Continuity 활성화
데이터베이스 세션에서 Application Continuity를 활성화합니다. 이를 통해 데이터베이스가 투명한 장애 복구를 처리할 수 있습니다.
ALTER SESSION SET APPLICATION CONTINUITY = TRUE;
5단계: 애플리케이션 개발
애플리케이션 로직을 개발하여 예외 처리를 구현하고 멱등성을 보장해야 합니다. 멱등성이란 작업을 여러 번 수행하더라도 결과가 한 번 수행한 것과 동일해야 함을 의미합니다. AC는 이러한 멱등성 로직을 사용하여 장애 발생 시 작업을 안전하게 재실행합니다.
try {
// 데이터베이스 작업 수행
preparedStatement.executeUpdate();
connection.commit();
} catch (SQLException e) {
// 잠재적 장애 처리 및 작업 재시도
if (e.getErrorCode() == 1089) { // 중단 감지
// 작업 재시도 로직 구현
// 예를 들어 preparedStatement.executeUpdate() 다시 호출
} else {
// 다른 예외 처리
}
}
6단계: 런타임 시 Application Continuity 제어
애플리케이션에서 `OCISessionPool.setApplicationContinuity`를 사용하여 풀에 반환하기 전에 런타임 시 AC를 활성화하거나 비활성화할 수 있습니다.
7단계: 재실행 대상 지정
모든 트랜잭션을 재실행하는 것이 아니라 `OCISessionPool.setReplayOption`을 통해 재실행 대상을 변경할 수 있습니다.
- OCI_ATTR_REPLAY_READONLY: 읽기 전용 작업만 재실행 (기본값)
- OCI_ATTR_REPLAY_ALL: 모든 작업 재실행
Application Continuity 성공 사례
AC는 다음과 같은 다양한 시나리오에서 성공적으로 사용될 수 있습니다.
- 온라인 뱅킹: 은행은 AC를 사용하여 계좌 이체, 지불 등 금융 트랜잭션을 중단으로부터 보호할 수 있습니다.
- 전자 상거래: 전자 상거래 웹사이트는 AC를 사용하여 주문 처리, 재고 관리 등 중요 작업을 보호할 수 있습니다.
- 제조: 제조 회사는 AC를 사용하여 생산 라인 제어, 품질 보증 등 중요 작업을 보호할 수 있습니다.
결론
Application Continuity는 Oracle 데이터베이스 애플리케이션의 안정성과 사용자 경험을 크게 향상시킬 수 있는 강력한 기능입니다. 데이터 소스를 적절하게 구성하고 애플리케이션 로직을 개발하여 중단 발생 시 작업을 안전하게 재실행함으로써 최종 사용자는 중단을 인식하지 못하고 애플리케이션을 계속 사용할 수 있습니다. 이 가이드에서 제공하는 정보를 통해 AC를 효과적으로 구성하고 활용하여 비즈니스 연속성을 보장할 수 있습니다.