본문 바로가기

[Kotlin&Spring] 5기 내일배움캠프

[Kotlin&Spring] 5기 관계형 데이터 베이스와 SQL

강의 중에 데이터베이스를 배웠다

앞으로 과제를 수행하면서 MySQL을 사용할 예정이다

MySQL은 관계형 데이터 베이스 시스템이기 때문에 RDB에 대해 다뤄보고자한다

 

 

Database란 여러 사람이 공유하고 사용할 목적으로 한 곳에서 관리되는 데이터의 조직화된 집합이다
데이터를 소프트웨어에서 효율적으로 관리하기 위한 저장소이다

 

데이터베이스의 종류는 크게 관계형데이터베이스(RDB)와 그 외에 NoSQL(Not only Structured Query Language)을 사용하는 데이터베이스로 나눌 수 있다

*NoSQL은 비정형데이터(사전 정의된 데이터 모델 혹은 일관적 구성이 없는 데이터), 반정형데이터(데이터의 형식과 구조가 변경될 수 있는 데이터)를 수집, 저장 조회하는데 사용되는 데이터베이스를 말한다


RDB(Relational Database) 관계형 데이터베이스은 관계형 데이터 모델을 기초로 두고 모든 데이터를 2차원 테이블 형태로 표현하는 데이터베이스이다
구성된 테이블이 다른 테이블들과 관계를 맺고 모여있는 집합체이다
데이터의 독립성이 높으며 고수준의 데이터 조작언어(DML(Data Manipulation Language))을 사용하여 결합, 제약, 투영 등의 관계 조작에 의해 비약적으로 표현능력을 높일 수 있다
또한 DML에 의해 자요롭게 구조를 변경할 수 있다


DBMS(Database Management System)는 Databese를 관리하고 운영하는 시스템을 말한다
데이터를 정의, 저장, 검색, 수정, 삭제하는 등의 작업을 효율적으로 수행할 수 있게 한다
다수의 사용자들이 동시에 데이터에 접근하고 데이터를 안전하게 관리할 수 있도록 다양한 기능을 제공한다

RDBMS(Relational Database Management System)는 사용자의 요구에 따라 정보를 생성해 관계형 데이터베이스를 생성하고 수정하고, 관리할 수 있는 소프트웨어이다
데이터를 2차원 테이블 형태로 구조화하여 저장하고 관리한다
테이블 구조는 행(row)과 열(column)으로 구성된다
열은 데이터의 속성(유일한 이름)을 나타내고 타입(데이터 유형)을 갖는다
행은 관계된 데이터의 묶음을 의미하고 tuple/record 라고 한다
무결성이라는 특징을 가지는데 RDBMS는 특정 규칙과 제약조건(PK, FK, UK 등)을 통해 데이터를 저장함으로써 데이터의 무결성(정확성, 일관성, 유효성)을 유지한다
PK(Primary Key), 기본키는 테이블 내에서 각 행을 고유하게 식별하는 열 또는 열의 조합이다

중복과 NULL을 허용하지 않는데 그 이유는 RDBMS가 데이터를 찾을 떄 binary 탐색 방법으로 찾는데 그 때 사용되기 때문이다
FK(Foreign Key,) 유일키는 한 테이블의 열이 다른 테이블의 기본 키를 참조하여 두 테이블 간의 관계를 설정하는 데 사용되며 이를 통해 테이블 간의 데이터 무결성을 유지할 수 있다
보통은 PK가 FK로 쓰이며 테이블 간 공통적으로 갖는 컬럼명이다
foreign key를 이용해 테이블간 join이 가능하지만 외래 키 말고 다른 컬럼으로도 관계 만들기가 가능하다
UK(Unique Key), 유일키는 하나의 테이블에서 여러 개 존재할 수 있다

중복은 허용하지 않지만 NULL  값은 허용한다  
RDBMS는 테이블 간의 관계를 이용해 데이터를 연결한다

RDB Schema 예시


테이블 간 관계는 외래 키(Foreign Key)를 통해 설정되는데, RDBMS는 key들을 이용해 위 그림과 같 다양한 유형의 관계를 지원한다
1:1 관계: 한 테이블의 한 행이 다른 테이블의 한행과만 연결된다
1:다 관계: 한 테이블의 한 행이 다른 테이블의 여러 행과 연결된다
다:다 관계: 두테이블의 여러 행이 서로 연결될 수 있다

Transaction은 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위이다
데이터를 제어하는 언어 또는 데이터를 처리하고 전송하는 일련의 작업이다
사용자에게 transaction은 작업의 논리적 단위이다
시스템에게 transaction은 데이터들을 접근 또는 변경하는 프로그램의 단위이다

하나의 데이터에 여러 transaction이 작용하면서 문제가 발생할 수 있으므로 ACID 원칙을 지킨다 

Transaction Status

 

ACID(Atomicity, Consistency, Isolation, Durability)
1. 원자성(Atomicity)
트랜잭션의 모든 작업을 완료함 또는 모든 작업 완료되지 않음의 두 가지의 상태만 보장한다
트랜잭선 로그를 통해 관리한다

작업 실패이 실패하고 시스템 완료되지 않은 상태를 인식하면 일관된 상태로 복원(ROLLBACK)한다
*ROLLBACK: 하나의 트랜잭션 처리가 비정상적으로 종료되어 트랜잭션의 원자성이 깨진 경우, 트랜잭션을 처음부터 다시 시작하거나 트랜잭션의 부분적으로만 연산된 결과를 취소한다
2. 일관성(Consistency)
트랜잭션이 데이터베이스를 하나의 일관된 상태에서 다른 일관된 상태로의 전환을 요구한다
무결성 규칙이 위반되지 않는 것을 보장한다
3. 격리(isolation)
동시 트랜잭션 내의 작업이 완료될 떄까지 서로에게 보이지 않도록 보장한다

트랜잭션 충돌과 데이터 불일치를 방지한다
4. 내구성(Durability)
트랜잭션이 COMMIT 되면 시스템 장애가 발생하더라도 변경 사항이 지속되는 것을 보장한다
*COMMIT: 하나의 트랜잭션이 성공적으로 끝났고, 데이터베이스가 일관성 있는 상태에 있을 때 하나의 트랜잭션이 끝났다는 것을 알려준다

또한 수행했던 트랜잭션 로그에 저장되어 ROLLBACK 연산에 도움을 준다
일반적으로 write-ahead 로깅 및 버퍼 관리 같은 매커니즘을 통해 달성되며 디스크에 변경사항을 기록한다

SQL(Structured Query Language)은,
RDBMS의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다
자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터베이스 객체 접근 조정 관리를 위해 고안되었다
*스키마란 데이터베이스에 저장되는 데이터 구조와 제약조건을 정의한 것이다
예를들면 스키마 : 데이터베이스 : 테이블 = 평면도 : 집 : 방 과 같은 구조로 이해할 수 있다
데이터를 생성(Create), 읽기(Read), 갱신(Update), 삭제(Delete)하는 작업을 수행한다
대부분의 RDBMS(MySQL, PostgreSQL, Oracle 등)가 SQL을 지원한다

SQL의 종류
1. DDL(Data Definition Language) 데이터 정의어
테이블과 같은 데이터의 구조를 정의한다
데이터를 생성, 수정 삭제 등의 데이터 전체의 골격을 결정한다
데이터베이스, 테이블등을 생성하는 역할을 한다
ex) CREATE, ALTER, DROP 등
2. DML(Data Manipulation Language) 데이터 조작어
정의된 데이터베이스에 입력된 레코드를 조회하거나 수정하거나 삭제하는 등의 역할을 하는 언어이다
데이터베이스 사용자가 응용 프로그램이나 질의어를 통하여 저장된 데이터를 실질적으로 처리하는데 사용된다
데이터베이스 사용자와 데이터베이스 관리 시스템 간의 인터페이스를 제공한다
ex) INSERT, UPDATE, DELETE
3. DQL(Data Query Language) 데이터 조회 언어
데이터베이스에서 데이터를 검색하거나 조회하는 역할을 한다
ex) SELECT
4. DCL(Data Control Language) 데이터 제어 언어
데이터 베이스에 권한을 부여한다
* DCL 명령어를 입력하면 즉시 데이터베이스 테이블에 영향을 주고 명령어에 해당하는 작업이 AUTO-COMMIT 된다
ex) GRANT, REVOKE
5. TCL(Transaction Control Language) 트랜잭션 제어 언어
데이터의 보안, 무결성, 병행, 수행제어 등을 정의한다
ex) COMMIT, ROLLBACK, SAVEPOINT

 

데이터 베이스는 RDB뿐 아니라 NoSQL을 사용하는 데이터베이스도 있고 또한 DBMS 종류도 다양하다

관계형 DB는 테이블 형식이며 인덱스를 통해 빠른 검색이 가능하고 또한 테이블간 관계를 통해 쿼리문 작성이 자유로워서 원하는 조건의 데이터만 출력할 수 있는 장점이 있다

하지만 엄격한 데이터 타입과 크기 제한으로 인해 다양한 데이터 수집에는 한계가 있을 것 같다

데이터베이스마다 장단점이 있고 목적에 따라 쓰임이 다를 것 같다

다른 DB들도 공부해보고 싶다

앞으로도 화이팅 하자 ~