Class AltibaseDatabaseImpl

java.lang.Object
com.altibase.document.impl.AltibaseDatabaseImpl
All Implemented Interfaces:
AltibaseDatabase, AutoCloseable

public class AltibaseDatabaseImpl extends Object implements AltibaseDatabase
AltibaseDatabase 인터페이스의 기본 JDBC 기반 구현체이다.

이 클래스는 실제 JDBC 연결을 관리하고, 컬렉션 생성/삭제를 위한 DDL(CREATE/DROP TABLE)을 실행하며, 트랜잭션 경계(commit/rollback)를 제어하는 모든 핵심 로직을 담당한다. 또한, 데이터베이스 스키마를 읽어 CollectionMetaData를 구성하고, 이를 바탕으로 AltibaseCollectionImpl 인스턴스를 생성하는 팩토리 역할을 수행한다.

사용자는 이 클래스를 직접 생성하지 않고, AltibaseClient을 통해 인스턴스를 얻어야 한다.

See Also:
  • Field Details

    • DEFAULT_KEYCOLUMN_NAME

      public static final String DEFAULT_KEYCOLUMN_NAME
      기본 키 컬럼 이름
      See Also:
    • DEFAULT_KEYCOLUMN_TYPE

      public static final String DEFAULT_KEYCOLUMN_TYPE
      기본 키 컬럼 타입
      See Also:
    • DEFAULT_KEY_FIELD_SIZE

      public static final int DEFAULT_KEY_FIELD_SIZE
      기본 키 컬럼 크기
      See Also:
  • Constructor Details

    • AltibaseDatabaseImpl

      public AltibaseDatabaseImpl(String aUrl)
      JDBC URL을 사용하여 데이터베이스 연결을 설정하고 AltibaseDatabaseImpl 인스턴스를 생성한다.

      이 생성자는 내부적으로 JDBC 연결을 생성하고 소유권을 가진다. DB 계정명을 userId로 사용하므로 Java API 환경에 적합하다.

      Parameters:
      aUrl - 접속할 데이터베이스의 JDBC URL
    • AltibaseDatabaseImpl

      public AltibaseDatabaseImpl(String aUrl, Properties aProps)
      JDBC URL과 속성을 사용하여 데이터베이스 연결을 설정하고 AltibaseDatabaseImpl 인스턴스를 생성한다.

      이 생성자는 내부적으로 JDBC 연결을 생성하고 소유권을 가진다. DB 계정명을 userId로 사용하므로 Java API 환경에 적합하다.

      Parameters:
      aUrl - 접속할 데이터베이스의 JDBC URL
      aProps - 접속 속성 (user, password 등)
    • AltibaseDatabaseImpl

      public AltibaseDatabaseImpl(String aUrl, Properties aProps, String aUserId)
      JDBC URL과 속성, 그리고 사용자 ID를 사용하여 데이터베이스 연결을 설정한다.

      REST API 전용 생성자. JWT의 client_id를 userId로 전달하여 멀티테넌트 환경을 지원한다. 이 생성자를 사용하면 물리적 테이블명에 userId 프리픽스가 자동으로 추가된다.

      예: userId="mobile_app_001", collectionName="orders" → 물리적 테이블명: "mobile_app_001_orders"

      주의: 이 생성자는 AltibaseClient의 public API로 노출되지 않는다. REST API 내부(DatabaseService 등)에서만 사용된다.

      Parameters:
      aUrl - 접속할 데이터베이스의 JDBC URL
      aProps - 접속 속성 (user, password 등)
      aUserId - REST API의 JWT client_id (DB 계정명과 다른 값)
    • AltibaseDatabaseImpl

      public AltibaseDatabaseImpl(Connection aConn)
      외부에서 생성된 기존 JDBC Connection 객체를 사용하여 AltibaseDatabaseImpl 인스턴스를 생성한다.

      주의: Connection의 생명주기는 Spring TX가 없을 때만 이 인스턴스가 관리한다. Spring @Transactional이 active 상태면 TransactionManager가 Connection을 관리하며, close() 메서드는 Connection을 닫지 않는다.

      Parameters:
      aConn - 재사용할 JDBC Connection 객체
    • AltibaseDatabaseImpl

      public AltibaseDatabaseImpl(Connection aConn, String aUserId)
      외부 Connection과 userId를 사용하는 생성자.

      aUserId가 null이면 DB 계정명을 userId로 사용한다 (Java API).
      aUserId가 지정되면 해당 값을 userId로 사용한다 (REST API, 멀티테넌트 환경).

      주의: Connection의 생명주기는 Spring TX가 없을 때만 이 인스턴스가 관리한다. Spring @Transactional이 active 상태면 TransactionManager가 Connection을 관리하며, close() 메서드는 Connection을 닫지 않는다.

      Parameters:
      aConn - 재사용할 JDBC Connection 객체
      aUserId - REST API의 JWT client_id (테이블 프리픽스로 사용), null이면 DB 계정명 사용
  • Method Details

    • getConnection

      public Connection getConnection()
      내부적으로 관리하는 JDBC Connection 객체를 반환한다. 이 메서드는 주로 AltibaseCollectionImpl에서 사용된다.
      Specified by:
      getConnection in interface AltibaseDatabase
      Returns:
      현재 사용 중인 JDBC Connection 객체
    • createCollection

      public AltibaseCollection createCollection(String aCollectionName)
      기본 옵션으로 새로운 컬렉션을 생성한다.
      Specified by:
      createCollection in interface AltibaseDatabase
      Parameters:
      aCollectionName - 생성할 컬렉션의 이름
      Returns:
      생성된 AltibaseCollection 객체
    • createCollection

      public AltibaseCollection createCollection(String aCollectionName, AltibaseDocument aOptionDefJson)
      JSON 형식으로 정의된 옵션을 사용하여 새로운 컬렉션을 생성한다.

      옵션은 AltibaseDocument.parse()를 통해 JSON 문자열로부터 생성할 수 있다.

      Specified by:
      createCollection in interface AltibaseDatabase
      Parameters:
      aCollectionName - 생성할 컬렉션의 이름
      aOptionDefJson - 컬렉션 생성 옵션을 정의한 AltibaseDocument 객체
      Returns:
      생성된 AltibaseCollection 객체
    • createCollection

      public AltibaseCollection createCollection(String aCollectionName, CollectionOptionsBuilder aOptionsBuilder)
      CollectionOptionsBuilder를 사용하여 구성된 옵션으로 새로운 컬렉션을 생성한다.

      이 방식은 타입-안전(type-safe)하고 가독성 높은 코드로 옵션을 설정할 때 유용하다.

      Specified by:
      createCollection in interface AltibaseDatabase
      Parameters:
      aCollectionName - 생성할 컬렉션의 이름
      aOptionsBuilder - 컬렉션 생성 옵션을 구성하는 CollectionOptionsBuilder 인스턴스
      Returns:
      생성된 AltibaseCollection 객체
    • getCollection

      public AltibaseCollection getCollection(String aCollectionName)
      지정한 이름의 기존 컬렉션을 가져온다.
      Specified by:
      getCollection in interface AltibaseDatabase
      Parameters:
      aCollectionName - 가져올 컬렉션의 이름
      Returns:
      조회된 AltibaseCollection 객체. 컬렉션이 존재하지 않을 경우 null을 반환한다.
    • getCollectionCrossUser

      public AltibaseCollection getCollectionCrossUser(String aOwnerUserId, String aCollectionName)
      다른 사용자의 컬렉션을 가져온다 (크로스 유저 접근).

      하이브리드 ACL 시스템에서 권한이 부여된 경우, 다른 사용자의 컬렉션에 접근할 수 있다. 이 메서드는 REST API에서 ACL 체크 후 호출된다.

      Specified by:
      getCollectionCrossUser in interface AltibaseDatabase
      Parameters:
      aOwnerUserId - 컬렉션 소유자의 userId
      aCollectionName - 가져올 컬렉션의 이름
      Returns:
      조회된 AltibaseCollection 객체. 컬렉션이 존재하지 않을 경우 null을 반환한다.
    • listCollections

      public List<AltibaseCollection> listCollections()
      현재 데이터베이스에 존재하는 모든 컬렉션에 대한 AltibaseCollection 객체 목록을 반환한다.
      Specified by:
      listCollections in interface AltibaseDatabase
      Returns:
      AltibaseCollection 객체의 List
    • close

      public void close()
      데이터베이스 연결과 관련된 모든 리소스를 해제한다. try-with-resources 구문에 의해 자동으로 호출된다.

      이 메서드는 관리 중인 모든 컬렉션의 리소스를 먼저 닫고, 내부적으로 생성한 JDBC 연결(외부에서 주입받지 않은 경우)을 닫는다.

      Specified by:
      close in interface AltibaseDatabase
      Specified by:
      close in interface AutoCloseable
    • isTransactionActive

      public boolean isTransactionActive()
      수동으로 시작된 트랜잭션이 현재 활성 상태인지 여부를 확인한다.
      Specified by:
      isTransactionActive in interface AltibaseDatabase
      Returns:
      트랜잭션이 활성 상태이면 true, 그렇지 않으면 false
    • dropCollection

      public void dropCollection(String aName)
      데이터베이스에서 지정한 이름의 컬렉션을 영구적으로 삭제한다.
      Specified by:
      dropCollection in interface AltibaseDatabase
      Parameters:
      aName - 삭제할 컬렉션의 이름
    • unregisterCollection

      public void unregisterCollection(AltibaseCollection aCol)
      주로 내부 관리용으로 사용되며, AltibaseCollection.close()가 호출될 때 해당 컬렉션을 데이터베이스 객체의 관리 목록에서 제거한다.

      주의: 이 메서드는 AltibaseCollectionImpl.close()에서만 호출되며, 호출한 쪽에서 이미 AltibaseCollection.closeResources()를 호출한 후 이 메서드를 호출하므로, 여기서는 단순히 내부 캐시에서만 제거한다. 따라서 리소스 누수 경고를 무시해도 안전하다.

      Specified by:
      unregisterCollection in interface AltibaseDatabase
      Parameters:
      aCol - 등록 해제할 AltibaseCollection 객체
    • startTransaction

      public void startTransaction()
      수동 트랜잭션 제어를 시작한다. 이 메서드 호출 후 수행되는 모든 작업은 endTransaction() 또는 abortTransaction()이 호출될 때까지 하나의 트랜잭션으로 묶인다.
      Specified by:
      startTransaction in interface AltibaseDatabase
    • abortTransaction

      public void abortTransaction()
      현재 진행 중인 트랜잭션의 모든 변경사항을 취소하고 트랜잭션을 종료한다 (롤백).
      Specified by:
      abortTransaction in interface AltibaseDatabase
    • endTransaction

      public void endTransaction()
      현재 진행 중인 트랜잭션의 모든 변경사항을 영구적으로 저장하고 트랜잭션을 종료한다 (커밋).
      Specified by:
      endTransaction in interface AltibaseDatabase
    • getCharacterSetName

      public String getCharacterSetName()
      Description copied from interface: AltibaseDatabase
      데이터베이스 연결의 문자셋 이름을 반환한다. 주로 내부적으로 문서 크기 계산 시 사용된다.
      Specified by:
      getCharacterSetName in interface AltibaseDatabase
      Returns:
      문자셋 이름
    • getQuoteStr

      public String getQuoteStr()
      Description copied from interface: AltibaseDatabase
      데이터베이스의 식별자 인용부호(Quote Character)를 반환한다. (예: "\"")
      Specified by:
      getQuoteStr in interface AltibaseDatabase
      Returns:
      인용부호 문자열
    • listCollectionNames

      public List<String> listCollectionNames()
      Description copied from interface: AltibaseDatabase
      현재 데이터베이스에 존재하는 모든 컬렉션의 이름 목록을 반환한다.
      Specified by:
      listCollectionNames in interface AltibaseDatabase
      Returns:
      컬렉션 이름의 List
    • listCollectionMetadata

      public List<CollectionMetaData> listCollectionMetadata()
      Description copied from interface: AltibaseDatabase
      현재 사용자의 모든 컬렉션 메타데이터를 반환한다.

      이 메서드는 현재 사용자(userId)의 컬렉션 메타데이터만 조회한다. REST API에서 컬렉션 목록과 함께 메타데이터 정보를 제공하기 위해 사용된다.

      Specified by:
      listCollectionMetadata in interface AltibaseDatabase
      Returns:
      컬렉션 메타데이터 List
    • listAllCollectionMetadataForAdmin

      public List<CollectionMetaData> listAllCollectionMetadataForAdmin()
      Description copied from interface: AltibaseDatabase
      모든 사용자의 컬렉션 메타데이터를 반환한다 (ADMIN 전용).

      이 메서드는 userId 필터링 없이 전체 컬렉션의 메타데이터를 조회한다. REST API의 ADMIN 권한 사용자가 모든 컬렉션을 관리하기 위해 사용된다.

      Specified by:
      listAllCollectionMetadataForAdmin in interface AltibaseDatabase
      Returns:
      모든 컬렉션의 메타데이터 List
    • listCollectionMetadataByUserId

      public List<CollectionMetaData> listCollectionMetadataByUserId(String aUserId)
      Description copied from interface: AltibaseDatabase
      지정한 사용자의 모든 컬렉션 메타데이터를 반환한다 (ADMIN 전용).

      이 메서드는 Admin이 특정 사용자의 컬렉션 목록을 조회할 때 사용된다. 저장 프로시저를 통해 DB에서 직접 userId로 필터링하므로 성능이 우수하다.

      Specified by:
      listCollectionMetadataByUserId in interface AltibaseDatabase
      Parameters:
      aUserId - 조회할 대상 사용자 ID
      Returns:
      컬렉션 메타데이터 List