DB) Oracle과 Mysql의 차이

LinkinPark·2024년 8월 2일

개요

다양한 사이드 프로젝트에 오픈소스이자 상대적 경량적인 Mysql을 써왔다.

문득, Oracle은 왜 대규모 어플리케이션 및 금융권에서 많이 사용할까 궁금함이 생겼다.

그래서 이 글을 작성한다.

(최대한 Mysql 버전별로 (5.5,8.0) 비교해보긴 했는데, 부족하거나 다른점이 있다면 댓글 남겨주세요.)

Mysql

개발사 : AB -> Sun -> 오라클
라이선스 : GPL, 상업적 라이센스도 존재한다.
사용되는 곳 : Web App, 중소규모 DB, 스타트업 및 중소기업

장점

  1. 오픈소스이다 : 비용부담이 적고, 커뮤니티의 활발한 지원을 받는다.
  2. 사용하기 용이하다 : 비교적 설치 및 설정이 간단하다. 개발자에게 친숙한 인터페이스를 제공한다.
  3. 경량성 : 비교적 가벼운 구조이며, 리소스 소모가 적어 작은 규모의 Application에 적합하다.
  4. 확장성 : 다양한 스토리지 엔진을 지원한다.(InnoDB, MyISAM) 유연한 데이터 관리가 가능하다.(다양한 DBMS를 지원하는 것 또한 장점이다.)
  5. 사용사례가 많다 : 레퍼런스가 많다.

단점

  1. 기능이 비교적 제한적이다 : 고급보안 및 분석기능이 상대적 부족하며, 대규모 엔터프라이즈 환경에서는 기능적으로 부족할 수 있다. 또한 조인 방식에서도 중첩루프조인 방식만 제공한다.
  2. ACID 준수가 미흡하다 : 5.5버전까지는 기본 스토리지엔진이 ACID 속성을 완벽하게 지원하지 않았다. 물론 InnoDB가 기본 스토리지엔진으로 채택된 이후부터는 ACID를 준수한다.
  3. 제한된 분석기능 : Oracle에 비해 분석 및 Online Analytical Processing 기능이 제한적이다.
  4. 지원 및 유지보수 : 오픈소스 버전은 커뮤니티 지원에 의존적이다.

ACID를 모르는사람들을 위해서..

  1. Atomicity - 원자성 : 트랜잭션 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장하는 것
  2. Consistency - 일관성 : 트랜잭션의 작업이 실행 전 후의 데이터베이스 상태는 일관되어야 한다.
  3. Isolation - 고립성 : 트랜잭션 작업 도중 다른 트랜잭션의 영향을 받지 않는다.
  4. Durability - 지속성 : 성공적으로 수행되는 트랜잭션은 이후 영구적으로 반영된다.

Oracle

개발사 : Oracle
라이선스 : 상업적 라이선스
사용사례 : 대규모 엔터프라이즈 환경, 금융, 의료, 대형 데이터베이스 시스템

장점

  1. 고급기능 지원 : 복잡한 쿼리 처리, 고급 보안, 데이터 웨어하우징, OLAP 기능 등 다양한 기능을 제공한다.
  2. 성능 : 대규모 데이터 처리와 고성능 트랜잭션 관리에 최적화되어있다.
  3. ACID 준수 : 완전한 ACID 속성 준수로, 높은 데이터 무결성과 일관성을 보장한다.
  4. 확장성 및 안정성 : 대규모 시스템에서 확장성과 안정성이 뛰어나며, 높은 가용성을 제공한다.
  5. 지원 : 글로벌 지원 서비스와 광범위한 기술 문서 등 전문적인 지원을 받을 수 있다.

단점

  1. 비용 : 너무 비싸다.
  2. 복잡성 : 설치, 설정, 관리가 상대적 복잡하다.
  3. 리소스 소모 : 고성능인 만큼 메모리 소모가 심하다.
  4. 폐쇄성 : 오픈소스가 아니므로 커스터마이징이나 소스 코드 접근이 제한적이다.

Mysql이 처리하지 못하는 고급 기능은 무엇이 있을까

1. 고급 윈도우 함수 사용(Mysql8.0 미만 버전 까지만)

Oracle은 고급 윈도우 함수를 지원하지만(Window Function) Mysql은 그렇지 못하다.
윈도우 함수는 보통 데이터 분석 및 통계 계산에 강력한 이점을 가진다.

-- Oracle DB 예시
SELECT
    employee_id,
    department_id,
    salary,
    AVG(salary) OVER (PARTITION BY department_id ORDER BY salary RANGE BETWEEN INTERVAL '1' MONTH PRECEDING AND INTERVAL '1' MONTH FOLLOWING) AS moving_avg_salary
FROM
    employees;

위의 예시는 특정 범위 내에서 이동 평균을 계산한다.

1-2. 고급 윈도우 함수 사용

MODEL Clause : 데이터 시뮬레이션 및 예측을 수행하는 함수이다.
RANGE BETWEEN INTERVAL : 기간을 기준으로 윈도우를 정의하여 더 복잡한 계산을 수행할 수 있다.

2. 고급 파티셔닝 기능

Composite Partitioning : 다양한 파티셔닝 방법을 조합한다. 예를 들어 Range-Hash 파티셔닝, List-Hash 파티셔닝 등
Interval Partitioning : 지정한 간격으로 자동 파티셔닝을 수행한다.
Reference Partitioning : 외래 키 기반으로 파티션을 자동으로 유지 관리한다.

Ex,.

CREATE TABLE sales
(
    sales_id NUMBER,
    sale_date DATE,
    amount NUMBER
)
PARTITION BY RANGE (sale_date)
INTERVAL (NUMTOYMINTERVAL(1, 'MONTH'))
(
    PARTITION p1 VALUES LESS THAN (TO_DATE('2023-01-01', 'YYYY-MM-DD'))
);

3. Flashback

이걸 보고 아닌데..? Mysql도 flashback 사용할 수 있을텐데.. 라고 말할 수도 있다.
물론 유틸리티를 사용하거나 커스터마이징하면 가능하긴 하다.
하지만 8.0기준으로 mysql에서 지원하지 않는다.(여담이지만 mariadb 10.2는 지원한다.)

  1. Flashback Query : 과거 시점의 데이터 조회가 가능하다.
  2. Flashback Table : 테이블을 과거 상태로 복구할 수 있다.
  3. Flashback Database : 전체 데이터베이스를 과거 시점으로 복구할 수 있다.
SELECT * FROM employees AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' DAY);

금융권에서 사용하는 이유중 하나라고 생각한다.

4. AQ(Advanced Queuing)

비동기 메시지 처리 및 통합 기능을 제공한다.

이 부분은 어려우므로 좀 더 자세하게 설명하자면, c/s 환경에서 클라이언트의 요청이 바로 처리되기 때문에 연결된 작업이라 볼 수 있음. 이런 모델은 다음 작업을 진행하기 전에 처리한 작업에 대한 결과를 얻어서 이용하는 경우 적당하다고 볼 수 있음.
근데 이런 경우 어플리케이션이 항상 사용가능한 상태여야 하기 때문에 네트워크 문제가 발생하면 전체 어플리케이션이 모두 사용 못하는 문제가 발생함.
Queuing 기법은 프로그램들 간 비연결적인 작업으로 생산자/소비자 형태로 구성됨. 생산자 프로그램이 queue에 요청을 넣고, 소비자 프로그램이 큐에서 요청을 꺼내 처리하게 함. Oracle에서 이런 큐잉 기법을 기존의 다른 미들웨어를 사용하지 않고 직접 사용 가능하게 했음.(8 이상부터)

조금 더 자세한 설명이나 예시를 보고 싶다면?

https://www.oracle.com/kr/database/advanced-queuing/

아래는 예시이다.

BEGIN
    DBMS_AQADM.CREATE_QUEUE_TABLE(
        queue_table => 'message_queue_table',
        queue_payload_type => 'RAW'
    );
END;

그 외에도..

RAC, Data Guard, FGA 등 여러 기능들을 제공한다.

마치면서

왜 대규모 엔터프라이즈 환경이나 금융권에서 이러한 비싸고 리소스를 많이먹는 Oracle을 채택하는지 알 수 있었다.

역시 아는게 애매하면 찾아봐야한다.

profile
It's work, but touch it

0개의 댓글