코딩 스쿨 MySQL

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

MySQL Views

MySQL Views: 뷰 생성 및 활용 방법과 실전 예제

MySQL에서 **뷰(View)**는 하나 이상의 테이블에 대한 결과 집합을 마치 테이블처럼 사용할 수 있는 가상 테이블입니다. 뷰는 기본적으로 SELECT 쿼리를 저장하여 여러 테이블에서 데이터를 쉽게 조회할 수 있게 해줍니다. 이를 통해 복잡한 쿼리를 단순화하고, 데이터 보안성을 강화하며, 읽기 전용 또는 동적으로 데이터를 제공하는 데 유용합니다. 이 글에서는 MySQL에서 뷰를 생성하고 관리하는 방법, 장점, 사용 시 주의사항 및 실전 예제를 설명하겠습니다.

1. MySQL View란 무엇인가?

  • *뷰(View)**는 미리 정의된 SQL 쿼리를 통해 생성되는 가상의 테이블입니다. 뷰는 실제 데이터를 저장하지 않으며, 데이터는 뷰가 정의된 기본 테이블에서 가져옵니다. 이를 통해 개발자는 복잡한 쿼리를 단순화하고, 데이터의 특정 부분만 노출함으로써 보안성을 높일 수 있습니다.

예를 들어, 여러 테이블을 조인해서 매번 복잡한 쿼리를 작성하는 대신, 뷰를 사용하여 하나의 가상 테이블처럼 간단하게 조회할 수 있습니다.

2. MySQL View 생성

MySQL에서 뷰를 생성하려면 CREATE VIEW 문을 사용합니다. 기본 형식은 다음과 같습니다:

CREATE VIEW 뷰명 AS
SELECT 컬럼1, 컬럼2, ...
FROM 테이블명
WHERE 조건;

예제: 뷰 생성

예를 들어, 직원 데이터를 관리하는 employees 테이블과 부서 데이터를 관리하는 departments 테이블이 있다고 가정해 봅시다.

CREATE TABLE employees (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100),
  department_id INT,
  salary DECIMAL(10, 2)
);

CREATE TABLE departments (
  id INT PRIMARY KEY,
  department_name VARCHAR(100)
);

이제 두 테이블을 조인하여 각 직원의 이름과 소속 부서 이름을 조회하는 뷰를 생성할 수 있습니다.

CREATE VIEW employee_department AS
SELECT e.name, d.department_name, e.salary
FROM employees e
JOIN departments d ON e.department_id = d.id;

위 SQL은 employee_department이라는 뷰를 생성합니다. 이 뷰는 employeesdepartments 테이블의 데이터를 조인하여 직원 이름, 부서 이름, 급여 정보를 제공합니다.

3. 뷰 사용하기

뷰를 생성한 후에는 마치 일반 테이블처럼 뷰에서 데이터를 조회할 수 있습니다.

SELECT * FROM employee_department;

이 쿼리는 employee_department 뷰에 저장된 데이터를 조회합니다. 뷰는 내부적으로 정의된 SELECT 문을 실행하여 결과를 반환합니다.

4. 뷰의 장점

MySQL 뷰를 사용하는 것은 여러 가지 장점을 제공합니다:

  • 복잡한 쿼리 단순화: 여러 테이블에서 데이터를 조인하거나 복잡한 계산을 할 때 뷰를 사용하면 간단하게 데이터를 조회할 수 있습니다.

  • 보안성 강화: 뷰를 통해 특정 열만 노출할 수 있으므로, 민감한 데이터를 숨길 수 있습니다. 예를 들어, 직원의 급여 정보만 제외하고 나머지 정보를 제공하는 뷰를 만들 수 있습니다.

    CREATE VIEW employee_public AS
    SELECT name, department_name
    FROM employee_department;
    
    
  • 재사용성: 자주 사용되는 쿼리를 뷰로 정의해 두면 코드 재사용성을 높일 수 있습니다.

  • 데이터 일관성 유지: 뷰는 항상 최신 데이터를 가져오기 때문에 기본 테이블이 변경되어도 최신 데이터를 조회할 수 있습니다.

5. 뷰 수정 및 삭제

뷰를 수정하려면 CREATE OR REPLACE VIEW 명령을 사용합니다. 이 명령은 기존 뷰를 덮어씁니다.

CREATE OR REPLACE VIEW employee_department AS
SELECT e.name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.id;

이 명령은 기존의 employee_department 뷰를 수정하여 급여 정보는 제외한 결과를 반환하도록 합니다.

뷰를 삭제하려면 DROP VIEW 명령을 사용합니다.

DROP VIEW employee_department;

6. 뷰 사용 시 주의사항

  • 퍼포먼스 문제: 뷰는 가상 테이블로서 실제 데이터를 저장하지 않고 매번 정의된 쿼리를 실행합니다. 따라서 복잡한 쿼리를 포함한 뷰는 성능 저하를 유발할 수 있습니다. 특히 대규모 데이터셋에서 성능을 주의해야 합니다.

  • 제한된 수정 기능: 뷰는 기본 테이블을 기반으로 데이터를 제공하기 때문에, 뷰 자체에서 데이터를 수정하는 것은 제한적입니다. 기본 테이블의 키 정보가 부족하거나 여러 테이블에서 데이터를 가져오는 경우, 뷰를 통해 데이터를 수정할 수 없습니다.

    일반적으로 뷰에서 데이터를 수정하려면 단일 테이블에 대한 뷰여야 하며, 다음과 같은 제한이 적용됩니다:

    • 뷰가 정의된 SELECT 문에는 JOIN, GROUP BY, DISTINCT 등의 복잡한 연산이 없어야 합니다.
    • 뷰에서 데이터를 삽입할 때 필요한 모든 필드를 포함해야 합니다.
  • 인덱스와 뷰: 뷰에는 인덱스를 직접 적용할 수 없습니다. 기본 테이블의 인덱스만 성능에 영향을 미칩니다.

7. 실전 예제

다음은 뷰를 활용한 더 구체적인 실전 예제입니다.

예제 1: 특정 부서의 직원들만 조회하는 뷰

특정 부서에 속한 직원들만 보여주는 뷰를 생성할 수 있습니다. 예를 들어, Sales 부서의 직원들만 조회하는 뷰를 만들어 보겠습니다.

CREATE VIEW sales_department AS
SELECT e.name, e.salary
FROM employees e
JOIN departments d ON e.department_id = d.id
WHERE d.department_name = 'Sales';

이제 sales_department 뷰를 사용하여 Sales 부서 직원들의 이름과 급여를 쉽게 조회할 수 있습니다.

SELECT * FROM sales_department;

예제 2: 급여 상위 10명 조회 뷰

직원 급여 상위 10명을 조회하는 뷰를 생성해보겠습니다.

CREATE VIEW top_salaries AS
SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 10;

이 뷰는 급여가 가장 높은 상위 10명의 직원 정보를 제공합니다.

SELECT * FROM top_salaries;

요약

MySQL에서 **뷰(View)**는 복잡한 쿼리를 간소화하고, 보안성을 강화하며, 데이터에 대한 일관된 접근을 제공하는 강력한 도구입니다. 뷰는 가상 테이블로 데이터를 효율적으로 조회하고 관리할 수 있게 해주지만, 성능 및 수정 제한 사항을 고려하여 적절히 사용하는 것이 중요합니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com