MariaDB

찌끅·2024년 9월 9일

MariaDB의 주요 특징

  1. 오픈 소스: MariaDB는 GNU GPL (General Public License)에 따라 배포되며, 누구나 무료로 사용할 수 있고, 소스 코드를 수정하여 사용할 수있다.
  2. MySQL과의 호환성: MariaDB는 MYSQL의 대안으로 설계되어, 대부분의 MySQL 애플리케이션이 MariaDB에서도 거의 수정 없이 동작한다. MySQL과 동일한 클라이언트 AP, 데이터 포맷, 프로토콜을 사용하므로, MySQL에서 MariaDB로 쉽게 마이그레이션할 수 있다.
  3. 향상된 성능: MariaDB는 MySQL에 비해 성능 최적화가 되어 있다. 쿼리 성능을 개선하고, 병렬 처리 기능을 추가하는 등 대용량 데이터 처리 시 더 나은 성능을 제공한다.
  4. 안전성 및 보안 강화: MariaDB는 SSL 인증서 지원, Role-based 접근 제어 등 보안 기능이 강화되어 있어 MySQL보다 안전하게 데이터를 관리할 수 있다.
  5. 멀티 소스 복제: MariaDB는 여러 소스에서 데이터를 복제하는 기능을 제공하며, MySQL의 기본 복제 기능보다 복잡한 복제 요구를 처리할 수 있다.

MariaDB 주요 개념

MariaDB의 주요 개념들은 데이터베이스 관리와 성능 최적화를 이해하는 데 중요한 역할을 한다. 이 개념들을 이해하면 MariaDB와 관계형 데이터베이스 관리 시스템(RDBMS)을 더 잘 활용할 수 있다.

1. 데이터베이스(Database)

데이터베이스는 구조화된 데이터를 저장, 관리, 검색하는 시스템이다. MariaDB와 같은 관계형 데이터베이스는 데이터를 테이블 형식으로 저장하며, 각 테이블은 열(필드)과 행(레코드)로 구성된다.

2. 테이블(Table)

테이블은 데이터가 저장되는 기본 단위이다. MariaDB에서 테이블은 열(Column)행(Row)으로 구성된다. 각 열은 특정 데이터 타입(예: 정수, 문자열)을 갖고, 행은 그 열에 맞는 데이터를 저장한다.

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100),
  email VARCHAR(100)
);

3. 스키마(Schema)

스키마는 데이터베이스 구조를 정의하는 개념으로, 테이블, 뷰(View), 인덱스(Index), 트리거(Trigger) 등의 데이터베이스 객체의 구주와 관계를 묘사한다. 스키마는 각 데이터베이스의 테이블과 열이 어떻게 조직되고 연결되는지 나타낸다.

4. 인덱스(Index)

인덱스는 테이블에서 데이터를 빠르게 검색하기 위해 사용된다. 인덱스는 테이블의 특정 열을 기반으로 생성되며, 데이터 조회 속도를 크게 향상시킨다. 예를 들어, email 열에 인덱스를 추가하면 해당 열을 기준으로 하는 검색 작업이 훨씬 빨라진다. 그러나 인덱스는 데이터 삽입, 업데이트, 삭제 시 성능에 영향을 미칠 수 있으므로 신중하게 사용하는 것이 중요하다.

CREATE INDEX idx_email ON users (email);

5. 뷰(View)

뷰(View)는 하나 이상의 테이블에서 가져온 데이터를 임시적으로 저장해 놓은 가상의 테이블이다. 물리적으로 데이터를 저장하지 않으며, 특정 쿼리를 재사용하거나 복잡한 쿼리를 단순하게 표현할 수 있는 유용한 도구이다. 보안 목적으로도 사용되며, 특정 사용자가 원본 데이터를 수정하지 않고도 데이터에 접근할 수 있도록 한다.

CREATE VIEW user_emails AS
SELECT name, email FROM users;

6. 트리거(Trigger)

트리거(Trigger)는 특정 이벤트(INSERT, UPDATE, DELETE)가 발생할 때 자동으로 실행되는 데이터베이스 작업이다. 예를 들어, 사용자가 테이블에 새로운 데이터를 삽입할 때 특정 조건에 따라 다른 작업을 수행할 수 있다. 트리거는 데이터 일관성을 유지하거나 자동으로 데이터를 처리할 때 유용하다.

CREATE TRIGGER before_insert_user
BEFORE INSERT ON users
FOR EACH ROW
SET NEW.name = UPPER(NEW.name);

7. 저장 프로시저(Stored Procedure)

저장 프로시저는 미리 정의된 SQL 쿼리 집합으로, 호출 시 여러 SQL 문을 실행할 수 있는 기능이다. 이를 통해 반복적인 쿼리 작업을 자동화하고 애플리케이션과 데이터베이스 간의 작업을 효율적으로 처리할 수 있다. 또한 코드 재사용성과 유지보수성을 높여준다.

DELIMITER //
CREATE PROCEDURE GetUserByEmail(IN email VARCHAR(100))
BEGIN
  SELECT * FROM users WHERE users.email = email;
END //
DELIMITER ;

8. 함수(Function)

함수는 저장 프로시저와 비슷하지만, 값을 반환하는 데 중점을 둔다. 저장 프로시저와 달리 함수는 쿼리 내에서 호출될 수 있고, 계산된 값을 반환한다. 이를 통해 복잡한 계산이나 데이터를 가공할 때 편리하게 사용할 수 있다.

DELIMITER //
CREATE FUNCTION GetFullName(id INT)
RETURNS VARCHAR(200)
BEGIN
  DECLARE full_name VARCHAR(200);
  SELECT CONCAT(name, ' ', email) INTO full_name
  FROM users
  WHERE users.id = id;
  RETURN full_name;
END //
DELIMITER ;

9. 트랜잭션(Transaction)

트랜잭션은 데이터베ㅑ이스에서 실행되는 일련의 작업을 하나의 단위로 처리하는 기능이다. 트랜잭션은 ACID(Atomicity, Consistency, Isolation, Durability) 속성을 따른다. 이는 데이터베이스 작업의 우너자성을 보장하며, 작업 중 하나라도 실패하면 전체 트랜잭션이 취소된다. 이를 통해 데이터 무결성을 유지할 수 있다.

START TRANSACTION;
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
COMMIT;
  • ROLLBACK: 오류가 발생했을 경우 트랜잭션을 취소하고 이전 상태로 되돌린다.

10. ACID 특성

ACID는 데이터베이스 트랜잭션의 핵심 개념이다.

  • 원자성(Atomicity): 트랜잭션이 완전히 성공하거나 실패해야 함을 의미한다.
  • 일관성(Consistency): 트랜잭션 실행 전후로 데이터베이스가 항상 일관된 상태를 유지한다.
  • 격리성(Isolation): 여러 트랜잭션이 동시에 실행되더라도 각각의 트랜잭션이 독립적으로 실행된다.
  • 지속성(Durability): 트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 저장된다.

0개의 댓글