본문 바로가기

CS 과목(CS科目)/데이터 베이스(データベース)

create database vs create schema

CREATE DATABASE와 CREATE SCHEMA의 차이점은 데이터베이스 시스템에 따라 다르게 적용됩니다.

1️⃣ 일반적인 차이점

구분 CREATE DATABASE vs CREATE SCHEMA

개념 물리적인 데이터베이스 생성 논리적인 네임스페이스(스키마) 생성
사용 목적 새로운 데이터베이스를 만들 때 기존 데이터베이스 내에서 논리적인 그룹을 만들 때
적용 범위 독립적인 데이터베이스 단위 하나의 데이터베이스 내에서 관리
권한 새로운 데이터베이스를 만들 수 있는 권한 필요 현재 사용 중인 데이터베이스 내에서 사용 가

H2 데이터베이스에서는?

H2에서는 CREATE DATABASE 명령을 지원하지 않습니다.

스키마를 생성하여 데이터베이스처럼 사용

CREATE SCHEMA company;
SET SCHEMA company;
CREATE TABLE company.employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    department VARCHAR(100),
    salary DECIMAL(10,2)
);

 

3️⃣ MySQL 에서는?

MySQL(create schema 지원 x,Postgre는 둘다 지원)

  • CREATE DATABASE 사용 → CREATE SCHEMA는 CREATE DATABASE와 동일하게 동작
  • USE database_name; 으로 데이터베이스 선택 후 테이블 생성

 

어떤 이점이 있어서 굳이 CREATE SCHEMA를 사용하는 걸까?

결론 : 논리적인 데이터 분리를 통해 관리와 보안성을 높이고, 유지보수를 쉽게 하기 위함

1️⃣ 여러 개의 스키마로 논리적인 데이터 분리

  • 하나의 데이터베이스 내에서 여러 개의 스키마를 만들어 서로 다른 데이터 그룹을 분리할 수 있습니다.
  • 예를 들어, company 데이터베이스 내에서:
     
     
    이렇게 하면 sales, hr, finance 같은 개별적인 네임스페이스를 가지게 되어 테이블이 섞이는 것을 방지할 수 있습니다.
CREATE SCHEMA sales;
CREATE SCHEMA hr;

CREATE TABLE sales.orders (
    order_id INT PRIMARY KEY,
    customer_name VARCHAR(255),
    total_amount DECIMAL(10,2)
);

CREATE TABLE hr.employees (
    emp_id INT PRIMARY KEY,
    name VARCHAR(255),
    department VARCHAR(100)
);

📌 2️⃣ 동일한 테이블명을 사용할 수 있음

  • 스키마가 다르면 같은 테이블명을 사용할 수 있습니다.
     
    • sales.employees와 hr.employees는 다른 데이터를 저장하는 테이블이지만, 같은 employees라는 테이블명을 사용할 수 있습니다.
    • 스키마를 사용하지 않으면 이런 경우 테이블명이 충돌합니다.
CREATE TABLE sales.employees (
    id INT PRIMARY KEY,
    name VARCHAR(255),
    sales_amount DECIMAL(10,2)
);

CREATE TABLE hr.employees (
    id INT PRIMARY KEY,
    name VARCHAR(255),
    department VARCHAR(100)
);

📌 3️⃣ 보안 및 권한 관리 용이

  • 스키마 단위로 권한을 부여할 수 있어서 부서별 또는 사용자별 접근 제한을 걸 수 있습니다.
     
    • hr_user는 hr 스키마의 데이터만 조회할 수 있고, finance 데이터는 변경할 수 없습니다.
GRANT SELECT ON SCHEMA hr TO hr_user;
REVOKE INSERT, UPDATE, DELETE ON SCHEMA finance FROM hr_user;

📌 4️⃣ 유지보수 및 관리 편리

  • 여러 팀이 같은 데이터베이스를 사용하더라도, 각 팀별 스키마를 나누면 유지보수가 쉬워집니다.
  • 예를 들어, sales 부서의 테이블만 백업하거나 삭제하려면 sales 스키마만 조작하면 됩니다.
     
    • CASCADE 옵션을 사용하면 해당 스키마 내의 모든 테이블과 데이터도 함께 삭제됩니다.
DROP SCHEMA sales CASCADE;

📌 5️⃣ 개발과 테스트 환경 분리 가능

  • dev, test, prod 스키마를 따로 두어 개발 환경과 운영 환경을 구분할 수 있습니다.
     
    • dev.users, test.users, prod.users 각각 다른 환경에서 사용할 수 있어 데이터 충돌을 방지할 수 있습니다.
CREATE SCHEMA dev;
CREATE SCHEMA test;
CREATE SCHEMA prod;

결론

장점설명

논리적 데이터 분리 같은 데이터베이스 내에서 데이터를 명확히 분리 가능
동일한 테이블명 사용 가능 서로 다른 스키마에서 같은 테이블명 사용 가능
보안 및 권한 관리 특정 사용자에게 특정 스키마 접근 권한만 부여 가능
유지보수 편리 특정 부서/팀의 데이터만 삭제 또는 백업 가능
개발 및 운영 환경 분리 dev, test, prod 스키마를 활용한 환경 구분 가능

💡 즉, CREATE SCHEMA를 사용하면 데이터베이스를 보다 체계적으로 관리할 수 있습니다!

 

 

어떤 이점이 있어서 굳이 CREATE database를 사용하는 걸까?

결론 : 서로 다른 애플리케이션/프로젝

📌 CREATE DATABASE 사용이 적합한 경우

1️⃣ 독립적인 데이터베이스 환경을 구성할 때

  • 서로 다른 애플리케이션 또는 시스템이 독립적으로 데이터를 저장하고 관리해야 할 때, 각 애플리케이션을 별도의 데이터베이스로 설정합니다.
  • 예:
    • 애플리케이션 A와 애플리케이션 B가 각각 서로 다른 데이터베이스를 사용해야 할 경우
    • **CREATE DATABASE app_a_db;**와 **CREATE DATABASE app_b_db;**로 각각 독립된 데이터베이스를 만들 수 있습니다.

2️⃣ 보안상의 이유로 데이터베이스 분리 필요할 때

  • 보안 요구사항에 따라 중요한 데이터와 일반 데이터를 분리해야 할 경우, 데이터를 완전히 다른 데이터베이스에 저장합니다.
  • 예를 들어, 금융 시스템일반 웹 서비스에서 사용하는 데이터를 각각 다른 데이터베이스로 분리하여 보안 강화를 할 수 있습니다.
    • 중요한 데이터는 독립된 데이터베이스에 저장하여 권한 관리가 용이하도록 할 수 있습니다.

3️⃣ 서버 리소스를 분리하고자 할 때

  • 한 서버 내에서 여러 데이터베이스를 운영하며 각 데이터베이스가 서로 독립적으로 서버 리소스를 사용하게 하고자 할 때.
  • 데이터베이스에 큰 차이가 있다면, 하나의 서버에서 여러 데이터베이스를 독립적으로 관리하면서 각 데이터베이스의 성능을 개별적으로 최적화할 수 있습니다.

4️⃣ 백업, 복원, 유지보수를 독립적으로 진행할 때

  • 각 데이터베이스를 독립적으로 백업, 복원, 업데이트 등 유지보수 작업을 해야 할 경우 CREATE DATABASE를 사용하여 데이터베이스를 구분할 수 있습니다.
    • 예: 운영 환경과 개발 환경을 별도의 데이터베이스로 설정하여 관리할 때.

5️⃣ 대규모 시스템에서 데이터베이스 분리가 필요한 경우

  • 대규모 시스템에서 다양한 모듈별로 데이터베이스를 분리하여 관리하는 경우.
  • 예를 들어, 사용자 관리, 결제 시스템, 상품 관리 등 각 기능에 대해 별도의 데이터베이스를 사용할 수 있습니다.
    • CREATE DATABASE users_db;, **CREATE DATABASE payments_db;**처럼 데이터를 독립적으로 관리할 수 있습니다.

📌 CREATE DATABASE를 사용하지 않는 경우 (H2 예시)

  • 작은 규모의 애플리케이션이나 단일 프로젝트에서 여러 테이블을 하나의 데이터베이스 내에서 관리할 경우 CREATE SCHEMA만으로 충분합니다.
    • 예: 한 애플리케이션 내에서 여러 팀(세일즈, 인사 등) 데이터를 관리할 때 CREATE SCHEMA로 구분하면 됩니다.
    • H2처럼 작고, 임시적이거나 실험적인 프로젝트에서는 별도의 CREATE DATABASE 명령어가 필요하지 않음.

결론

CREATE DATABASE는 다음과 같은 경우에 사용하는 것이 적합합니다:

  1. 독립적인 데이터베이스 환경을 만들고자 할 때
  2. 보안이나 리소스 분리를 위해 각 데이터베이스를 분리할 때
  3. 백업, 복원, 유지보수를 독립적으로 관리해야 할 때
  4. 대규모 시스템에서 데이터베이스를 나누어 관리할 때

따라서 여러 데이터베이스를 독립적으로 운영해야 할 경우에 적합하고, H2와 같은 경우 작은 시스템에서 여러 스키마로 관리할 수 있다는 점을 고려해야 합니다.

트에서 각각 별도의 데이터베이스를 운영해야 할 경우에 사용 적합