도순씨의 코딩일지

DB :: 데이터 정의 언어(DDL), 데이터 조작 언어(DML), SQL 질의어, 데이터베이스 설계, 데이터베이스 엔진, 데이터베이스 구조, 데이터베이스 사용자 본문

𝐂𝐎𝐌𝐏𝐔𝐓𝐄𝐑 𝐒𝐂𝐈𝐄𝐍𝐂𝐄/𝐃𝐀𝐓𝐀𝐁𝐀𝐒𝐄

DB :: 데이터 정의 언어(DDL), 데이터 조작 언어(DML), SQL 질의어, 데이터베이스 설계, 데이터베이스 엔진, 데이터베이스 구조, 데이터베이스 사용자

도순씨 2020. 9. 9. 00:00

🌼 데이터 정의 언어(Data Definition Language, DDL)

데이터 정의 언어 란, 데이터 베이스 스키마를 정의하는 구문들의 집합입니다. SQL 안에 여러 기능 중 하나이기도 합니다. 예를 들어서 다음과 같은 create table이 있다고 생각해봅시다.

 

이 create table의 이름은 instructor입니다. 형식에 대해 잠시 알아봅시다. char(5)는 문자형으로 고정된 값이 5라는 것을 알 수 있습니다. varchar(20)은 문자형 이름의 길이가 20이하라는 것을 알 수 있습니다. 마지막으로 numeric(8, 2)는 전체가 8자리이고, 소수점 아래 두 자리까지 나타냄을 의미합니다. 정리하자면, var은 숫자가 변경 가능함을 뜻하고 var이 없다면 숫자는 변경할 수 없습니다.(꼭 그 수로만 나타내야 하는 데이터입니다)

DDL 컴파일러는 instructor table에 대한 스키마 정보를 데이터 딕셔너리(System catalog) 에 저장합니다. 데이터 딕셔너리는 베타 데이터를 포함하고 있습니다. 그것은 데이터에 대한 정보인데 다음과 같은 것들이 있습니다.

 

💡 데이터베이스 스키마

💡 무결성 조건 : 고유 식별자(ex. instructor table의 고유식별자는 'name')

💡 접근 권한

 

 

🌼 데이터 조작 언어 (Data Manipulation Language, DML)

데이터에 접근하고 업데이트하기 위한 언어는 적절한 데이터 모델에 의해서 구성됩니다. DML은 질의어로도 알려져 있습니다. 데이터 조작 언어에는 크게 두 종류가 있습니다.

 

 💡절차적 DML(Procedural DML) : 어떠한 데이터가 필요하고 어떻게 그 데이터를 얻는지 방법이 명시되어야 한다. 프로그래밍 언어랑 상당히 유사한 모습을 띄고 있다.

💡 선언적 DML(Declarative DML): DB에서 '원하는 데이터를 어떠한 방식으로 검색해와라'라고 말하면 DMBS가 알아서 처리를 해줍니다.

 

선언적 DMLs은 보통 절차적 DMLs보다 학습하고 사용하기 쉽습니다. 또, non-procedural DML라고 불리기도 합니다.

 

 

🌼 SQL 질의어 (SQL Query Language)

SQL 질의어는 절차적이지 않습니다. 쿼리는 몇 가지의 테이블을 입력으로 받고 항상 하나의 테이블을 리턴합니다.

만약에 컴퓨터 과학과의 교수를 모두 골라내는 질의어를 만든다고 생각해봅시다.

 

각각의 문장을 절(clause)라고 합니다. select에서는 어떤 값을 추출할지 정합니다. from은 대상 테이블을 정의하고, 그리고 dept_name은 조건입니다. SQL을 보안하기 위해서 자바나 C와 같은 주 언어(host language)가 쓰입니다. SQL은 보조 언어(sub language)로 쓰입니다. 주언어를 SQL 호출 수준 인터페이스(SQL call level language, CLI)라고 부릅니다. 대표적으로 ODBC, JDBC가 있습니다. SQL은 DB의 데이터에 접근하기 위해서 사용합니다. SQL이 선언적 질의어로 많이 사용되지만, 그 자체로는 완전히 응용을 구현하기 쉽지 않습니다. SQL은 어플리케이션 사용자로부터 입력을 받는 것과 같은 것을 지원하지 않습니다. 계산과 같은 동작들은 주언어로 쓰여져야 합니다. 

 

 

🌼 데이터베이스 디자인(Database Design)

데이터베이스 설계는 '실세계'를 한 번에 'Table 스키마'로 바꾸는 과정이 복잡하기 때문에 여러 과정을 거칩니다. 이러한 과정은 뒤에서 더 자세하게 살펴보도록 합시다. 데이터 베이스의 구조를 설계하는 과정은 크게 두 가지로 나눌 수 있습니다.

 

첫 번째, 논리적 설계(Logical Design) 입니다. 논리적 설계는 데이터 베이스 스키마를 결정합니다. 데이터베이스 설계는 훌륭한 테이블을 필요로 합니다. 예를 들어봅시다. 비즈니스 결정을 내린다고 생각해보면 요건 분석(Requirement Analysis)를 이용하여 어떠한 데이터가 필요한지 분석해야 합니다. 이럴 때 사용되는 모델이 ER모델인데, 이는 뒤에서 살펴보도록 합시다.  다른 예로는 컴퓨터 과학 결정이 있습니다. 구체적으로 몇 개의 테이블에 속성들을 배치시키는 것이 좋은지 고민하고 있습니다.

두 번째, 물리적 설계(Physical Design) 입니다. 저장구조 상에서 데이터 베이스를 어떤 물리적 구조로 저장하는 것인지 고민해 보는 것입니다. 

 

 

🌼 데이터베이스 엔진(Database Engine)

데이터 베이스 시스템은 다음과 같이 나누어 질 수 있습니다.

 

💡 저장공간 관리자(Storage manager)

💡 쿼리 처리 구성요소

💡 거래 관리 구성요소

그럼 지금부터 요소들을 자세하게 살펴봅시다. 

 

저장공간 관리자(Storage manager) 는 데이터베이스에 저장된 낮은 단계의 데이터와 어플리케이션 프로그램 사이의 인터페이스를 제공합니다. 저장공간 관리자는 다음과 같은 일들을 실행합니다.

💡 운영체제 파일 메니저와의 상호작용 : 하지만 이것보단 자체적으로 파일 관리자는 사용하는 경우가 많습니다

💡 효율적인 저장, 데이터의 업데이트

 

저장공간 관리자는 다음과 같은 요소를 포함하고 있습니다.

 

💡 권한 요청 및 무결성 관리자

💡 거래 관리자

💡 파일 관리자

💡 버퍼 관리자

 

저장공간 관리자는 물리적 시스템 실행의 일부분인 자료 구조를 보충할 수 있습니다.

💡 데이터 파일: 데이터 베이스 스스로 데이터 파일을 저장한다.

💡 데이터 딕셔너리(사전): 데이터베이스의 구조에 관한 메타데이터를 저장한다. 

💡 데이터 베이스 목차(indices): 데이터 항목에 대한 빠른 접근을 제공할 수 있다. 데이터베이스 인덱스는 특정항목의 값에 대한 포인터라고 생각하시면 됩니다. 

 

쿼리 프로세서(Query Processor) 는 다음과 같은 요소로 구성되어 있습니다.

💡 DDL 해석기(DDL interpreter) : 쉽게 설명하자면 구문을 처리해주는 모듈입니다

💡 DML 컴파일러(DDL compiler): DB 검색과 여러 변경 처리를 수행합니다. DML 문장을 질의처리전략으로 바꿉니다. 이는 질의 최적화를 실행하는 것으로, 여러가지 방법중 가장 최적의 전략으로 평가받고 있습니다.

 

 

 🌼 쿼리 처리(Query processing)

Silberschatz, Korth and Sudarshan(2019), Database System Concept 7th Edition

쿼리를 처리하는 과정은 크게 세 과정으로 나눌 수 있습니다. 첫째, 파싱 및 번역. 둘째, 최적화. 셋째, 평가. 이러한 과정으로 이루어져 있습니다. 위 표를 참조하면 어떤 과정으로 쿼리처리가 이루어지는지 대략 알 수 있습니다.

 

은행의 송금을 예로 들어보겠습니다. 은행의 송금은 DB에서 논리적 작업에 대한 단위라 할 수 있습니다. 예를 들어서 A에서 B로 송금을 한다고 예를 들어봅시다.

 

 

A의 잔고에서 -50이 되어야 하고 B의 잔고에서는 +50의 작업이 일어나야 합니다. 따라서 DB에 대한 업데이트는 두 개가 일어납니다. 거래 관리 구성요소(Transaction-management component) 는 하나의 작업단위를 뜻합니다. 또한 시스템 실패와 고장에 대응하여 일관성을 유지하는 역할을 합니다. 동시성 통제 관리자(Concurrency-control manager) 는 동시에 접근함으로써 생기는 DB의 정확성 문제를 해결하기 위하여 만들어졌습니다. 이것은 데이터베이스의 일관성을 보장합니다. 

 

 

🌼 데이터베이스 구조(Database Architecture)

데이터 베이스를 한 눈에 살펴보면 다음과 같습니다.

Silberschatz, Korth and Sudarshan(2019), Database System Concept 7th Edition

위에서 대략적으로 살펴본 구조와 비슷하지만 그 안에 상세한 내용이 추가된 것을 알 수 있습니다. 쿼리 처리기 위에는 사용자 영역이 존재합니다. 사용자가 원하는 작업을 하면 그 아래에서 일어나는 일을 도식화한 것이라고 보면 됩니다. 

먼저 ' query processor ' 부분에서 짚어볼 부분입니다. DML queries는 DB를 검색하는 구문들입니다. DDL interpreter는 스키마 구문을 처리하는 부분입니다. create table을 정의하면 해독을 해서 스키마 정보를 데이터 딕셔너리에 저장하는 행위를 합니다. query evaluation engine은 질의의 결과를 구성하는 과정입니다. 이 아래 화살표는 질의의 결과를 얻어오는 행위를 의미합니다. 

다음으로 ' storage manager ' 부분을 살펴봅시다. 이 부분의 buffer manager는 왜 존재하는 걸까요? 바로 디스크에 DB 데이터가 있기 때문에 메모리로 데이터를 불러와야하기 때문입니다. 이 과정을 통해서 데이터가 메모리에 적재됩니다. 제한된 공간이므로 효율적 사용을 할 필요가 있습니다. 

마지막으로 ' disk storage ' 파트를 봅시다. 데이터는 실질적 내용을 포함하고 있고 indices는 효율적 검색을 지원합니다. 데이터베이스는 대용량 데이터를 포함하고 있기 때문에 indices는 핵심적 요소라 할 수 있습니다. data dictionary는 스키마 정보와 메타 데이터를 저장하는 곳입니다.

 

🌼 데이터베이스 사용자(Database Users)

데이터베이스 사용자는 크게 네 종류로 나눌 수 있습니다.

첫째, naive users 입니다. 이들은 대부분의 사용자로, 창구직원, 웹 사용자 등입니다. 둘째, 응용개발자입니다. 이들은 DB 프로그래밍과 SQL 모두에 능숙해야 합니다. 셋째, 분석가입니다. 이들은 SQL에만 능숙해도 상관 없습니다. 마지막으로 데이터베이스 관리자입니다. 이 사람들은 DB를 전체적으로 관리하는 역할을 합니다. 영어로는 DBA(Database Administrator)라고도 합니다. 이들에 대해서 조금 더 자세하게 알아봅시다. 데이터 베이스 관리자는 다음과 같은 역할을 수행합니다.

 

💡 논리적 스키마 정의

💡 저장 구조와 접근 방법 정의

💡 물리적 레벨에서의 저장 구조와 접근 방법을 정의

💡 접근 권한 부여 

💡 백업 수행

💡 디스크 여분 공간 유지

💡 성능 모니터링  

Comments