반응형

오라클 VIEW는 데이터베이스에서 저장된 테이블의 논리적 표현을 제공합니다. 뷰(View)는 테이블과 유사하지만 물리적으로 데이터가 저장되지 않으며, 데이터는 실제 테이블에서 가져옵니다. 이를 통해 데이터의 보안, 관리, 재사용성을 향상시킬 수 있습니다. 이번 글에서는 오라클 VIEW의 개념과 작성법, 다양한 유형의 예제, 사용 시 유의사항 등을 자세히 설명하겠습니다.


1. VIEW란?

1.1. VIEW의 정의

VIEW는 하나 이상의 테이블에서 데이터를 조회하기 위한 가상 테이블입니다. SELECT 문으로 정의되며, 테이블처럼 쿼리를 실행할 수 있습니다. 하지만 물리적으로 데이터를 저장하지 않기 때문에 데이터의 실시간 반영이 가능합니다.

1.2. VIEW의 장점

  1. 캡슐화와 보안
    복잡한 쿼리를 간단한 VIEW로 캡슐화하여 재사용하고, 민감한 데이터를 숨겨 보안을 강화할 수 있습니다.
  2. 간결한 데이터 관리
    복잡한 JOIN이나 서브쿼리를 간단하게 정의하여 재사용성을 높입니다.
  3. 독립성 제공
    테이블 구조 변경이 있어도, 기존의 VIEW를 통해 응용 프로그램에 영향을 최소화할 수 있습니다.
  4. 가독성 향상
    데이터 분석과 가독성을 위해 특정 컬럼이나 데이터를 정리할 수 있습니다.

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 사용 시 주의사항

  1. 성능 고려
    뷰는 데이터를 실시간으로 조회하므로, 복잡한 뷰는 성능 저하를 유발할 수 있습니다.
  2. 보안
    뷰를 사용해 민감한 정보를 숨기더라도 권한 설정을 신중히 해야 합니다.
  3. DML 제한
    뷰는 기본적으로 DML 작업(INSERT, UPDATE, DELETE)이 제한적입니다. 이를 허용하려면 INSTEAD OF 트리거를 사용합니다.
  4. VIEW 종속성
    뷰가 참조하는 테이블이 변경되면, 뷰가 INVALID 상태가 될 수 있습니다.

5. 결론

오라클의 VIEW는 데이터 관리와 가독성을 높이는 데 유용한 도구입니다. 단순 조회부터 복잡한 집계까지 다양한 유형의 VIEW를 활용하면, 응용 프로그램의 효율성을 크게 향상시킬 수 있습니다. 그러나 성능, 보안, 유지보수를 고려한 설계가 필요합니다.

뷰를 통해 데이터를 더욱 체계적으로 관리하고, 유지보수를 간소화해보세요!

반응형

+ Recent posts