연결 클래스 (Connection Class) 설정

연결 클래스(Connection Class)란 무엇인가?

Oracle 환경에서 연결 클래스는 데이터베이스 연결을 그룹화하고 관리하는 데 사용되는 논리적 이름입니다. 특정 유형의 애플리케이션이나 사용자에 대해 연결을 분리하고, 리소스 관리 및 보안 정책을 보다 효과적으로 적용할 수 있도록 합니다. 예를 들어, HR 부서의 사용자와 재무 부서의 사용자를 서로 다른 연결 클래스로 분리하여 각 그룹에 맞는 리소스 할당 및 권한을 설정할 수 있습니다.

연결 클래스 설정 방법

Oracle에서 연결 클래스를 설정하는 방법은 다양하지만, 가장 일반적인 방법은 OCI(Oracle Call Interface) API를 사용하는 것입니다. 다음은 OCI를 사용하여 연결 클래스를 설정하는 예제 코드입니다.


  OCIEnv *envhp;
  OCISvcCtx *svchp;
  OCIError *errhp;
  OCIHandleAlloc(..., (void**)&envhp, ...);
  OCIHandleAlloc(..., (void**)&svchp, ...);
  OCIHandleAlloc(..., (void**)&errhp, ...);
  
  // 데이터베이스 연결
  OCIEnvCreate(&envhp, ...);
  OCISessionBegin(svchp, errhp, ..., OCI_CRED_EXT, ...);
  
  // 연결 클래스 설정
  OCIAttrSet((void*)svchp, OCI_HTYPE_SVCCTX, (void*)"HR", 2, OCI_ATTR_CONNECTION_CLASS, errhp);
  

위 코드에서 OCIAttrSet 함수는 서비스 컨텍스트 핸들(svchp)에 연결 클래스를 설정하는 데 사용됩니다. OCI_ATTR_CONNECTION_CLASS 속성에 원하는 연결 클래스 이름(“HR”)과 이름을 지정합니다. 연결 클래스 이름의 길이를 지정합니다.

연결 클래스 설정 예시: HR 및 재무 부서 분리

다음은 HR 부서와 재무 부서를 연결 클래스를 사용하여 분리하는 예시입니다.

HR 연결 클래스 설정


  // HR 부서 연결 설정
  OCIAttrSet((void*)svchp_hr, OCI_HTYPE_SVCCTX, (void*)"HR", 2, OCI_ATTR_CONNECTION_CLASS, errhp);
  

재무 부서 연결 클래스 설정


  // 재무 부서 연결 설정
  OCIAttrSet((void*)svchp_finance, OCI_HTYPE_SVCCTX, (void*)"FINANCE", 7, OCI_ATTR_CONNECTION_CLASS, errhp);
  

이제 HR 부서 사용자는 “HR” 연결 클래스를 사용하고, 재무 부서 사용자는 “FINANCE” 연결 클래스를 사용하도록 애플리케이션을 구성할 수 있습니다.

연결 클래스 활용

연결 클래스는 다음과 같은 다양한 방법으로 활용될 수 있습니다.

  • 리소스 관리: 연결 클래스를 사용하여 각 애플리케이션이나 사용자 그룹에 적절한 시스템 리소스를 할당할 수 있습니다. Oracle Resource Manager를 사용하여 CPU, 메모리, I/O 등의 리소스를 연결 클래스별로 제한할 수 있습니다.
  • 보안 정책 적용: 연결 클래스에 따라 데이터베이스 접근 권한을 제어할 수 있습니다. 특정 연결 클래스의 사용자에게 특정 테이블이나 데이터에 대한 접근을 제한하는 VPD(Virtual Private Database) 정책을 적용할 수 있습니다.
  • 감사(Auditing): 연결 클래스별로 감사 정책을 설정하여 특정 애플리케이션의 활동을 추적할 수 있습니다. 이는 보안 감사를 강화하고 문제 해결에 도움을 줄 수 있습니다.
  • 성능 모니터링: 연결 클래스별로 성능 지표를 수집하여 특정 애플리케이션의 성능 병목 지점을 파악할 수 있습니다. 이는 SQL 튜닝 및 최적화에 유용합니다.

고급 팁: 세션 순수성 (Session Purity)

여러 개의 연결을 재사용할 때 연결 풀에서 세션 속성을 유지하는 것이 중요합니다. NLS 설정과 같은 세션 속성이 다르면 커서 공유에 문제가 발생할 수 있습니다. 세션 순수성을 통해 서버에서 세션을 정리하여, 세션이 연결 풀에 반환될 때 초기 상태로 재설정되도록 할 수 있습니다. 예를 들면 다음과 같습니다.


  OCIAttribSet((void*)svchp, OCI_HTYPE_SVCCTX, (void*)&purity, sizeof(purity), OCI_ATTR_PURITY, errhp);
  

결론

Oracle 연결 클래스는 데이터베이스 연결을 효율적으로 관리하고, 리소스 관리 및 보안 정책을 세분화하는 데 유용한 기능입니다. 연결 클래스를 적절히 활용하면 애플리케이션 성능을 향상시키고, 보안을 강화하며, 문제 해결을 용이하게 할 수 있습니다.

위로 스크롤