Class AltibaseDatabaseImpl
- All Implemented Interfaces:
AltibaseDatabase,AutoCloseable
AltibaseDatabase 인터페이스의 기본 JDBC 기반 구현체이다.
이 클래스는 실제 JDBC 연결을 관리하고, 컬렉션 생성/삭제를 위한 DDL(CREATE/DROP TABLE)을 실행하며,
트랜잭션 경계(commit/rollback)를 제어하는 모든 핵심 로직을 담당한다.
또한, 데이터베이스 스키마를 읽어 CollectionMetaData를 구성하고, 이를 바탕으로
AltibaseCollectionImpl 인스턴스를 생성하는 팩토리 역할을 수행한다.
사용자는 이 클래스를 직접 생성하지 않고, AltibaseClient을 통해
인스턴스를 얻어야 한다.
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final int기본 키 컬럼 크기static final String기본 키 컬럼 이름static final String기본 키 컬럼 타입Fields inherited from interface com.altibase.document.api.AltibaseDatabase
JSON_TYPE -
Constructor Summary
ConstructorsConstructorDescriptionAltibaseDatabaseImpl(String aUrl) JDBC URL을 사용하여 데이터베이스 연결을 설정하고AltibaseDatabaseImpl인스턴스를 생성한다.AltibaseDatabaseImpl(String aUrl, Properties aProps) JDBC URL과 속성을 사용하여 데이터베이스 연결을 설정하고AltibaseDatabaseImpl인스턴스를 생성한다.AltibaseDatabaseImpl(String aUrl, Properties aProps, String aUserId) JDBC URL과 속성, 그리고 사용자 ID를 사용하여 데이터베이스 연결을 설정한다.AltibaseDatabaseImpl(Connection aConn) 외부에서 생성된 기존 JDBCConnection객체를 사용하여AltibaseDatabaseImpl인스턴스를 생성한다.AltibaseDatabaseImpl(Connection aConn, String aUserId) 외부 Connection과 userId를 사용하는 생성자. -
Method Summary
Modifier and TypeMethodDescriptionvoid현재 진행 중인 트랜잭션의 모든 변경사항을 취소하고 트랜잭션을 종료한다 (롤백).voidclose()데이터베이스 연결과 관련된 모든 리소스를 해제한다.createCollection(String aCollectionName) 기본 옵션으로 새로운 컬렉션을 생성한다.createCollection(String aCollectionName, AltibaseDocument aOptionDefJson) JSON 형식으로 정의된 옵션을 사용하여 새로운 컬렉션을 생성한다.createCollection(String aCollectionName, CollectionOptionsBuilder aOptionsBuilder) CollectionOptionsBuilder를 사용하여 구성된 옵션으로 새로운 컬렉션을 생성한다.voiddropCollection(String aName) 데이터베이스에서 지정한 이름의 컬렉션을 영구적으로 삭제한다.void현재 진행 중인 트랜잭션의 모든 변경사항을 영구적으로 저장하고 트랜잭션을 종료한다 (커밋).데이터베이스 연결의 문자셋 이름을 반환한다.getCollection(String aCollectionName) 지정한 이름의 기존 컬렉션을 가져온다.getCollectionCrossUser(String aOwnerUserId, String aCollectionName) 다른 사용자의 컬렉션을 가져온다 (크로스 유저 접근).내부적으로 관리하는 JDBCConnection객체를 반환한다.데이터베이스의 식별자 인용부호(Quote Character)를 반환한다.boolean수동으로 시작된 트랜잭션이 현재 활성 상태인지 여부를 확인한다.모든 사용자의 컬렉션 메타데이터를 반환한다 (ADMIN 전용).현재 사용자의 모든 컬렉션 메타데이터를 반환한다.listCollectionMetadataByUserId(String aUserId) 지정한 사용자의 모든 컬렉션 메타데이터를 반환한다 (ADMIN 전용).현재 데이터베이스에 존재하는 모든 컬렉션의 이름 목록을 반환한다.현재 데이터베이스에 존재하는 모든 컬렉션에 대한AltibaseCollection객체 목록을 반환한다.void수동 트랜잭션 제어를 시작한다.void주로 내부 관리용으로 사용되며,AltibaseCollection.close()가 호출될 때 해당 컬렉션을 데이터베이스 객체의 관리 목록에서 제거한다.
-
Field Details
-
DEFAULT_KEYCOLUMN_NAME
기본 키 컬럼 이름- See Also:
-
DEFAULT_KEYCOLUMN_TYPE
기본 키 컬럼 타입- See Also:
-
DEFAULT_KEY_FIELD_SIZE
public static final int DEFAULT_KEY_FIELD_SIZE기본 키 컬럼 크기- See Also:
-
-
Constructor Details
-
AltibaseDatabaseImpl
JDBC URL을 사용하여 데이터베이스 연결을 설정하고AltibaseDatabaseImpl인스턴스를 생성한다.이 생성자는 내부적으로 JDBC 연결을 생성하고 소유권을 가진다. DB 계정명을 userId로 사용하므로 Java API 환경에 적합하다.
- Parameters:
aUrl- 접속할 데이터베이스의 JDBC URL
-
AltibaseDatabaseImpl
JDBC URL과 속성을 사용하여 데이터베이스 연결을 설정하고AltibaseDatabaseImpl인스턴스를 생성한다.이 생성자는 내부적으로 JDBC 연결을 생성하고 소유권을 가진다. DB 계정명을 userId로 사용하므로 Java API 환경에 적합하다.
- Parameters:
aUrl- 접속할 데이터베이스의 JDBC URLaProps- 접속 속성 (user, password 등)
-
AltibaseDatabaseImpl
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 URLaProps- 접속 속성 (user, password 등)aUserId- REST API의 JWT client_id (DB 계정명과 다른 값)
-
AltibaseDatabaseImpl
외부에서 생성된 기존 JDBCConnection객체를 사용하여AltibaseDatabaseImpl인스턴스를 생성한다.주의: Connection의 생명주기는 Spring TX가 없을 때만 이 인스턴스가 관리한다. Spring
@Transactional이 active 상태면 TransactionManager가 Connection을 관리하며,close()메서드는 Connection을 닫지 않는다.- Parameters:
aConn- 재사용할 JDBC Connection 객체
-
AltibaseDatabaseImpl
외부 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
내부적으로 관리하는 JDBCConnection객체를 반환한다. 이 메서드는 주로AltibaseCollectionImpl에서 사용된다.- Specified by:
getConnectionin interfaceAltibaseDatabase- Returns:
- 현재 사용 중인 JDBC Connection 객체
-
createCollection
기본 옵션으로 새로운 컬렉션을 생성한다.- Specified by:
createCollectionin interfaceAltibaseDatabase- Parameters:
aCollectionName- 생성할 컬렉션의 이름- Returns:
- 생성된
AltibaseCollection객체
-
createCollection
JSON 형식으로 정의된 옵션을 사용하여 새로운 컬렉션을 생성한다.옵션은
AltibaseDocument.parse()를 통해 JSON 문자열로부터 생성할 수 있다.- Specified by:
createCollectionin interfaceAltibaseDatabase- Parameters:
aCollectionName- 생성할 컬렉션의 이름aOptionDefJson- 컬렉션 생성 옵션을 정의한AltibaseDocument객체- Returns:
- 생성된
AltibaseCollection객체
-
createCollection
public AltibaseCollection createCollection(String aCollectionName, CollectionOptionsBuilder aOptionsBuilder) CollectionOptionsBuilder를 사용하여 구성된 옵션으로 새로운 컬렉션을 생성한다.이 방식은 타입-안전(type-safe)하고 가독성 높은 코드로 옵션을 설정할 때 유용하다.
- Specified by:
createCollectionin interfaceAltibaseDatabase- Parameters:
aCollectionName- 생성할 컬렉션의 이름aOptionsBuilder- 컬렉션 생성 옵션을 구성하는CollectionOptionsBuilder인스턴스- Returns:
- 생성된
AltibaseCollection객체
-
getCollection
지정한 이름의 기존 컬렉션을 가져온다.- Specified by:
getCollectionin interfaceAltibaseDatabase- Parameters:
aCollectionName- 가져올 컬렉션의 이름- Returns:
- 조회된
AltibaseCollection객체. 컬렉션이 존재하지 않을 경우null을 반환한다.
-
getCollectionCrossUser
다른 사용자의 컬렉션을 가져온다 (크로스 유저 접근).하이브리드 ACL 시스템에서 권한이 부여된 경우, 다른 사용자의 컬렉션에 접근할 수 있다. 이 메서드는 REST API에서 ACL 체크 후 호출된다.
- Specified by:
getCollectionCrossUserin interfaceAltibaseDatabase- Parameters:
aOwnerUserId- 컬렉션 소유자의 userIdaCollectionName- 가져올 컬렉션의 이름- Returns:
- 조회된
AltibaseCollection객체. 컬렉션이 존재하지 않을 경우null을 반환한다.
-
listCollections
현재 데이터베이스에 존재하는 모든 컬렉션에 대한AltibaseCollection객체 목록을 반환한다.- Specified by:
listCollectionsin interfaceAltibaseDatabase- Returns:
AltibaseCollection객체의List
-
close
public void close()데이터베이스 연결과 관련된 모든 리소스를 해제한다.try-with-resources구문에 의해 자동으로 호출된다.이 메서드는 관리 중인 모든 컬렉션의 리소스를 먼저 닫고, 내부적으로 생성한 JDBC 연결(외부에서 주입받지 않은 경우)을 닫는다.
- Specified by:
closein interfaceAltibaseDatabase- Specified by:
closein interfaceAutoCloseable
-
isTransactionActive
public boolean isTransactionActive()수동으로 시작된 트랜잭션이 현재 활성 상태인지 여부를 확인한다.- Specified by:
isTransactionActivein interfaceAltibaseDatabase- Returns:
- 트랜잭션이 활성 상태이면
true, 그렇지 않으면false
-
dropCollection
데이터베이스에서 지정한 이름의 컬렉션을 영구적으로 삭제한다.- Specified by:
dropCollectionin interfaceAltibaseDatabase- Parameters:
aName- 삭제할 컬렉션의 이름
-
unregisterCollection
주로 내부 관리용으로 사용되며,AltibaseCollection.close()가 호출될 때 해당 컬렉션을 데이터베이스 객체의 관리 목록에서 제거한다.주의: 이 메서드는
AltibaseCollectionImpl.close()에서만 호출되며, 호출한 쪽에서 이미AltibaseCollection.closeResources()를 호출한 후 이 메서드를 호출하므로, 여기서는 단순히 내부 캐시에서만 제거한다. 따라서 리소스 누수 경고를 무시해도 안전하다.- Specified by:
unregisterCollectionin interfaceAltibaseDatabase- Parameters:
aCol- 등록 해제할AltibaseCollection객체
-
startTransaction
public void startTransaction()수동 트랜잭션 제어를 시작한다. 이 메서드 호출 후 수행되는 모든 작업은endTransaction()또는abortTransaction()이 호출될 때까지 하나의 트랜잭션으로 묶인다.- Specified by:
startTransactionin interfaceAltibaseDatabase
-
abortTransaction
public void abortTransaction()현재 진행 중인 트랜잭션의 모든 변경사항을 취소하고 트랜잭션을 종료한다 (롤백).- Specified by:
abortTransactionin interfaceAltibaseDatabase
-
endTransaction
public void endTransaction()현재 진행 중인 트랜잭션의 모든 변경사항을 영구적으로 저장하고 트랜잭션을 종료한다 (커밋).- Specified by:
endTransactionin interfaceAltibaseDatabase
-
getCharacterSetName
Description copied from interface:AltibaseDatabase데이터베이스 연결의 문자셋 이름을 반환한다. 주로 내부적으로 문서 크기 계산 시 사용된다.- Specified by:
getCharacterSetNamein interfaceAltibaseDatabase- Returns:
- 문자셋 이름
-
getQuoteStr
Description copied from interface:AltibaseDatabase데이터베이스의 식별자 인용부호(Quote Character)를 반환한다. (예:"\"")- Specified by:
getQuoteStrin interfaceAltibaseDatabase- Returns:
- 인용부호 문자열
-
listCollectionNames
Description copied from interface:AltibaseDatabase현재 데이터베이스에 존재하는 모든 컬렉션의 이름 목록을 반환한다.- Specified by:
listCollectionNamesin interfaceAltibaseDatabase- Returns:
- 컬렉션 이름의
List
-
listCollectionMetadata
Description copied from interface:AltibaseDatabase현재 사용자의 모든 컬렉션 메타데이터를 반환한다.이 메서드는 현재 사용자(userId)의 컬렉션 메타데이터만 조회한다. REST API에서 컬렉션 목록과 함께 메타데이터 정보를 제공하기 위해 사용된다.
- Specified by:
listCollectionMetadatain interfaceAltibaseDatabase- Returns:
- 컬렉션 메타데이터
List
-
listAllCollectionMetadataForAdmin
Description copied from interface:AltibaseDatabase모든 사용자의 컬렉션 메타데이터를 반환한다 (ADMIN 전용).이 메서드는 userId 필터링 없이 전체 컬렉션의 메타데이터를 조회한다. REST API의 ADMIN 권한 사용자가 모든 컬렉션을 관리하기 위해 사용된다.
- Specified by:
listAllCollectionMetadataForAdminin interfaceAltibaseDatabase- Returns:
- 모든 컬렉션의 메타데이터
List
-
listCollectionMetadataByUserId
Description copied from interface:AltibaseDatabase지정한 사용자의 모든 컬렉션 메타데이터를 반환한다 (ADMIN 전용).이 메서드는 Admin이 특정 사용자의 컬렉션 목록을 조회할 때 사용된다. 저장 프로시저를 통해 DB에서 직접 userId로 필터링하므로 성능이 우수하다.
- Specified by:
listCollectionMetadataByUserIdin interfaceAltibaseDatabase- Parameters:
aUserId- 조회할 대상 사용자 ID- Returns:
- 컬렉션 메타데이터
List
-