Oracle과 MySQL의 계층구조 차이

JangDongyul·2022년 2월 14일
0

ANSI 표준 SQL과

DBMS로 많이 사용되는 Oracle, MySQL의

계층구조 차이에 대해 말씀드리려고 합니다.

필요한 배경지식

초록색 문장들은 인용 출처 링크를 걸어놓았으니, 한번 들어가보시길 권장합니다

1. DBMS

  1. DBMS(DataBase Management ystem)는 다수의 사용자들이 DB(DataBase) 내의 데이터에 접근할 수 있도록 해주는 소프트웨어입니다.
  2. DB를 관리하는 소프트웨어인 DBMS는 ORACLE, MySQL.. 등등 제작사마다 다양합니다.
  3. 그런데, 이 DBMS들이 다른 SQL을 사용합니다

2. SQL

  1. SQL(Structured Query Language)은 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어입니다.
  2. 그래서 미국 표준 협회 ANSI(American National Standards Institute)에서 이를 표준화하여 표준 SQL 문을 정립 시켜 놓은 것입니다.

3. 인스턴스

인스턴스는 DBMS 서버에서 프로세스와 메모리 영역입니다.
인스턴스에 대한 설명은 최용진 교수님의 유튜브 채널에 잘 설명되어 있습니다.

아래의 그림은 최용진 교수님의 강의자료를 참고해서 그림판으로 그려본 그림입니다.

원리는 이렇습니다.

  1. 유저 프로세스에서 DBMS 서버에 원하는 데이터를 요청합니다.
    예를 들어 DBMS가 오라클이면 SQL의 select from where 절을 사용하겠죠?
  2. 그러면 DMBS 서버의 서버 프로세스는 처음에는 디스크에 있는 데이터베이스(공유되어 사용될 목적으로 통합하여 관리되는 데이터의 집합)에서 데이터를 입출력할 것입니다.(DISK I/O)
  3. 그런데, 디스크까지 가서 파일을 가져오는 건 너무 비효율적입니다.
    프로세스는 CPU를 점유해야 움직이는데, 중앙처리장치인 CPU와 보조기억장치(디스크)의 거리는 매우 멀기 때문입니다.
  4. 따라서 DISK I/O가 빈번하게 발생할 수록 성능은 떨어집니다.
  5. 그래서, DBMS의 서버 프로세스는 DISK I/O를 줄이기 위해서 이미 한번 데이터베이스에서 가져온 데이터는 메인 메모리에 적재를 합니다.
  6. 다음부터는 같은 데이터를 클라이언트가 요청할 경우 메인 메모리에서 가져오니, 훨씬 효율적이게 됩니다.
    (CPU에 가까운 메모리 순서: 레지스터, 캐시, 메인메모리, 보조기억장치)

4. 스키마

서로 연관된 테이블(표)들을 grouping 하여 묶은 것을 스키마라고 합니다.
(이미지 출처: 직접 그림)

5. 테이블

테이블은 표로 생각하시면 됩니다.
행과 열로 이루어져있습니다.
(이미지 출처: 직접 작성)

자 이제 배경지식 설명은 끝났습니다

이제부터는 DBMS 의 계층구조를 말씀드리겠습니다.

1. ANSI에서 표준으로 정한 DBMS 계층구조는 4계층 구조입니다.


(이미지 출처: 직접 그림)

2. MySQL은 3계층 구조입니다.

(데이터베이스와 스키마를 동의어로 취급합니다.)


(이미지 출처: 직접 그림)

생활코딩 선생님의 MySQL 강의에서도
스키마와 데이터베이스를 동일시 하시는 걸 볼 수 있으십니다.

https://youtu.be/bzhFcbin8_g

MySQL은
1. 스키마와 데이터베이스를 동일시 하므로,
create database 문은 create schema 와 같습니다.

2. MySQL 에서는 테이블 하나를 생성할 때 테이블스페이스가 하나 생성되는 것이 Default 이므로
별도의 테이블스페이스를 만들지 않아도 됩니다.

3. MySQL 설치 후, 계정 만들시고, 데이터베이스(스키마)를 만드시고, 테이블을 만드는 순서로 하시면 됩니다.

3. ORACLE은 3계층 같은 4계층 구조입니다.

(이미지 출처: 직접 그림)

오라클은
1. 4계층을 따르는 것 같으나,
인스턴스 하나에 데이터베이스 하나만 만드는 독자적 제약이 있으므로
3계층 같은 4계층으로 볼 수 있습니다.

2. 오라클에서는 스키마와 사용자가 동일하지는 않지만 밀접한 관련이 있습니다.
정확하게는 사용자마다 관리하는 스키마가 존재하기에
오라클에서는 사용자를 생성할 때, 자동으로 스키마를 생성해줍니다.
그리고 그 스키마를 관리하는 건 바로 사용자입니다.
그래서 이 2가지는 함께 생각할 필요가 있습니다.


3. 그래서 오라클에서는 데이터베이스를 수동적으로 만들어주지 않는 이상은
테이블 스페이스 생성 -> 사용자(스키마) 생성 -> 테이블 생성 순서를 따릅니다.

4. 오라클은 MySQL과 다르게, 테이블스페이스를 자동 생성해주지 않으므로, 관리자가 직접 만들어줘야 합니다.

5. 오라클에서 create database문이 있기는 하지만, MySQL의 crate database문과는 다릅니다.
오라클에서 create database문은 인스턴스와 데이터베이스를 수동적으로 생성하는 것이고
MySQL의 create database문은 스키마를 생성하는 것입니다.
이는, 각 DBMS마다 계층 구조가 다르고, 동일시하는 영역이 다르기 때문에 생기는 차이입니다.

 


출처 및 참고 링크들입니다.
1. 저자: 이상구, 장재영, 김한준, 정재헌 교수님, 출판사: 이한미디어
데이터베이스의 이해: http://www.nicoms.co.kr/sub.html?page=book_book_info&bidx=384
2. 저자: 미크, 기무라 에이지 교수님, 역자: 박주항 교수님, 출판사: 한빛미디어
데이터베이스의 첫걸음: https://book.naver.com/bookdb/book_detail.nhn?bid=11154846
3. DATA ON-AIR: https://dataonair.or.kr/db-tech-reference/d-guide/da-guide/?mod=document&uid=300
4. 폭군길냥의 블로그: https://hue9010.github.io/db/mysql_schema/
5. 위키백과: https://ko.wikipedia.org/wiki/SQL
6. 블로그 밥출과 취미 사이:: 못 먹어도 고!: https://dejavuhyo.github.io/posts/ansi-sql/
7. 최용진 교수님: https://youtu.be/Ah9wAY8Hd9A
8. OKKY 에서 감사한 선생님의 답변: https://okky.kr/article/1158067
9. 네이버 지식백과: https://terms.naver.com/entry.naver?docId=1082446&cid=40942&categoryId=32840
10. 생활코딩 선생님:
https://youtu.be/IWEa4DN_1Yk
https://youtu.be/CRN4fRRS60E

본문 이미지 출처: 직접 그림

0개의 댓글