본문 바로가기
백엔드(Back-End)/MySQL(RDBMS)

[MySQL] - MySQL이란?, 관계형 데이터베이스의 정의와 여러 가지 특징, 트랜잭션 정리

by TwoJun 2023. 10. 18.

MySQL(RDBMS, Relational Database Management System)

 

 

 

1. MySQL

1-1. MySQL이란?

(1) MySQL은 전세계적으로 많이 사용되는 오픈소스 기반 관계형 데이터베이스를 말하며 다중 스레드와 사용자 구조 질의어(SQL, Structured Query Language) 형식의 데이터베이스 관리 시스템으로 현재는 오라클(Oracle) 재단이 MySQL을 관리 및 유지보수하고 있다.

 

(2) 이러한 MySQL은 대규모의 웹 애플리케이션, 서버 개발에서 많이 사용되며 대규모의 웹 애플리케이션에서 발생하는 많은 데이터들을 구조화하고 관리할 수 있다.

 

(3) 관계형 데이터베이스인 특징에 따라 데이터들을 테이블 형태로 관리하며 컬럼(Column)과 로우(Row) 형태로 데이터들을 관리하고 저장할 수 있다. 컬럼에는 데이터에 대한 속성과 테이블의 구조를 정의하고, 로우는 실제 데이터들이 담긴 레코드를 의미한다.

 

 

 

 

1-2. MySQL의 특징

(1) 오픈 소스 기반, 크로스 플랫폼 지원

- 오픈소스로써 MySQL을 사용하기 위한 라이선스 비용이 별도로 발생하지 않으며 자유롭게 소스 코드 영역에 접근할 수 있다. 이를 통해 비용을 절감하고 적절한 튜닝을 통해 MySQL을 사용할 수 있다는 특징을 갖고 있다.

 

- 크로스 플랫폼을 지원하기 때문에 다양한 운영체제에서 동작한다.

 

 

(2) 트랜잭션(Transaction) 지원

- MySQL은 데이터베이스에서 트랜잭션 기능을 지원하며, 트랜잭션의 ACID(원자성, 일관성. 고립성, 지속성) 원칙을 준수하여 데이터들의 무결성을 보장받을 수 있다.

 

- 트랜잭션에 관한 내용은 후반부에 작성되어 있다.

 

 

(3) 높은 성능과 확장성

- MySQL은 빠른 수준의 데이터 읽기와 쓰기 성능을 제공하고 있고 인덱스를 적절히 활용하여 데이터 조회 성능을 높일 수 있다. 또한 대규모 시스템에서도 효과적으로 운용될 수 있으며 Replication(복제), Clustering(클러스터링), Sharding(샤딩) 등 다양한 방법으로 확장할 수 있다.

 

 

 

 

1-3. MySQL의 장점

(1) 스키마(Schema)를 기반으로 하는 데이터베이스

- 데이터베이스에서 스키마는 데이터의 구조, 구성 및 관계를 정의하는 논리적인 형식을 의미하며 데이터베이스 내부의 테이블, 필드 관계를 정의한 논리적 설계도로 볼 수 있다.

 

- 이러한 스키마를 기반으로 데이터를 구조화하고 정의할 수 있다.

 

 

(2) 멀티 스레드(Multi-Thread) 기반 

- 동시 다발적 요청을 처리할 수 있도록 멀티 스레드 기반으로 구현되어 있다.

 

 

(3) 다양한 저장 엔진을 선택할 수 있다.

- InnoDB, MyISAM 등 프로젝트의 규모와 요구사항에 따라 적합한 데이터베이스 엔진을 사용하여 데이터를 관리하고 저장할 수 있다.

 

 

(4)  외래 키(Foreign key) 지원

- 외래 키(Foreign key)는 관계형 데이터베이스에서 테이블 간의 관계를 정의하는 데 사용될 수 있는 속성으로, 외래 키는 어느 테이블의 한 개 또는 여러 개의 컬럼이 다른 테이블의 기본 키(Primary key)와 관련이 있는 경우 사용되는 특징을 가지고 있으며 외래 키를 통해 두 테이블 간의 관계를 설정하고 유지할 수 있게 된다. 관계형 데이터베이스를 사용하면 이러한 외래 키를 자주 사용하게 된다.

 

 

 

 

1-4. MySQL의 단점 

(1) 일부 고급 기능 부재 

- 관계형 데이터베이스의 특성상 NoSQL 기반 데이터베이스에 비해 여러 가지 고급 기능이 다소 부족할 수 있고 다양한 유형의 데이터를 처리하는 데에는 한계가 존재할 수 있다.

 

 

(2) 트랜잭션 관리와 한계

- 일부 복잡한 트랜잭션 관리의 경우 다른 RDBMS보다 관리 성능이 조금씩 떨어지거나 유연하지 않을 수 있다.

 

 

(3) 대용량 데이터 처리에서 오는 어려움

- NoSQL 데이터베이스에 비해 대용량 데이터를 처리하는 데 한계가 있을 수 있다.

 

 

(4) 추가 비용 발생 가능성

- 엔터프라이즈 환경에서 MySQL이 사용되는 경우 상업적인 지원을 받기 위해서 추가적인 코스트가 발생할 수 있다.

 

 

 

 

1-5. 정리

(1) MySQL의 특징과 각 장, 단점에 대해 간략하게 정리해 보았다. 현재 MySQL은 강력한 관계형 데이터베이스 시스템으로써 전세계적으로 많이 사용되고 있다. 하지만 진행하는 프로젝트, 서비스의 규모, 요구사항 등에 따라 다른 데이터베이스 시스템이 더 효과적일 수 있으니 개발 목적, 요구사항 등 여러 가지 정해진 상황에 따라 적절한 데이터베이스를 선택하는 것이 중요하다.

 

 

 

 

 

2. 관계형 데이터베이스 (RDB, Relational Database System)

2-1. 관계형 데이터베이스(RDB), 관계형 데이터베이스 관리 시스템(RDBMS)

(1) 관계형 데이터베이스는 데이터를 테이블 형식으로 표현하고 이러한 테이블들 간의 관계를 정의하여 데이터를 저장, 검색, 수정, 삭제하는 데 사용되는 데이터베이스를 의미한다. 

 

(2) 관계형 데이터베이스 관리 시스템(RDBMS)은 이러한 관계형 데이터베이스를 관리할 수 있는 전체적인 시스템을 의미한다.

 

(3) 관계형 데이터베이스 시스템의 종류로는 대표적으로 잘 알려진 Oracle, MySQL, PostgreSQL, MSSQL 등이 존재한다.

 

 

 

 

2-2. 관계형 데이터베이스의 특징

(1) 데이터의 일관성(Consistency) 보장

- RDB는 트랜잭션 ACID 원칙을 준수하여 데이터의 일관성을 보장할 수 있다. 이러한 주요 특징은 데이터의 무결성과 안정성을 보장해 준다는 특징을 가지고 있다.

 

- 일관성과 무결성 부분은 아래에서 조금 더 정확하게 정리해 보겠다.

 

 

(2) 정형화된 데이터 구조를 갖는다.

- 데이터들이 테이블의 형태로 구조화되어 있기 때문에 데이터의 형식과 구조가 명확하게 정의된다. 이러한 특징을 통해서도 데이터의 일관성을 보장받을 수 있다.

 

 

(3) SQL(Structured Query Language) 지원

- 관계형 데이터베이스의 데이터들을 저장하고 관리할 수 있는 구조화된 쿼리 언어(SQL)를 각 데이터베이스 벤더마다 조금씩 다른 형태의 문법으로 제공하고 있으며, 데이터를 조금 더 세밀하게 다루기 위해 사용되는 복잡한 동적 SQL을 이용해 데이터를 효과적으로 조작하고 관리할 수 있다.

 

 

(4) 데이터의 보안, 권한 제어

- 관계형 데이터베이스는 사용자 인증, 엑세스 제어 등 다양한 보안 기능을 제공하고 있으며 이를 통해 관리되고 있는 데이터들의 보안을 유지할 수 있다.

 

 

 

 

3. 데이터의 무결성(Integrity), 일관성(Consistency)

3-1.데이터 무결성(Integrity)

(1) 데이터의 값이 정확하고 완전한 상태

 

(2) 데이터들의 정확성, 일관성, 유효성이 유지되는 것을 의미한다. 여기서 정확성이란 데이터의 중복이나 누락이 없는 상태를 말한다.

 

(3) 이러한 무결성은 개별적인 데이터 항목의 정확성을 보장하는 성질이다.

 

 

 

 

3-2. 데이터 일관성(Consistency)

(1) 일관성은 서로 관련된 데이터 간 상호 연관성을 의미한다. 특정 데이터에 대한 작업의 원인과 결과가 연속적으로 보장되어 데이터가 변하지 않는 일관된 상태를 유지해야 하는 성질이다.

 

(2) 쉽게 말하면, 데이터들이 시간이 지나거나 여러 작업을 거치더라도 항상 일관된 상태를 유지해야 하는 것

 

(3) 무결성과는 달리 일관성은 데이터 간의 상호관계를 유지하며 시스템 전체의 신뢰성을 보장받을 수 있는 데이터베이스 시스템이 가져야 하는 중요한 요소라고 볼 수 있다.

 

 

 

 

3-3. 무결성과 일관성의 차이

(1) 무결성은 데이터가 정확하고 유효한 상태를 유지해야 하는 것이고 이에 따라 데이터의 형식, 제약 조건(Constraint) 등이 준수되어야 한다.

 

(2) 일관성은 앞서 언급된 것처럼 데이터베이스에서 관련된 데이터 간의 상호 연관성을 의미하고 데이터들을 대상으로 이루어지는 모든 작업들에 대해 항상 일관된 상태를 유지해야 한다. 따라서 여러 테이블 간의 관계가 정확해야 한다.

 

 

 

 

 

 

4. 데이터베이스 트랜잭션(Transaction)

4-1. 트랜잭션(Transaction)의 정의, 예시로 보는 주요 특징

(1) 트랜잭션이란 데이터베이스 내부에서 수행되는 일련의 작업들을 하나의 논리적인 단위로 묶은 것을 의미한다. 하지만 이러한 정의로는 바로 이해하기 어려울 것이다. 아래와 같이 금액 송금을 떠올려보면 이해하기 쉽다.

 

(2) A가 B에게 10,000원을 송금한다고 가정해 보자. 이때 계좌 송금이라는 작업에 대한 트랜잭션이 시작된다. A의 계좌에서 10,000원을 빼서 B의 계좌로 10,000원을 이체해야 하는 상황이다. 이러한 전체적인 작업의 논리적 단위를 트랜잭션이라고 한다.

 

(3) 송금 과정이 정상적으로 진행되었다면 A의 어카운트에서는 10,000원이 빠지고 B의 어카운트로 10,000원이 들어와야 한다. 이러한 트랜잭션의 내부 작업들은 모두 동시에 일어나야 한다. 만약 송금 과정에서 예상치 못한 오류가 발생하여 B에게 송금이 되지 않았으나 A의 계좌에서 돈만 빠진 상황이라고 해 보자. 데이터의 일관성이 보장 받지 못 하는 매우 큰 문제가 발생하게 된다. 따라서 모든 트랜잭션은 내부 작업이 하나라도 실패하게 되면 롤백(Rollback, 이전 상태로 되돌아가는 것)이 발생되어 트랜잭션 작업 전으로 돌아갈 수 있어야 하고, 트랜잭션이 성공하면 커밋(Commit, 데이터베이스에 수정된 내용을 반영하는 것)이 수행되어야 할 것이다. 이러한 트랜잭션은 데이터베이스의 일관성을 유지하는 데 큰 역할을 한다.

 

 

 

 

4-2. 트랜잭션의 4대 원칙 ACID(Atomicity, Consistency, Isolation, Durability)

- 관계형 데이터베이스는 시스템이 안정적이고 신뢰할 수 있는 트랜잭션 처리를 보장해 주어 데이터의 무결성과 일관성을 유지할 수 있게 도와준다. 이러한 트랜잭션이 가져야 하는 핵심 4대 원칙이 존재한다.

 

(1) 트랜잭션의 원자성(Atomicity of Transaction)

- 트랜잭션 내부에서 수행된 모든 연산은 성공적으로 완료되거나 중간에 문제가 있어서 실패한다면 어떠한 연산도 수행되지 않은 상태로 되돌아 갈 수 있어야 한다.

 

(2) 트랜잭션의 일관성(Consistency of Transaction)

- 트랜잭션이 수행된 이후에도 데이터베이스는 항상 일관된 상태를 유지해야 하는 것. 즉, 트랜잭션이 시작하기 전과 끝난 이후에도 데이터베이스는 유효한 규칙을 따라야 한다.

 

(3) 트랜잭션의 격리성(Isolation of Transaction)

- 여러 트랜잭션이 동시에 수행될 때 각각의 트랜잭션이 서로에게 영향을 주지 않고 독립적으로 실행되어야 함을 의미한다. 트랜잭션들은 다른 트랜잭션의 수행에 있어 간섭하지 않아야 한다.

 

(4) 트랜잭션의 지속성(Durability of Transaction)

- 트랜잭션이 성공적으로  수행된 후 결과값이 영구적으로 저장되는 것을 보장하는 성질. 시스템에 문제가 발생하더라도 트랜잭션의 결과는 손실되지 않아야 한다.

 

 

 

 

 

5. NoSQL 데이터베이스 (비관계형 데이터베이스)

(1) 비관계형 데이터베이스에 대해서도 조금 정리해 보겠다.

 

5-1. NoSQL 데이터베이스

(1) 관계형 데이터베이스는 테이블 간의 관계를 이용해 데이터를 저장하고 관리하는 반면 NoSQL 데이터베이스는 다양한 데이터 모델을 사용해서 데이터들을 저장하고 관리하는 데이터베이스를 말한다.

 

(2) 관계형 데이터베이스와는 달리 테이블을 사용하지 않고 다양한 데이터 모델을 기반으로 하는 데이터베이스이기 때문에 주로 대량의 분산 데이터들을 다루거나 조금 더 유연한 데이터 모델이 필요한 환경에서 주로 사용된다.

 

 

 

 

5-2. NoSQL 데이터베이스 특징

(1) 비구조적인 데이터 모델을 갖고 있다.

- 테이블 형식이 아닌 비구조적인 다양한 데이터 모델을 사용한 데이터베이스이다. 데이터의 형식이 미리 정의되어 있지 않아도 되며 유연한 형태의 데이터를 저장하고 관리할 수 있다는 특징을 가진다.

 

(2) 분산 처리 환경

- 대부분의 NoSQL 데이터베이스는 분산 환경에서 동작하도록 설계되어 있다. 대규모의 데이터를 효과적으로 처리하고 확장할 수 있다는 장점을 제공한다.

 

(3) 높은 가용성, 확장성

- NoSQL 데이터베이스는 고가용성을 제공하며 수평적 확장이 가능하다.

- 고가용성(High availability) : 서버, 네트워크, 프로그램 등 시스템이 상당히 오랜 기간 지속적으로 운영이 가능한 성질

- 수평적 확장(Scale out) : 데이터베이스 자체의 노드 수를 증가시켜 성능 향상을 얻는 방법

 

(4) 유연한 스키마

- 관계형 데이터베이스와 달리 스키마를 미리 정의할 필요가 없고 데이터의 구조를 자유롭게 확장하거나 변경할 수 있다.

 

 

 

 

5-3. 비관계형 데이터베이스의 종류

(1) Document-Oriented Database

- 문서 형태로 데이터를 저장하고 관리하는 NoSQL 데이터베이스

- MongoDB, CouchDB

 

(2) Key-Value Store

- 간단한 형태의 키와 그에 대응하는 값으로 데이터를 저장하고 관리하는 NoSQL 데이터베이스

- Redis, Amazon DynamoDB

 

(3) Wide-Column Store

- 컬럼 기반으로 데이터를 저장하고 관리, 각 로우는 다양한 컬럼을 가질 수 있는 특징을 가지는 NoSQL 데이터베이스 

- Apache Cassandra, HBase

 

(4) Time-Series Database

- 시간의 흐름에 따라 데이터를 저장하고 관리할 수 있는 NoSQL 데이터베이스

- InfluxDB, OpenTSDB

 

 

 

 

 

※ 해당 포스팅에 대해 내용 추가가 필요하다고 생각되면 기존 포스팅 내용에 다른 내용이 추가될 수 있습니다.

개인적으로 공부하며 정리한 내용이기에 오타나 틀린 부분이 있을 수 있으며, 이에 대해 댓글로 알려주시면 감사하겠습니다!

댓글