IT이야기/데이터베이스

SQL 뷰(VIEW): 데이터 관리와 보안 강화를 위한 가상 테이블 활용법

Chiba-in 2025. 2. 27. 13:42

🔹 뷰(VIEW)란?

1. 뷰(VIEW)의 정의

뷰(VIEW)데이터베이스에서 특정 쿼리의 결과를 저장한 가상의 테이블입니다.
뷰는 물리적으로 데이터를 저장하지 않고, 기존 테이블에서 필요한 데이터만 선택하여 마치 테이블처럼 사용할 수 있는 개체입니다.

뷰의 주요 역할:

  • 복잡한 쿼리를 단순화하여 재사용 가능
  • 데이터 보안 강화 (민감한 정보 노출 방지)
  • 논리적 데이터 독립성 유지
  • 쿼리 성능 최적화 (일부 DB에서는 Indexed View 제공)

📌 뷰는 실제 데이터를 저장하지 않으며, 원본 테이블의 변경 사항을 즉시 반영


🔹 뷰의 동작 방식

1. 기본적인 뷰 생성

✔️ 기본 뷰 생성 (SQL 예제)

CREATE VIEW EmployeeView AS
SELECT EmployeeID, Name, Department, Salary
FROM Employees
WHERE Department = 'IT';

✔️ 뷰를 사용한 데이터 조회

SELECT * FROM EmployeeView;

📌 기존 테이블(Employees)에서 IT 부서의 직원만 조회하는 가상 테이블


2. 뷰를 활용한 복잡한 쿼리 단순화

원본 테이블이 여러 개 있는 경우도 뷰로 쉽게 관리 가능
✔️ 예제: 직원과 부서 정보를 조인한 뷰 생성

CREATE VIEW EmployeeDepartmentView AS
SELECT e.EmployeeID, e.Name, d.DepartmentName
FROM Employees e
JOIN Departments d ON e.DepartmentID = d.DepartmentID;

✔️ 뷰를 활용한 간단한 조회

SELECT * FROM EmployeeDepartmentView;

📌 JOIN을 매번 작성할 필요 없이 간단한 SELECT 문으로 데이터 조회 가능


🔹 뷰의 종류

1. 단순 뷰(Simple View) vs 복합 뷰(Complex View)

구분 설명
단순 뷰 (Simple View) 단일 테이블에서 생성되며, INSERT, UPDATE, DELETE 가능
복합 뷰 (Complex View) 여러 테이블을 조인하여 생성되며, 일부 경우 수정이 불가능

✔️ 단순 뷰 예제

CREATE VIEW SimpleEmployeeView AS
SELECT EmployeeID, Name FROM Employees;

✔️ 복합 뷰 예제 (JOIN 포함)

CREATE VIEW ComplexEmployeeView AS
SELECT e.EmployeeID, e.Name, d.DepartmentName
FROM Employees e
JOIN Departments d ON e.DepartmentID = d.DepartmentID;

📌 복합 뷰의 경우 직접 데이터를 수정하기 어려울 수 있음


2. 업데이트 가능한 뷰 (Updatable View) vs 읽기 전용 뷰 (Read-Only View)

업데이트 가능한 뷰

  • 단순 뷰는 일반적으로 INSERT, UPDATE, DELETE 가능
  • 원본 테이블의 데이터를 직접 변경할 수 있음
  • 단, PRIMARY KEY가 포함되어 있어야 함

✔️ 업데이트 가능한 뷰 생성

CREATE VIEW UpdatableView AS
SELECT EmployeeID, Name, Salary FROM Employees
WHERE Department = 'IT';

✔️ 뷰를 통한 데이터 수정

UPDATE UpdatableView SET Salary = Salary + 5000 WHERE EmployeeID = 101;

📌 뷰를 통해 원본 테이블의 데이터를 변경 가능

읽기 전용 뷰

  • DISTINCT, JOIN, GROUP BY, HAVING, UNION 등이 포함된 경우 INSERT, UPDATE, DELETE 불가능

✔️ 읽기 전용 뷰 예제

CREATE VIEW ReadOnlyView AS
SELECT Department, AVG(Salary) AS AvgSalary
FROM Employees
GROUP BY Department;

📌 집계 함수(AVG 등)가 포함되어 있어 데이터 수정이 불가능


🔹 뷰의 실무 활용 사례

1. 민감한 데이터 보호 (데이터 보안 강화)

급여 정보는 제한된 사용자만 볼 수 있도록 뷰를 활용
✔️ 뷰 생성 (일반 직원은 Salary 정보 제외)

CREATE VIEW EmployeePublicView AS
SELECT EmployeeID, Name, Department FROM Employees;

📌 민감한 정보(Salary)는 제외하여 사용자별 접근 권한을 설정 가능


2. 보고서 및 대시보드 최적화

경영진이 필요한 데이터만 쉽게 조회할 수 있도록 뷰 활용
✔️ 뷰 생성 (부서별 평균 급여 조회)

CREATE VIEW DepartmentSalaryView AS
SELECT Department, AVG(Salary) AS AvgSalary
FROM Employees
GROUP BY Department;

📌 매번 복잡한 쿼리를 실행할 필요 없이 빠르게 보고 가능


3. 데이터 일관성 유지

뷰를 통해 특정 비즈니스 로직을 강제하여 데이터 무결성 유지
✔️ 예제: 퇴사한 직원은 조회되지 않도록 설정

CREATE VIEW ActiveEmployees AS
SELECT * FROM Employees WHERE Status = 'Active';

📌 사용자는 항상 활성 직원만 조회 가능하도록 설정


🔹 인덱스가 있는 뷰 (Materialized View, Indexed View)

기본 뷰는 가상 테이블이지만, 일부 DBMS는 물리적으로 저장하는 인덱스 뷰 제공
자주 사용하는 쿼리를 미리 저장하여 성능 최적화 가능

✔️ Materialized View 생성 (Oracle, PostgreSQL 예제)

CREATE MATERIALIZED VIEW SalesSummary AS
SELECT ProductID, SUM(SalesAmount) AS TotalSales
FROM Sales
GROUP BY ProductID;

📌 뷰가 미리 계산된 데이터를 저장하여 성능 향상


📌 결론

뷰(VIEW)는 SQL에서 데이터 관리와 보안 강화를 위한 강력한 기능이다.
복잡한 쿼리를 단순화하여 재사용성을 높이고, 민감한 데이터 보호에 활용할 수 있다.
단순 뷰는 수정이 가능하지만, 복합 뷰나 읽기 전용 뷰는 직접 변경이 불가능하다.
Materialized View를 활용하면 쿼리 성능을 극대화할 수 있다.