Database View 가상 테이블
데이터베이스에서 **View(뷰)**는 하나 이상의 테이블을 기반으로 한 가상 테이블입니다. 물리적으로 데이터를 저장하지 않으며, 쿼리를 통해 생성된 결과 집합을 나타냅니다. 쉽게 말해, View는 복잡한 쿼리의 결과를 테이블처럼 사용할 수 있게 해주는 도구입니다.
1. View를 사용하는 이유
(1) 데이터 접근 단순화
복잡한 쿼리를 반복적으로 작성하는 대신 View를 사용하여 데이터 접근을 간단하게 할 수 있습니다. 예를 들어, 복잡한 조인, 서브쿼리 등을 통해 데이터를 조회해야 할 때, 이를 View로 만들어두면 간단하게 SELECT * FROM ViewName;으로 데이터를 조회할 수 있습니다.
(2) 보안 및 데이터 접근 제어
View를 통해 테이블의 특정 열이나 특정 데이터만 노출할 수 있습니다. 이를 통해 민감한 정보를 보호하고, 사용자가 필요로 하는 데이터에만 접근할 수 있도록 제어할 수 있습니다. 예를 들어, 직원의 급여 정보를 포함하는 테이블에서 급여 정보를 제외한 데이터를 다른 사용자에게 제공할 수 있습니다.
(3) 독립성 유지
View는 기본 테이블에 의존하지 않고 동작하는 가상 테이블이므로, 테이블의 구조가 변경되더라도 View는 동일한 쿼리로 데이터에 접근할 수 있게 합니다. 이는 애플리케이션의 SQL 코드나 보고서 작성 시 유연성을 높여줍니다.
(4) 복잡한 연산의 재사용
View를 사용하면 자주 반복되는 복잡한 쿼리를 매번 작성할 필요 없이 재사용할 수 있습니다. 복잡한 계산, 집계, 조인 등을 미리 정의된 View로 단순화하면 쿼리 작성이 더 쉬워집니다.
(5) 논리적 데이터 모델 제공
View를 통해 실제 데이터 모델을 감추고, 사용자가 이해하기 쉬운 논리적 데이터 모델을 제공합니다. 예를 들어, 여러 테이블에서 데이터를 가져와 의미 있는 비즈니스 엔티티(예: 고객, 주문, 제품)를 View로 정의하여 사용자가 복잡한 데이터베이스 구조를 신경 쓰지 않고 데이터를 쉽게 접근하도록 할 수 있습니다.
2. View 사용 사례
- 보고서 생성
- 예를 들어, 매출 데이터를 기반으로 한 월별 요약 보고서를 작성하는 경우, 복잡한 집계 쿼리를 View로 정의해두면 간단한 SQL만으로 쉽게 보고서를 생성할 수 있습니다.
- 민감 데이터 보호
- 예를 들어, 직원 테이블에서 name, email 필드만 노출하고 급여 정보는 제외한 View를 만들어 직원 정보 조회에 활용할 수 있습니다.
- 복잡한 데이터 계산 추상화
- 예를 들어, 재고 관리 시스템에서 여러 테이블을 조인하여 특정 상품의 현재 재고를 계산하는 복잡한 로직을 View로 만들어 사용할 수 있습니다. 이를 통해 사용자들은 단순한 SELECT 문으로 현재 재고 정보를 조회할 수 있습니다.
3. MySQL에서 view
MySQL에서 View를 사용하는 방법을 이해하기 위해 View를 생성하고, 이를 조회하고, 관리하는 방법을 예시와 함께 설명하겠습니다.
1. View 생성
MySQL에서 View는 기존 테이블 또는 테이블들로부터 데이터를 조회하는 쿼리를 기반으로 생성된 가상 테이블입니다. CREATE VIEW 명령을 사용하여 View를 생성할 수 있습니다.
기본 구조:
CREATE VIEW view_name AS
SELECT columns
FROM tables
WHERE conditions;
2. View 생성 예시
예를 들어, 다음과 같은 두 개의 테이블이 있다고 가정해보겠습니다.
employees 테이블:
id name department salary
1 | John Doe | Sales | 50000 |
2 | Jane Smith | HR | 60000 |
3 | Alice Lee | IT | 75000 |
4 | Bob Brown | Sales | 52000 |
departments 테이블:
department_id department_name
1 | Sales |
2 | HR |
3 | IT |
View 생성 예시 1: 직원의 이름과 부서만 보여주는 View
CREATE VIEW employee_overview AS
SELECT name, department
FROM employees;
이 View는 employees 테이블에서 직원의 이름과 부서 정보만을 조회할 수 있게 합니다. 이후에는 다음과 같이 View를 조회할 수 있습니다:
SELECT * FROM employee_overview;
결과:
name department
John Doe | Sales |
Jane Smith | HR |
Alice Lee | IT |
Bob Brown | Sales |
3. 복잡한 View 생성 예시
View는 여러 테이블을 조인하거나 복잡한 쿼리를 포함할 수도 있습니다.
View 생성 예시 2: 직원과 부서명을 함께 보여주는 View
직원의 부서 정보를 departments 테이블과 조인해서, 부서 이름과 함께 직원 정보를 제공하는 View를 생성할 수 있습니다.
CREATE VIEW employee_department_view AS
SELECT e.name, d.department_name, e.salary
FROM employees e
JOIN departments d ON e.department = d.department_name;
이 View는 직원의 이름, 부서 이름, 그리고 급여 정보를 보여줍니다. 이제 이 View를 통해 다음과 같은 쿼리로 데이터를 조회할 수 있습니다:
SELECT * FROM employee_department_view;
결과:
name department_name salary
John Doe | Sales | 50000 |
Jane Smith | HR | 60000 |
Alice Lee | IT | 75000 |
Bob Brown | Sales | 52000 |
4. View의 활용
View를 생성한 후에는 실제 테이블처럼 SELECT 쿼리로 데이터를 조회할 수 있습니다. 이 때 View는 기본 테이블로부터 데이터를 가져와서 결과를 반환합니다.
View 조회:
SELECT * FROM employee_department_view
WHERE salary > 55000;
이 쿼리는 employee_department_view에서 급여가 55,000을 초과하는 직원의 정보를 조회합니다.
결과:
name department_name salary
Jane Smith | HR | 60000 |
Alice Lee | IT | 75000 |
5. View 수정 (ALTER VIEW)
이미 생성된 View를 수정하려면 ALTER VIEW 명령을 사용합니다.
하지만 대부분의 경우 View를 삭제하고 다시 생성하는 것이 더 일반적입니다.
ALTER VIEW employee_department_view AS
SELECT e.name, d.department_name
FROM employees e
JOIN departments d ON e.department = d.department_name;
이 쿼리는 View에서 salary 컬럼을 제외하고, 이름과 부서명만 포함하도록 View를 수정합니다.
6. View 삭제
View를 더 이상 사용하지 않으려면 DROP VIEW 명령으로 삭제할 수 있습니다.
DROP VIEW employee_department_view;
이 명령은 employee_department_view라는 View를 삭제합니다.
4. View의 장점
- 복잡한 쿼리의 단순화: 자주 사용하는 복잡한 쿼리를 View로 저장해 쉽게 재사용할 수 있습니다.
- 데이터 보안: 민감한 정보를 직접 조회할 필요 없이, 특정 열이나 행만을 포함한 View로 데이터를 제한할 수 있습니다.
- 유연성: 기본 테이블을 변경하지 않고도 다른 관점에서 데이터를 조회할 수 있습니다.
5. View의 단점
- 성능 문제: 일반적으로 View는 실제 데이터를 저장하지 않고 쿼리 결과를 매번 계산해서 반환하기 때문에, 복잡한 View는 성능 저하를 유발할 수 있습니다. 이는 특히 View가 여러 테이블을 조인하거나 서브쿼리를 포함할 경우 더 두드러질 수 있습니다.
- 삽입, 업데이트, 삭제 제한: 일반적으로 View는 읽기 전용으로 사용됩니다. 특히 복잡한 View나 여러 테이블을 조인한 View에서는 데이터를 삽입하거나 수정하는 작업이 제한될 수 있습니다. 이는 View가 기본 테이블에 대한 일관된 데이터를 제공하는 방식 때문입니다.
- View의 의존성: View가 생성된 이후 기본 테이블 구조가 변경되면 View도 영향을 받을 수 있습니다. 따라서 기본 테이블이 변경되면 View를 수정해야 할 수 있습니다.
결론
View는 매번 쿼리를 실행할 때마다 계산되지만, 여전히 쿼리 재사용성, 코드 일관성, 보안, 추상화, 데이터 통합 측면에서 많은 이점을 제공합니다. 이러한 이유로 View는 성능을 조금 희생하더라도 관리 편의성과 데이터 접근의 유연성, 유지보수 측면에서 많이 사용됩니다. 일반 SQL 쿼리만을 사용한다면 이러한 이점을 놓치기 쉬우므로, 특정 시나리오에서는 View를 사용하는 것이 매우 유리할 수 있습니다.
'Interview > DB' 카테고리의 다른 글
Database Select Query (0) | 2024.10.17 |
---|---|
Database Commit vs Rollback (0) | 2024.10.17 |
Database에서 ACID (0) | 2024.10.14 |
DB에서 데이터 무결성 (1) | 2024.10.14 |
Database에서 DDL DML DCL (0) | 2024.10.14 |