도메인 어노테이션이란 무엇인가?
도메인 어노테이션은 Oracle Database 23ai에서 새롭게 도입된 기능으로, 데이터베이스 스키마 내에 데이터 사용 목적, 속성, 제약 조건과 같은 메타데이터를 중앙 집중식으로 관리할 수 있게 해줍니다. 이를 통해 애플리케이션 개발자는 코드에서 분산된 데이터 정의를 관리하는 대신, 데이터베이스 자체에서 일관된 데이터 정의를 활용할 수 있습니다.
도메인 어노테이션의 장점
- 데이터 품질 향상: 유효성 검사 규칙 및 제약 조건을 적용하여 잘못된 데이터 입력을 방지하고 데이터 일관성을 유지합니다.
- 코드 재사용성 증가: 중앙 집중식으로 관리되는 도메인 정의를 여러 애플리케이션에서 공유하여 코드 중복을 줄이고 개발 효율성을 높입니다.
- 유지보수 용이성 증대: 데이터 정의가 변경될 때, 데이터베이스에서 중앙 집중식으로 관리하므로 애플리케이션 코드를 수정할 필요 없이 변경 사항을 반영할 수 있습니다.
- 데이터 거버넌스 강화: 데이터 사용 목적 및 속성에 대한 명확한 정보를 제공하여 데이터 거버넌스 및 규정 준수를 지원합니다.
도메인 어노테이션 생성 및 관리
도메인 어노테이션은 CREATE DOMAIN
, ALTER DOMAIN
, DROP DOMAIN
DDL 구문을 사용하여 생성, 수정, 삭제할 수 있습니다. 다음은 몇 가지 예시입니다.
1. 도메인 생성
CREATE DOMAIN
구문을 사용하여 새로운 도메인을 생성합니다.
CREATE DOMAIN HourlyWage AS NUMBER
DEFAULT 0
CONSTRAINT valid_wage CHECK (HourlyWage >= 0 AND HourlyWage < 1000)
ORDER BY HourlyWage
DISPLAY '$999.99'
ANNOTATIONS (
'properties' = '{
"Sales": "Manufacturing",
"Industry": "Manufacturing"
}',
'descriptions' = 'Hourly wages for different companies.');
2. 도메인에 열 연결
CREATE TABLE
또는 ALTER TABLE
구문을 사용하여 테이블 열에 도메인을 연결합니다.
CREATE TABLE Employees (
EmployeeID NUMBER,
EmployeeName VARCHAR2(100),
HourlyWage HourlyWage DOMAIN
);
-- 기존 테이블에 도메인 연결
ALTER TABLE Employees
MODIFY (HourlyWage HourlyWage DOMAIN);
3. 도메인 수정
ALTER DOMAIN
구문을 사용하여 도메인의 속성을 변경합니다.
ALTER DOMAIN HourlyWage
MODIFY CONSTRAINT valid_wage CHECK (HourlyWage >= 0 AND HourlyWage < 1200);
4. 도메인 삭제
DROP DOMAIN
구문을 사용하여 더 이상 필요하지 않은 도메인을 삭제합니다.
DROP DOMAIN HourlyWage;
실전 예제: 전화번호 형식 검증
전화번호 형식을 강제하기 위해 정규 표현식을 사용한 도메인을 생성하는 예시입니다.
CREATE DOMAIN PhoneNumber AS VARCHAR2(20)
CONSTRAINT phone_format CHECK (REGEXP_LIKE(VALUE, '^\d{3}-\d{3}-\d{4}$'))
ANNOTATIONS ('description' = '전화번호 형식을 999-999-9999로 제한');
CREATE TABLE Contacts (
ContactID NUMBER,
ContactName VARCHAR2(100),
Phone PhoneNumber DOMAIN
);
INSERT INTO Contacts (ContactID, ContactName, Phone) VALUES (1, '홍길동', '123-456-7890'); -- 성공
INSERT INTO Contacts (ContactID, ContactName, Phone) VALUES (2, '김철수', '1234567890'); -- 실패, phone_format 제약 조건 위반
위 코드에서 PhoneNumber
도메인은 Contacts
테이블의 Phone
열에 연결되어 입력되는 데이터의 형식을 검증합니다.
API를 사용한 도메인 정보 조회
데이터 딕셔너리 뷰를 사용하여 도메인 정보를 조회할 수 있습니다.
SELECT domain_name, data_type, constraint_name, constraint_condition
FROM user_domain_constraints
WHERE table_name = 'CONTACTS';
위 쿼리는 CONTACTS
테이블에 연결된 도메인 제약 조건 정보를 반환합니다.
유연한 도메인 활용
유연한 도메인을 사용하여 다양한 조건에 따라 다른 형식을 동적으로 선택할 수 있습니다.
CREATE DOMAIN temperature AS NUMBER
CONSTRAINT celsius CHECK (VALUE BETWEEN -273.15 AND 1000)
CONSTRAINT fahrenheit CHECK (VALUE BETWEEN -459.67 AND 1832)
CONSTRAINT kelvin CHECK (VALUE >= 0);
CREATE DOMAIN unit_type AS VARCHAR2(10);
CREATE TABLE sensor_readings (
sensor_id NUMBER,
temperature NUMBER,
unit_type unit_type DOMAIN, -- 동적으로 단위 유형 선택
DOMAIN CHECK USING ( -- 단위 유형에 따라 다른 제약 조건 적용
CASE
WHEN unit_type = 'C'
THEN celsius -- 섭씨 제약 조건
WHEN unit_type = 'F'
THEN fahrenheit -- 화씨 제약 조건
WHEN unit_type = 'K'
THEN kelvin -- 켈빈 제약 조건
ELSE 'FALSE'
END = 'TRUE'
)
);
스키마 어노테이션 활용
데이터베이스 객체에 추가 메타데이터를 스키마 어노테이션을 사용하여 추가할 수 있습니다.
1. 테이블 어노테이션 추가
CREATE TABLE
구문 또는 ALTER TABLE
구문을 사용하여 테이블에 어노테이션을 추가합니다.
CREATE TABLE employees (
employee_id NUMBER,
first_name VARCHAR2(50),
last_name VARCHAR2(50)
)
ANNOTATIONS (
'description' = '회사 직원 정보를 저장하는 테이블',
'owner' = 'HR_DEPT'
);
2. 열 어노테이션 추가
CREATE TABLE
또는 ALTER TABLE
구문에서 열 정의의 일부로 어노테이션을 추가합니다.
CREATE TABLE employees (
employee_id NUMBER ANNOTATIONS ('description' => '직원 고유 식별자'),
first_name VARCHAR2(50),
last_name VARCHAR2(50)
);
3. 데이터 딕셔너리 뷰를 사용한 어노테이션 정보 조회
SELECT object_name, object_type, annotation_name, annotation_value
FROM user_annotations
WHERE object_name = 'EMPLOYEES';