Databases

뷰(View)의 개념과 뷰(View)를 사용해야 하는 이유

진공청소ㄱl 2024. 12. 6. 01:52

뷰(View)

데이터베이스에서 뷰(View)는 하나 이상의 테이블에서 데이터를 가져와 가상의 테이블로 제공하는 데이터베이스 객체이다. 실제 데이터를 저장하지 않고, 기반이 되는 테이블들의 데이터를 동적으로 조회하는 SQL 쿼리의 결과를 제공한다.

뷰를 통해 데이터를 읽는 것은 마치 테이블에서 데이터를 조회하는 것처럼 간단하지만, 뷰는 테이블과 다르게 저장 공간을 차지하지 않으며, 항상 최신 데이터를 반영한다.

뷰의 특징

  1. 가상 테이블
    • 뷰는 테이블처럼 동작하지만, 데이터는 실제 테이블에서 가져온다.
    • 뷰에는 데이터가 저장되지 않는다.
  2. 동적 쿼리
    • 뷰를 정의할 때 사용된 쿼리가 실행될 때마다 최신 데이터를 가져온다.
    • 예: 특정 조건에 맞는 데이터만 필터링하거나 조인한 결과를 제공.
  3. 보안 강화
    • 민감한 데이터(예: 급여, 비밀번호 등)를 숨기고 필요한 데이터만 노출하도록 설계할 수 있다.
  4. 재사용 가능
    • 반복적으로 사용하는 복잡한 쿼리를 뷰로 정의하면 코드 재사용성이 높아진다.

이러한 뷰의 종류에는 일반 뷰, 물리적 뷰, 읽기 전용 뷰 등이 있다.

일반 뷰(Regular View)

 

가장 기본적인 형태의 뷰로, 테이블이나 다른 뷰를 기반으로 생성된 가상 테이블

 

사용 예시

 

employees 테이블에서 이름, 부서, 급여 정보를 조회하지만, 급여는 5000 이상인 데이터만 보이도록 제한

CREATE VIEW high_salary_employees AS
SELECT emp_id, name, department, salary
FROM employees
WHERE salary >= 5000;

 

아래 두 쿼리의 결과는 동일하다.

SELECT * FROM high_salary_employees;
SELECT emp_id, name, department, salary
FROM employees
WHERE salary >= 5000;

 

Materialized View (물리적 뷰)


쿼리 결과를 디스크에 저장하는 뷰로, 성능 최적화를 위해 사용.

 

사용 예시

CREATE MATERIALIZED VIEW sales_summary AS
SELECT region, SUM(sales) AS total_sales
FROM sales
GROUP BY region;

 

SELECT * FROM sales_summary;

 

읽기 전용 뷰

 

데이터를 조회만 가능하며, 삽입(INSERT), 수정(UPDATE), 삭제(DELETE) 작업이 불가능한 뷰

 

사용 예시

 

products 테이블에서 데이터를 조회는 가능하지만, 데이터를 수정할 수 없도록 읽기 전용 뷰를 생성

CREATE VIEW readonly_products AS
SELECT product_id, product_name, price
FROM products
WITH CHECK OPTION; -- 뷰를 통한 데이터 수정 방지
SELECT * FROM readonly_products;

 

뷰의 단점
  1. 성능 이슈
    • 뷰는 실행 시마다 기반 테이블의 데이터를 조회하므로, 지나치게 복잡한 뷰는 성능 저하를 유발할 수 있다.
    • 해결 방안: Materialized View(물리적 뷰)를 고려
  2. 의존성 관리
    • 뷰는 기반 테이블에 의존하므로, 테이블 구조가 변경되면 뷰도 재정의해야 한다.
  3. 제한된 쓰기
    • 뷰는 기본적으로 읽기 전용이지만, 경우에 따라 수정 가능하도록 만들 수 있다.
  4. 복잡한 논리
    • 지나치게 많은 테이블을 조인하거나 집계 계산이 포함된 뷰는 유지 보수가 어려울 수 있다.

참고

[SQL] 뷰(VIEW)란 무엇인가?