SQL 뷰(VIEW): 데이터 관리와 보안 강화를 위한 가상 테이블 활용법
🔹 뷰(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를 활용하면 쿼리 성능을 극대화할 수 있다.