SQL VIEWS 생성: 단계별 설명

SQL 뷰(View)란 무엇이며, 어떻게 생성할까요?

관계형 데이터베이스와 상호 작용하고, 데이터베이스 내에서 SQL 뷰를 생성하는 데 구조적 질의어(SQL)가 핵심적인 역할을 합니다.

SQL 뷰는 실제 데이터베이스 테이블의 데이터를 결합하고 저장하는 가상 테이블입니다. 이러한 뷰는 실제 데이터베이스 구조 및 구현 세부 사항을 숨김으로써 데이터 접근을 단순화하고 안전하게 만듭니다.

SQL 뷰는 어떻게 작동할까요? 뷰는 SQL 쿼리에 의해 생성되며, 이 쿼리는 뷰 생성 시 저장됩니다. 기본적으로, SQL 쿼리를 사용하여 여러 테이블에서 데이터를 검색하는 것은 해당 데이터베이스 테이블에서 데이터를 가져오는 프로세스를 실행하는 것과 같습니다. 마찬가지로, 생성된 SQL 뷰를 쿼리할 때, 저장된 쿼리가 먼저 검색된 후 실행됩니다.

SQL 뷰 생성의 유용성

SQL 뷰는 저장된 SQL 쿼리를 기반으로 동작하므로 데이터베이스 보안을 강화하는 데 기여합니다. 복잡한 쿼리를 단순화하고 쿼리 성능을 향상시키는 등의 이점도 있습니다. 데이터베이스와 애플리케이션에 어떻게 도움이 되는지 좀 더 자세히 살펴보겠습니다.

#1. 데이터베이스 보안 강화

SQL 뷰는 실제 데이터베이스 테이블의 구조를 숨기는 가상 테이블 역할을 합니다. 뷰만으로는 실제 테이블 수나 테이블의 다양한 열을 알 수 없으며, 사용자가 실제 테이블 대신 뷰만 쿼리하도록 액세스 제어 제한을 설정하여 데이터베이스 보안을 강화할 수 있습니다.

#2. 복잡한 쿼리 단순화

복잡한 조인 조건을 포함하는 여러 테이블에 대한 SQL 쿼리는 흔히 발생합니다. 이러한 복잡한 쿼리를 자주 사용하는 경우 SQL 뷰 생성 기능을 활용할 수 있습니다. 복잡한 쿼리를 뷰에 저장함으로써, 매번 전체 복잡한 쿼리를 실행하는 대신 뷰를 직접 쿼리할 수 있습니다.

#3. 스키마 변경 영향 완화

기본 테이블 구조에 열 추가 또는 제거와 같은 변경 사항이 발생하더라도 뷰는 영향을 받지 않습니다. 모든 쿼리에 대해 SQL 뷰를 사용한다면 스키마 변경에 대한 걱정을 줄일 수 있습니다. 가상 테이블이므로 생성된 SQL 뷰는 계속해서 원활하게 작동합니다.

#4. 쿼리 성능 향상

SQL 뷰를 생성할 때, 데이터베이스 엔진은 저장하기 전에 기본 쿼리를 최적화합니다. 저장된 쿼리는 동일한 쿼리를 직접 실행하는 것보다 더 빠르게 실행됩니다. 따라서 SQL 뷰를 사용해 데이터를 쿼리하면 더 나은 성능과 더 빠른 결과 얻을 수 있습니다.

SQL 뷰 생성 방법

SQL 뷰를 생성하려면 CREATE VIEW 명령을 사용할 수 있습니다. 뷰에는 SELECT 문이 포함되어 있으며, 이 문은 뷰에 저장될 쿼리를 정의합니다. 기본 구문은 다음과 같습니다.

CREATE VIEW view_name AS
SELECT
  column_1,
  column_2,
  column_3...
FROM
  table_name_1, table_name_2
WHERE
  condition_clause

예시를 통해 더 자세히 알아보겠습니다. 부서(department)와 직원(employee)이라는 두 개의 테이블이 있다고 가정해 봅시다. 부서 테이블은 부서 이름과 ID를 포함하며, 직원 테이블은 직원 이름, ID 및 소속된 부서 ID를 포함합니다. 이 두 테이블을 사용하여 SQL 뷰를 생성해 보겠습니다.

데이터베이스 테이블 생성

department_id department_name
1 재무
2 기술
3 비즈니스

표 1: 부서 테이블

MySQL을 사용하는 경우, 다음 쿼리를 사용하여 이 테이블을 생성할 수 있습니다.

CREATE TABLE `department` (
  `department_id` int,
  `department_name` varchar(255),
  PRIMARY KEY (`department_id`)
);

아래 SQL을 사용하여 생성된 테이블에 데이터를 삽입합니다.

INSERT INTO department VALUES (1, 'Finance');
INSERT INTO department VALUES (2, 'Technology');
INSERT INTO department VALUES (3, 'Business');
employee_id employee_name department_id
100 John 3
101 Mary 1
102 Natalya 3
103 Bruce 2

표 2: 직원 테이블

부서 테이블이 준비되고 데이터로 채워진 상태에서, 아래 MySQL 쿼리를 사용하여 직원 테이블을 만듭니다.

CREATE TABLE `employee` (
  `employee_id` INT,
  `employee_name` VARCHAR(255),
  `department_id` INT,
  FOREIGN KEY (`department_id`) REFERENCES department(department_id)
);

다음으로 직원 레코드를 테이블에 삽입합니다. department_id 열은 부서 테이블에 대한 외래 키 참조를 가지므로, 다른 테이블에 없는 department_id를 삽입할 수 없습니다.

INSERT INTO employee VALUES (100, 'John', 3);
INSERT INTO employee VALUES (101, 'Mary', 1);
INSERT INTO employee VALUES (102, 'Natalya', 3);
INSERT INTO employee VALUES (103, 'Bruce', 2);

데이터베이스 테이블 쿼리

이제 데이터베이스 쿼리에서 테이블을 사용해 보겠습니다. 모든 직원의 employee_id, employee_name 및 department_name을 쿼리해야 하는 경우를 생각해 봅시다. 이 경우 두 테이블을 모두 사용하고, 공통 열인 department_id를 기준으로 조인해야 합니다. 쿼리는 다음과 같습니다.

SELECT
  employee_id,
  employee_name,
  department_name
FROM
  employee,
  department
WHERE
  employee.department_id = department.department_id;

SQL 뷰 생성

이러한 데이터를 자주 조회하거나 참조할 필요가 있을 수 있습니다. 또한 테이블에 레코드가 많아질수록 쿼리 시간이 길어질 수 있습니다. 이러한 상황에서는 해당 쿼리에 대한 SQL 뷰를 생성할 수 있습니다.

다음 쿼리를 사용하여 employee_info라는 뷰를 만들어 보겠습니다.

CREATE VIEW employee_info AS
SELECT
  employee_id,
  employee_name,
  department_name
FROM
  employee,
  department
WHERE
  employee.department_id = department.department_id;

이 뷰가 있으면, 동일한 데이터를 직접 쿼리할 수 있습니다. 따라서 쿼리가 다음과 같이 단순해집니다.

SELECT
  *
FROM
  employee_info;

SQL 뷰를 쿼리하면 원래 쿼리를 실행했을 때와 동일한 결과가 나타납니다. 이제 쿼리 관리가 더 쉬워졌으며, 뷰는 결과나 성능에 영향을 주지 않고 쿼리의 복잡성을 숨겨줍니다.

SQL 뷰 대체 방법

특정 이름의 뷰가 있고 수정하거나 대체하려는 경우 CREATE OR REPLACE VIEW 명령을 사용하면 됩니다. 이 명령을 사용하여 뷰를 생성하는 데 사용된 SELECT 문을 수정할 수 있습니다. 뷰 이름은 그대로 유지하면서 뷰의 출력 내용을 변경할 수 있습니다. 또한, 뷰가 존재하지 않는 경우에는 새로운 SQL 뷰가 생성됩니다.

다음 구문을 사용하여 SQL 뷰를 대체할 수 있습니다.

CREATE OR REPLACE VIEW view_name AS
SELECT
  new_column_1,
  new_column_2,
  new_column_3 ...
FROM
  new_table_name_1,
  new_table_name_2 ...
WHERE
  new_condition_clause

예시를 통해 좀 더 쉽게 이해해 보겠습니다. 부서 및 직원 테이블이 있고, employee_id, employee_name 및 department_name 열을 포함하는 employee_info SQL 뷰가 생성되어 있다고 가정합시다.

보안상의 이유로, 이 뷰에서 employee_id를 제거해야 할 수 있습니다. 또한 실제 데이터베이스 열을 숨기기 위해 열 이름을 변경할 수도 있습니다. 다음 SQL 쿼리를 사용하여 기존 뷰를 변경할 수 있습니다.

CREATE OR REPLACE VIEW employee_info AS
SELECT
  employee_name as name,
  department_name as department
FROM
  employee,
  department
WHERE
  employee.department_id = department.department_id;

뷰가 대체된 후, 이전에 사용하던 동일한 쿼리를 사용하면 다른 결과가 나타납니다. 예를 들어, 쿼리 결과에서 열 중 하나가 삭제되었으며, 열 이름이 employee_name 및 department_name에서 각각 name 및 department로 변경되었음을 확인할 수 있습니다.

SQL 뷰 생성 기능 활용

SQL 뷰를 생성하면 쿼리가 단순화되고 데이터 조회 속도가 빨라질 뿐만 아니라 스키마 변경에 대한 보안 및 보호 기능을 얻을 수 있습니다. SQL 뷰를 만드는 과정은 매우 간단합니다. 기존 쿼리를 SQL 뷰로 변환하여 활용할 수 있습니다.

위의 단계별 가이드를 사용하여 SQL 뷰를 생성하고 그 이점을 활용해 보세요. SQL 뷰를 사용하면 성능을 향상시키면서 데이터베이스 애플리케이션을 더 간단하고 안전하게 만들 수 있습니다.

자체 SQL 서버를 관리하려면 SSMS(SQL Server Management Studio)를 살펴보십시오.