바로가기
데이터베이스(Database)
- 데이터의 저장소, 여러 사람에 의해 공유되어 사용될 목적으로 통합되어 관리되는 데이터의 집합이다
- 통합된 데이터(Integrated Data) : 자료의 중복을 배제한 데이터의 집합
- 저장된 데이터(Stored Data) : 컴퓨터가 접근할 수 있는 저장매체에 저장된 데이터
- 운영 데이터(Operational Data) : 조직의 고유 업무를 수행하는 데 존재 가치가 확실하고 없어서는 안될 필수 데이터
- 공용 데이터(Shared Data) : 여러 응용 시스템들이 공동으로 소유하고 유지하는 데이터
데이터베이스 특징
- 실시간 접근성(Real-Time Accessbility) : 비정형적인 질의(조회)에 대해 실시간 처리에 의한 응답이 가능해야 한다.
- 내용에 의한 참조(Content Reference): 데이터를 참조할 때 데이터 레코드의 주소나 위치에 의해서가 아닌, 사용자가 요구하는 데이터 내용으로 데이터를 찾는다.
- 동시공용(Concurrent Sharing) : 데이터베이스는 여러 사용자를 위한 것으로, 다수의 사용자가 동시에 같은 내용의 데이터를 이용할 수 있어야 한다.
- 지속적인 변화(Continuous Evolution) : 데이터베이스의 상태는 동적으로, 데이터의 삽입, 삭제, 갱신으로 항상 최신의 데이터를 유지한다.
데이터베이스 시스템 구성요소
- 데이터베이스
- 스키마
- DBMS(데이터베이스 관리 시스템)
- 데이터베이스 언어
- 데이터베이스 컴퓨터
- 데이터베이스 사용
데이터베이스 설계
- 조직 구성원의 다양한 요구사항을 고려한 데이터베이스를 구축하기 위해서는 요구사항 분석과 분석 결과를 바탕으로 데이터베이스의 논리, 물리적 구조를 제대로 설계하는 것이 중요하다.
- 설계 단계로는 크게 요구사항 분석, 개념적 설계, 논리적 설계, 물리적 설계, 구현이 있다.
단계
- 요구사항 분석 : 데이터베이스의 용도 파악, 요구 사항 명세
- 개념적 설계 : DBMS에 독립적인 개념적 구조 설계, 개념적 스키마(E-R 다이어그램) 작성
- 논리적 설계 : DBMS에 적합한 논리적 구조 설계, 논리적 스키마(릴레이션 스키마) 작성
- 물리적 설계 : DBMS로 구현 가능한 물리적 구조 설계, 물리적 스키마 작성
- 구현 : SQL 문을 작성한 후 이를 DBMS에서 실행하여 데이터베이스 생성
스키마(Schema)
- 데이터의 구조와 제약조건에 대한 전박적인 명세를 기술한 메타데이터의 집합이다.
- 데이터베이스를 구성하는 데이터 개체, 속성, 관계 및 데이터 조작 시 데이터 값들이 갖는 제약 조건 등에 관해 전반적으로 정의한다.
- 사용자 관점에 따라 스키마가 구분된다.
- 구성 관점으로는 외부 스키마, 개념 스키마, 내부 스키마로 나누어지며, 설계 관점으로는 개념적 설계(개념 스키마), 논리적 설계(논리 스키마), 물리적 설계(내부 스키마)로 나뉘어진다.
스키마 특징
- 데이터 사전에 저장되며, 다른 이름으로 메타데이터라고도 한다.
- 현실 세계의 특정한 한 부분의 표현으로 특정 데이터 모델을 이용해 만들어진다.
- 시간에 따라 불변인 특성을 갖는다.
- 데이터의 구조적 특성을 의마하고, 인스턴스에 의해 규정된다.
외부스키마(External Schema)
- 사용자나 응용프로그래머가 각 '개인의 입장에서 필요로 하는 데이터베이스의 논리적 구조'를 정의한 것이다.
- 전체 데이터베이스의 한 논리적인 부분으로 볼 수 있으며, '서브스키마'라고도 한다.
- 하나의 데이터베이스 시스템에는 여러 개의 외부스키마가 존재할 수 있고, 하나의 외부스키마를 여러 응용 프로그램 사용자가 공용할 수 있다.
개념스키마(Conceptual Schema)
- 데이터베이스의 '전체적인 논리적 구조'로서, 모든 응용 프로그램이나 사용자들이 필요로 하는 데이터를 종합한 조직 전체의 데이터베이스로 하나만 존재한다.
- 개념 스키마는 개체간의 관계와 제약 조건을 나타내고 데이터베이스의 접근 권한, 보안 및 무결성 규칙에 관한 명세를 정의한다.
- 단순히 스키마라 하면 개념 스키마를 의미한다.
- DBA에 의해서 구성된다.
내부스키마(Internal Schema)
- '물리적 저장장치의 입장에서 본 데이터베이스 구조'로, 물리적인 저장장치와 밀접한 계층이다.
- 실제로 데이터베이스에 저장될 레코드의 물리적인 구조를 정의하고, 저장 데이터 항목의 표현방법, 내부 레코드의 물리적 순서등을 나타낸다.
- 시스템 프로그래머나 시스템 설계자가 보는 관점의 스키마이다.
DBMS(데이터베이스 관리 시스템)
- 데이터베이스를 조작하는 소프트웨어이다.
- 데이터베이스를 관리하며 사용자들이 데이터베이스를 공유하고 사용할 수 있는 환경을 제공한다.
- 데이터베이스를 구축하는 틀을 제공하고 검색 및 저장하는 기능을 제공한다.
- 데이터베이스에 접근할 수 있는 인터페이스를 제공하며, 복구 기능과 보안성 기능을 제공한다.
- 자료의 통합성을 증진시키고 데이터의 접근이 용이하며, 유지보수 측면에서 효율적이라는 장점이 있다.
- 고비용이고 중앙 집중 관리로 취약점이 존재할 수 있으며, 백업과 복구 방법이 복잡하다는 단점이 있다.
- Oracle, MySQL, MSSQL, MariaDB 등이 있다.
DBMS 기능
- 정의 : 데이터에 대한 형식, 구조, 조건들을 정의하는 기능이다. 정의 및 설명은 카탈로그나 사전형태로 저장된다.
- 저장 : 기억장치에 데이터를 저장하는 기능이다.
- 보안 : 하드웨어나 소프트웨어의 오류 또한 권한이 없는 접근으로부터 시스템을 보호한다.
- 공유 : 여러 사용자와 프로그램이 데이터베이스에 접근할 수 있도록 공유한다.
- 기능 : 데이터의 검색을 위한 질의나 데이터베이스의 갱신, 생성 등의 기능을 포함한다.
- 유지 : 요구사항의 변화에 따라 반영할 수 있도록 하는 기능이다.
데이터베이스 언어
- 데이터베이스 언어란 컴퓨터의 데이터베이스 작업을 위한 언어이다.
- 데이터베이스 언어를 통해서 데이터베이스에 접근할 수 있다.
SQL(Structured Query Language)
- SQL은 데이터베이스로부터 요청(질의)를 하고 결과를 받는 언어로 질의어라고 불린다.
- SQL은 데이터베이스 언어와 동의어는 아니다. 데이터베이스 언어의 개념은 순수하게 검색 이상의 기능을 포함하며, SQL은 데이터베이스 이외의 영역에서도 사용할 수 있기 때문이다.
- SQL 문법은 크게 DDL, DML, DCL, TCL로 나뉘어진다.
DDL(Data Definition Language) : 데이터 정의 언어
- 데이터를 정의하는 언어로, 데이터의 전체적인 구조나 골격을 결정하는 역할을 한다.
- 구조를 결정하는 것이기 때문에 어떤 데이터베이스, 스키마, 테이블이 필요한지를 설계한다.
- 전체적인 구조를 CREATE(생성), ALTER(수정), DROP(삭제), TRUNCATE(초기화) 시키는 역할을 한다.
DML(Data Manipulation Language) : 데이터 조작 언어
- 데이터를 조작하는 언어로, 구조가 아닌 테이블 안에 있는 데이터를 조작하는 역할을 한다.
- 데이터를 SELECT(조회), INSERT(추가), UPDATE(수정), DELETE(삭제) 하는 역할을 한다.
DCL(Data Control Language) : 데이터 제어 언어
- 데이터를 제어하는 언어이다. 데이터에 대한 무결성 유지, 병행 수행 제어, 보호와 관리를 위한 언어이다.
- 데이터를 COMMIT(반영), ROLLBACK(취소) 하는 역할이 있으며, 이를 통해 무결성 유지, 병행 수행 제어 등의 기능을 수행할 수 있다. 이는 TCL로도 분류된다.
- 데이터를 사용할 수 있는 권한을 부여(GRANT), 제거(REVOKE) 하는 역할을 한다.
- 권한으론느 CONNECT, SELECT, INSERT, UPDATE, DELETE, USAGE 등이 있다.
TCL(Transaction Control Language) : 트랜잭션 제어 언어
- 트랜잭션을 제어하는 언어로, 트랜잭션은 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위을 한다.
- 수정한 작업을 데이터베이스에 반영(COMMIT), 취소(ROLLBACK), 특정 지점으로 되돌리는(SAVEPOINT) 의 역할을 한다.
트랜잭션의 특징
- 트랜잭션은 트랜잭션은 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위이며, 크게 4가지 Atomicity, Consistency, Isolation, Durability 의 특징을 갖는다.
- 원자성(Atomicity) : 트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 모두 반영되지 않아야 한다는 것이다.
- 일관성(Consistency) : 트랜잭션의 작업 처리 결과가 항상 일관성 있어야 한다는 것이다.
- 독립성(Isolation) : 둘 이상의 트랜잭션이 실행되고 있을 경우, 어떤 하나의 트랜잭션이라도, 다른 트랜잭션의 연산에는 끼어들 수 없다는 특징이다.
- 영속(Durability) : 트랜잭션이 성공적으로 완료된 경우, 결과는 영구적으로 반영되어야 한다는 점이다.
데이터베이스 사용
- 데이터베이스 사용을 위해서는 적절한 SQL문을 사용해야 하며, 관련 기능을 알아야 한다.
데이터베이스 생성, 삭제
-- 생성
CREATE DATABASE DB_NAME;
-- 삭제
DROP DATABASE DB_NAME;
테이블 생성, 삭제
-- 생성
CREATE TABLE TB_NAME(
COL\_NAME TYPE CONSTRAINT,
...
);
-- 삭제
DROP TABLE TB_NAME;
컬럼 추가, 삭제, 변경
-- 추가
ALTER TABLE TB_NAME
ADD COL_NAME TYPE;
-- 삭제
ALTER TABLE TB_NAME
DROP COLUMN COL_NAME;
-- 변경
ALTER TABLE TB_NAME
ALTER COLUMN COL_NAME TYPE;
데이터 조회, 추가, 삭제, 변경
-- 데이터 조회
SELECT COL_NAME
FROM TB_NAME
WHERE 1=1;
-- 데이터 추가
INSERT INTO TB_NAME
VALUES(A,B,C);
-- 데이터 삭제
DELETE FROM TB_NAME
WHERE COL_NAME = 1;
-- 데이터 변경
UPDATE TB_NAME
SET COL_NAME = 1
WHERE COL_NAME = 2;
SELECT 쿼리의 수행 순서
FROM, JOIN, ON > WHERE, GROUP BY, HAVING > SELECT > DISTINCT > ORDER BY > LIMIT
- FROM : 각 테이블을 확인한다.
- ON : JOIN의 조건을 확인한다.
- JOIN : JOIN이 실행되어 데이터가 SET으로 모아지고, 서브쿼리도 함께 포함되어 임시 테이블을 만들 수 있게 도와준다.
- WHERE : 개별 행에 조건을 적용하며 필요한 데이터를 찾는다.
- GROUP BY : 지정된 열의 공통 값을 기준으로 그룹화 한다.
- HAVING : 그룹화된 행에 조건을 적용한다.
- SELECT : 원하는 자료를 조회한다.
- DISTINCT : 조회된 자료에서 중복된 행을 제거한다.
- ORDER BY : 조회된 자료를 조건에 맞게 정렬한다.
- LIMIT : LIMIT에 설정된 행만큼만 결과로 출력한다.
INNER JOIN 과 OUTER JOIN 차이
- Inner Join 은 서로 연관된 내용만 검색하는 조인 방법이다. (교집합을 의미)
- Outer Join 은 한 쪽에는 데이터가 있고 한 쪽에는 데이터가 없는 경우, 데이터가 있는 쪽의 내용을 전부 출력하는 방법이다. (합집합을 의미)
인덱스(Index)
- 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다.
- 인덱스는 항상 정렬된 상태를 유지하기 때문에 원하는 값을 검색하는데 빠르지만, 새로운 값을 삽입, 삭제, 수정하는 경우에는 실행 속도가 느려질 수 있다.
- DBMS의 인덱스는 B+Tree 인덱스 자료구조와 해시 테이블을 이용한 방법이 있다.
B+Tree 인덱스 자료구조
- B-Tree를 개선시킨 자료구조로, B-Tree 리프노드들을 LinkedList로 연결하여 순차 검색을 용이하게 한 것이다.
- 해시 테이블보다 시간복잡도 부분에서 성능이 안좋지만 일반적으로 사용되는 자료구조이다.
해시 테이블
- 컬럼의 값으로 생성된 해시를 기반으로 인덱스를 구현한다.
- 시간복잡도는 O(1)로 검색이 매우 빠르다.
- 연속적인 데이터를 위한 순차 검색(부등호, BETWEEN 등)이 불가능하기 때문에 사용에 적합하지 않는 부분이 있다.
트리거(Trigger)
- 트리거는 특정 테이블에 대한 이벤트에 반응해 자동으로 동작하도록 작성된 프로그램이다.
- 사용자가 직접 호출하는 것이 아닌, 데이터베이스에서 자동적으로 호출한다는 것이 가장 큰 특징이다.
이상현상
- 이상현상은 테이블의 설계 단계에서 잘못된 설계로 인해 데이터를 삽입, 삭제, 수정할 때 생기는 논리적인 오류를 뜻한다.
- 이상현상을 예방하고 효과적인 연산을 위해서 데이터 정규화를 하기도 한다.
- 이상현상의 종류로는 삽입이상, 삭제이상, 갱신이상이 있다.
- 삽입이상(Insertion Anomaly) : 자료를 삽입할 때 특정 속성에 해당하는 값이 없어 NULL을 입력해야 하는 현상
- 갱신이상(Modification Anomaly) : 중복된 데이터 중 일부만 수정되어 데이터 모순이 일어나는 현상
- 삭제이상(Deletion Anomaly) : 어떤 정보를 삭제하면, 의도하지 않게 다른 정보까지 삭제되는 현상
SQL Injection
- SQL Injection은 공격자가 악의적인 의도를 갖는 SQL 구문을 삽입하여 데이터베이스를 비정상적으로 조작하는 코드 인젝션 공격 기법이다.
- 이를 방지하기 위해서는 입력값이 개발자가 의도한 값(유효값) 인지 검증한다.
- 저장 프로시저를 사용해 사용하고자 하는 쿼리의 형식을 지정하여 의도치 않는 실행은 막는다.
RDBMS 와 NoSQL
RDBMS
- 데이터를 2차원 테이블 형태로 표현한다.
- 장점으로는 스키마에 맞춰 데이터를 관리하여 데이터의 정합성을 보장할 수 있다.
- 단점으로는 시스템이 커질수록 쿼리가 복잡해지고 성능이 저하되며 Scale-out이 어렵다는 점이 있다.
NoSQL
- RDMS와 반대로 데이터간의 관계를 정의하지 않고, 스키마가 없어 좀 더 자유롭게 데이터를 관리할 수 있으며, 컬렉션이라는 형태로 데이터를 관리한다.
- 장점으로는 스키마 없이 Key-Value 형태로 데이터를 관리해 자유롭게 데이터를 관리할 수 있고, 데이터 분산이 용이하여 성능 향상을 위한 Scale-up, Scale-out 이 가능하다.
- 단점으로는 데이터의 중복이 발생할 수 있고, 중복된 데이터가 변경될 경우 수정을 모든 컬렉션에서 수행해야 한다. 또한 스키마가 존재하기 않기에 명확한 데이터 구조를 보장하지 않아 데이터 구조 결정이 어려울 수 있다.
RDBMS와 NoSQL 선택 기준
- RDBMS : 데이터 구조가 명확하고, 변경될 여지가 적으며 스키마가 중요한 경우 사용하는 것이 좋다.
- NoSQL : 정확한 데이터 구조를 알 수 없고 데이터가 변경/확장 될 수 있는 경우, 그리고 중복된 데이터가 변경될 경우 수정을 모든 컬렉션에서 수행해야하기에 단순 조회 업무만을 수행한다면 사용을 고려해보는 것이 좋다.
DB Lock
- DB Lock은 트랜잭션 처리의 순차성을 보장하기 위한 방법이다.
- 공유락(Shared Lock) Read Lock이라고도 하는 공유락은 트랜잭션이 읽기를 할 때 사용하는 락이며, 데이터를 조회만하기 때문에 같은 공유락은 동시 접근이 가능하다.
- 배타락(Exclusive Lock) Write Lock이라고도 하는 배타락은 데이터를 변경할 때 사용하는 락이며, 트랜잭션이 완료될 때까지 유지되며, 배타락이 끝나기 전까지 어떠한 접근도 허용하지 않는다.
Elastic Search의 키워드 검색과 RDBMS의 LIKE 검색의 차이
- RDMS는 단순 텍스트매칭에 대한 검색만을 제공해 동의어나 유의어 같은 검색은 불가능하다.
- MySQL 최신 버전에서 n-gram 기반의 Full-Text 검색을 지원하긴 하지만, 한글 검색의 경우 아직 부족한 점이 있다.
- Elastic Search는 동의어나 유의어를 활용한 검색이 가능하며, 비정형 데이터의 색인과 검색이 가능하고, 역색인 지원으로 매운 빠른 검색이 가능하다.
옵티마이저(Optimizer)
- 옵티마이저는 SQL을 빠르고 효율적으로 수행할 최적의 처리 경로를 생성해주는 DBMS 내부의 핵심 엔진이다.
- 컴퓨터의 CPU역할을 DBMS에서 옵티마이저가 한다고 생각하면 편하다. 개발자가 SQL을 작성하고 실행하면 즉시 실행되는 것이 아니고, 옵티마이저에서 여러 실행 계획을 세우고, 최고의 효율을 갖는 실행계획을 판별한 후 그 실행계획에 따라 쿼리를 수행하는 것이다.
DB 튜닝
- DB 튜닝이란 DB의 구조나, DB 자체, 운영체제 등을 조정해 DB 시스템의 성능을 개선하는 작업이다.
- 튜닝은 DB 설계 튜닝 -> DMBS 튜닝 -> SQL 튜닝 단계로 진행한다.
- DB 설계 튜닝 (모델링 관점)
- DB 설계 단계에서 성능을 고려하여 설계
- 데이터 모델링, 인덱스 설계
- 데이터 파일, 테이블 스페이스 설계
- 데이터베이스 용량 산정
- 튜닝 사례 - 반정규화, 분산파일배치
- DBMS 튜닝 (환경 관점)
- 성능을 고려하여 메모리나 블록 크기 지정
- CPU, 메모리 I/O에 관한 관점
- 튜닝 사례 - Buffer 크기, Cache 크기
- SQL 튜닝(App 관점)
- SQL 작성 시 성능 고려
- Join, Indexing, SQL Excution Plan
- 튜닝 사례 - Hash / Join
[참고 사이트]
잘못된 내용은 알려주시면 감사하겠습니다.
'TIL' 카테고리의 다른 글
[Database] 데이터 모델과 성능 (0) | 2023.08.02 |
---|---|
[Database] SQL 활용 (0) | 2023.08.02 |
[Database] 데이터 모델링의 이해 (0) | 2023.08.02 |
[Database] SQL 기본 (1) | 2023.08.02 |
[JavaScript] V8 엔진 (1) | 2023.08.01 |