오라클 VIEW는 데이터베이스에서 저장된 테이블의 논리적 표현을 제공합니다. 뷰(View)는 테이블과 유사하지만 물리적으로 데이터가 저장되지 않으며, 데이터는 실제 테이블에서 가져옵니다. 이를 통해 데이터의 보안, 관리, 재사용성을 향상시킬 수 있습니다. 이번 글에서는 오라클 VIEW의 개념과 작성법, 다양한 유형의 예제, 사용 시 유의사항 등을 자세히 설명하겠습니다.
1. VIEW란?
1.1. VIEW의 정의
VIEW는 하나 이상의 테이블에서 데이터를 조회하기 위한 가상 테이블입니다. SELECT 문으로 정의되며, 테이블처럼 쿼리를 실행할 수 있습니다. 하지만 물리적으로 데이터를 저장하지 않기 때문에 데이터의 실시간 반영이 가능합니다.
1.2. VIEW의 장점
- 캡슐화와 보안
복잡한 쿼리를 간단한 VIEW로 캡슐화하여 재사용하고, 민감한 데이터를 숨겨 보안을 강화할 수 있습니다. - 간결한 데이터 관리
복잡한 JOIN이나 서브쿼리를 간단하게 정의하여 재사용성을 높입니다. - 독립성 제공
테이블 구조 변경이 있어도, 기존의 VIEW를 통해 응용 프로그램에 영향을 최소화할 수 있습니다. - 가독성 향상
데이터 분석과 가독성을 위해 특정 컬럼이나 데이터를 정리할 수 있습니다.
2. VIEW 작성법
VIEW를 생성하려면 CREATE VIEW 명령어를 사용합니다.
2.1. 기본 문법
CREATE OR REPLACE VIEW 뷰이름 AS
SELECT 컬럼1, 컬럼2, ...
FROM 테이블이름
WHERE 조건;
2.2. VIEW 수정
CREATE OR REPLACE VIEW
를 사용하여 기존 뷰를 수정할 수 있습니다.
2.3. VIEW 삭제
뷰를 삭제하려면 DROP VIEW 명령어를 사용합니다.
DROP VIEW 뷰이름;
3. VIEW의 유형과 예제
3.1. 단순 VIEW
하나의 테이블에서 데이터를 조회하는 단순한 형태의 VIEW입니다.
예제
사원 정보 중 이름과 급여만 보여주는 VIEW:
CREATE OR REPLACE VIEW employee_view AS
SELECT first_name, last_name, salary
FROM employees;
사용
SELECT * FROM employee_view;
결과
| FIRST_NAME | LAST_NAME | SALARY |
|------------|-----------|----------|
| John | Smith | 5000 |
| Jane | Doe | 4500 |
3.2. 복합 VIEW
여러 테이블을 JOIN하여 데이터를 조회하는 VIEW입니다.
예제
사원과 부서 정보를 JOIN하여 VIEW 생성:
CREATE OR REPLACE VIEW employee_department_view AS
SELECT e.first_name, e.last_name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id;
사용
SELECT * FROM employee_department_view;
결과
| FIRST_NAME | LAST_NAME | DEPARTMENT_NAME |
|------------|-----------|-----------------|
| John | Smith | IT |
| Jane | Doe | HR |
3.3. WHERE 조건이 있는 VIEW
조건을 지정하여 특정 데이터만 포함하는 VIEW입니다.
예제
급여가 5000 이상인 사원만 포함하는 VIEW:
CREATE OR REPLACE VIEW high_salary_employees AS
SELECT first_name, last_name, salary
FROM employees
WHERE salary >= 5000;
사용
SELECT * FROM high_salary_employees;
3.4. AGGREGATE VIEW
집계 함수(AVG, SUM, COUNT 등)를 사용하는 VIEW입니다.
예제
부서별 평균 급여를 보여주는 VIEW:
CREATE OR REPLACE VIEW department_avg_salary AS
SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id;
사용
SELECT * FROM department_avg_salary;
결과
| DEPARTMENT_ID | AVG_SALARY |
|---------------|------------|
| 10 | 6000 |
| 20 | 5500 |
3.5. 읽기 전용 VIEW
데이터의 보안을 강화하기 위해 INSERT, UPDATE, DELETE가 불가능한 VIEW를 생성합니다.
예제
CREATE OR REPLACE VIEW readonly_employees AS
SELECT first_name, last_name, salary
FROM employees
WITH READ ONLY;
특징
WITH READ ONLY
를 추가하면 데이터 조작(DML) 작업이 금지됩니다.- INSERT, UPDATE, DELETE 시 오류 발생.
3.6. INSTEAD OF 트리거를 사용하는 VIEW
뷰에서 DML 작업을 허용하려면 INSTEAD OF 트리거를 사용합니다.
예제
CREATE OR REPLACE VIEW editable_employees AS
SELECT employee_id, first_name, salary
FROM employees;
CREATE OR REPLACE TRIGGER editable_employees_trigger
INSTEAD OF UPDATE ON editable_employees
FOR EACH ROW
BEGIN
UPDATE employees
SET salary = :NEW.salary
WHERE employee_id = :OLD.employee_id;
END;
/
사용
UPDATE editable_employees
SET salary = 7000
WHERE employee_id = 101;
3.7. 데이터 형식 변환 VIEW
컬럼의 데이터를 형식 변환하여 제공하는 VIEW입니다.
예제
급여를 통화 형식으로 변환:
CREATE OR REPLACE VIEW formatted_salary_view AS
SELECT first_name, last_name, TO_CHAR(salary, 'L999,999.00') AS formatted_salary
FROM employees;
사용
SELECT * FROM formatted_salary_view;
3.8. UNION을 사용하는 VIEW
여러 테이블의 데이터를 결합하는 VIEW입니다.
예제
CREATE OR REPLACE VIEW combined_view AS
SELECT first_name, 'Employee' AS role
FROM employees
UNION ALL
SELECT name AS first_name, 'Manager' AS role
FROM managers;
4. VIEW 사용 시 주의사항
- 성능 고려
뷰는 데이터를 실시간으로 조회하므로, 복잡한 뷰는 성능 저하를 유발할 수 있습니다. - 보안
뷰를 사용해 민감한 정보를 숨기더라도 권한 설정을 신중히 해야 합니다. - DML 제한
뷰는 기본적으로 DML 작업(INSERT, UPDATE, DELETE)이 제한적입니다. 이를 허용하려면 INSTEAD OF 트리거를 사용합니다. - VIEW 종속성
뷰가 참조하는 테이블이 변경되면, 뷰가 INVALID 상태가 될 수 있습니다.
5. 결론
오라클의 VIEW는 데이터 관리와 가독성을 높이는 데 유용한 도구입니다. 단순 조회부터 복잡한 집계까지 다양한 유형의 VIEW를 활용하면, 응용 프로그램의 효율성을 크게 향상시킬 수 있습니다. 그러나 성능, 보안, 유지보수를 고려한 설계가 필요합니다.
뷰를 통해 데이터를 더욱 체계적으로 관리하고, 유지보수를 간소화해보세요!
'개발 > 오라클' 카테고리의 다른 글
오라클 배치 처리 작성법과 다양한 유형의 예제 (0) | 2025.01.18 |
---|---|
오라클 트리거의 작성법과 다양한 유형의 예제 (0) | 2025.01.17 |
오라클 패키지 작성법과 다양한 유형의 예제 (0) | 2025.01.17 |
오라클 프로시저의 작성법과 다양한 유형의 예제 (0) | 2025.01.17 |
오라클 함수의 작성법과 다양한 유형의 예제 (0) | 2025.01.17 |