[DB] DBMS 오라클, MySQL 비교

[verify$y]·2025년 8월 3일

CS핵심개념

목록 보기
16/35

가장 많이 사용되는 DBMS(Oracle, MySql)을 비교해보자. 문법은 당연히 다르다.

  • 작성편의를 위해 소문자로 작성함
  • 슬레이브 동기화 모니터링 용어를 복제 지연 모니터링라는 용어로로 대신함 (최근 master/slave 표현 대신 source/replica 용어 사용 추세)

번외 : ORCL의 DBMS시장 점유율

  • 2025년 상반기 기준, 오라클에서 소유한 Oracle과 MySQL가 DBMS 시장 점유율 top2를 차지한다.



문법차이

  • 공백치환함수 (null값)
    • oracle : NVL함수를 사용
    • mysql : IFNULL함수 사용
    • select NVL(”컬럼명”, ‘’) from dual; ← 오라클
    • select IFNULL(”컬럼명”, ‘ ‘ ) from dual; ← mysql

  • 현재 날짜/시간함수
    • oracle : SYSDATE
    • mysql : NOW()

  • 날짜 포맷 (요일)
    • oracle : 1 - 7순서로대로 sun - sat인식
    • mysql : 0-6순서대로 sun -sat 인식
    • TO_CHAR(SYSDATE - 1, ‘D”) ← oracle
    • DATE_FORMAT(DATE_SUB(NOW()), INTERVAL 1 DAY), “%w”) ← mysql

  • LIKE
    • Oracle : 문자를 합칠 때 || ,
    • MYSQL : 문자를 합칠 때 CONCAT()
    • select user_id from asd where user_id LIKE ‘%’ || 문자 || ‘%”
    • select user_id from asd where user_id LIKE CONCAT(’%”, 문자, “%”)

  • 형변환
    • Oracle : TO_CHAR, TO_NUMBER를 사용하여 형변환
    • MySql : CAST를 사용
    • select TO_CHAR(123) from dual; ← Oracle
    • select CAST(123 AS CHAR) from dual; ← mysql

  • 대소문자 구별
    • oracle은 없고 mysql만 있음
    • MySql :
      • MySQL은 대소문자 구분이 있다고 단정 짓기보다는, OS와 설정에 따라 상이
        • LINUX : 테이블/컬럼명 대소문자 구분 여부 → o
        • Windows : 테이블/컬럼명 대소문자 구분 여부 → x
  • ROWNUM
    • Oracle : 페이징방식구현 코드
      SELECT * FROM (
      SELECT ROWNUM AS rn, A.* FROM (SELECT * FROM asd) A WHERE ROWNUM <= 30
      ) WHERE rn > 10;
    • MySql : where 절없이 limit 5, 10 단위로만 가능하다.

  • Sequence(시퀀스) 설정방법
    • Oracle : 시퀀스명.nextval
    • MySql : 시퀀스명.currval
      • MySql 5.7 이하에는 시퀀스가 없습니다, 대신 AUTO_INCREMENT 사용
      • MySQL 8.0 이상에서야 CREATE SEQUENCE 문이 생김 (PostgreSQL 스타일)

  • 문자열자르기
    • Oracle : SUBSTR(문자열, 시작인덱스, 총개수)
    • MySql : SUBSTRING(문자열, 시작인덱스, 총개수)

  • 문자열 합치기
    • Oracle : 문자열(또는 컬럼) || “중간에 넣을 문자’
    • MySql : CONCAT(문자열(또는 컬럼), “중간에 넣을 문자’)

  • 예약어와 동명인 컬럼명 감싸기 설명
    • Oracle: 컬럼명을 따옴표로 감싸서
    • MySQL : 컬럼명을 백틱(``)으로 감싼다.
      SELECT * FROM `user`;

  • 저장프로시저 있는지 여부 파악해서 create 하는 방식차이
    • Oracle : CREATE OR REPLACE PROCEDURE 프로시저명
      • 한번에 처리
    • MySql : DROP PROCEDURE IF EXISTS 프로시저명; CREATE PROCEDURE 프로시저명
      • 먼저 삭제하고 새로 생성한다.

  • 페이징 처리

    • Oracle : ROWNUM 활용

    • MySQL : LIMIT 활용

    • Oracle 예시

      • ROWNUM은 조회되는 순서대로 1부터 할당되므로, ROWNUM > 10을 바로 쓰면 결과가 0건이 됩니다. 따라서 두 단계 서브쿼리가 필요
      • ROWNUM BETWEEN 11 AND 20는 바로 쓸 수 없음
        SELECT *
        FROM (
            SELECT ROWNUM AS rn, A.* 
            FROM (SELECT * FROM asd ORDER BY 컬럼명) A
            WHERE ROWNUM <= 20 -- 상위 20개까지만 뽑고
        ) 
        WHERE rn > 10; -- 그 중 11~20번째만

    • MySQL 예시

      • LIMIT , <row_count> 형식
      • LIMIT 0, 10 → 첫 10개 (1~10번)
      • LIMIT 10, 10 → 11~20번
      SELECT *
      FROM asd
      ORDER BY 컬럼명
      LIMIT 10, 10; -- 11~20번째 (OFFSET 10부터 10개)
      



DBMS 특징비교

Oracle

  • 오라클회사

  • 고성능

  • 다양한 기능

  • 백업 지원

  • 대규모 서비스에 적합(멀티테넌시, 고급 트랜잭션처리, 대규모 데이터 처리)

    • 고성능 쿼리 최적화, 병렬처리기능, 다중테이블 처리
    • 대규모 엔터프라이즈 환경, 고성능 트랜잭션 처리, 복잡한 데이터 모델링에 적합
  • 이용료 비쌈, 유료

  • 그외 :

    • 오라클은 고급 파티셔닝 기능을 제공하며, 파티션 테이블에서도 트랜잭션 일관성(Consistency)을 유지함.
      • Partitioning은 데이터 분할 전략이고,
      • Consistency는 트랜잭션 ACID의 일환이므로 별개 개념임
    • master - slave 서버구조가 아니므로 서버가 끊겨도 일관성을 유지하는데 적합하다고 할 수 있다.
      • 요즘은 master/slave 표현 대신 source/replica 용어 사용
    • 데이터 정합성 유지에 적절하다.
  • 보안성 뛰어남

    • 데이터 암호화, 권한관리, 로그기능 세분화되어 있어 보안성탁월함
    • RAS(real Aplication Security) 같은 보안 고급 기술을 통해 외부 공격에 대응할 수있다.
  • 고급보안, 확장성, 고가용성


MySQL

  • 오픈소스, 무료
  • 오라클에 인수되었음
  • 무난한 성능(가벼운 데이터베이스 관리 시스템)
  • 작은 범위 조회에 적합
    • 수평확장성 좋음, 여러 서버에서 데이터를 분산할 수 있다.
    • master-slave 또는 Clustering 구축에 적합하다
    • 다만 조인처리기능에서 master-slave 복제과정에서 일부 지연시간이 존재하여 동기화시간에 소요된다.
  • 복잡한쿼리에서 성능 저하(조인 처리 기능 성능이 낮음)
  • 대량 데이터 조회에서 성능 저하
  • 적은 비용과 간편한 관리 기능
  • 빠른 속도와 적은 리소스사용에 적합하다. (경량화)



금융에서 Oracle이 선호되고 MySQL이 제한적으로 사용되는 이유?

  • SLA때문
    - MySQL은 오픈소스이며, 공식적인 SLA 보장이 부족하고,
    - 트랜잭션 정합성 / 고가용성 / 복잡한 보안 제어가 필요한 금융업에서 Oracle, DB2 등 상용DBMS가 선호



SLA란?

용어 설명

  • SLA은 Service Level Agreement의 약자로 서비스 수준 협약을 말함
  • 서비스 제공자와 고객 간에 정한 “서비스 보장 범위”에 대한 공식 계약

내용:

  • 가용성 보장: 예: 99.99% uptime 보장
  • 장애 대응 시간: 예: 장애 발생 시 30분 내 대응
  • 데이터 복구 정책: 예: RPO (복구 시점), RTO (복구 시간)
  • 보안 대응/관리 방안
  • 기술 지원 체계 (24/7 연중무휴 등)



Oracle DB에서의 SLA?

  • SLA 제공
  • 지원체계 : 전세계 엔터프라이즈 회원 대상으로 연중무휴 지원
  • 업타임 제공 : Oracle Cloud Infrastructure(OCI) 등에서는 99.995% 이상 SLA 제공
    • Uptime:
      컴퓨터 시스템 또는 컴퓨터 시스템에 연결되어 있는 하드웨어 장치가 가동하여 사용할 수 있는 상태에 있는 시간의 양 또는 시간의 비율
  • 장애시 보상
  • 고급 보안 기능 포함
  • 정부기관, 금융권, 글로벌 제조기업 등이 이 SLA에 의존



MySQL DB에서의 SLA?

  • commity(오픈소스)는 SLA 지원안함. 오라클사의 DBMS지만, 오픈소스 버전에는 서비스 보장 없음. 장애가 발생해도 누구에게도 보상 요청 불가능
  • 반면, 유료 버전인 MySQL Enterprise Edition 또는 AWS Aurora(MySQL 호환)에서는 SLA를 일부 제공


SLA 결론

  • 금융권, 공공기관, 대규모 서비스에서 Oracle이 선택되는 이유 중 하나는 돈을 주고라도 SLA 보장을 받기위해서 사용함
  • 반면 MySQL은 비용을 절감하거나 중요도가 낮은 시스템에 사용
    • 비핵심 시스템 또는 경량 서비스에 적합



그럼에도 불구하고 금융권에서 MySQL을 사용한다면?

결론

  • MSA 기반으로 비핵심 도메인을 분리해서 효율적이고 경량화된 MySQL로 운영하기 위함이다.
  • MySQL은 뱅킹 시스템에서는 일반적으로 사용하지 않지만,
  • 일부 핀테크 기업은 비핵심 서비스에 한해 MSA 구조와 DBA 고급 운영 역량을 기반으로 안전하게 MySQL을 운영한다.
    • 비핵심서비스 :
      • 사용자 설정 저장
      • 로그 기록
      • 마케팅 이벤트 관리
      • 웹/앱 백오피스 기능 등
  • 금융사에서 운영역량이 없으면 mysql을 사용해서는 안된다.
    • MySQL의 취약점을 보안/신뢰성/정합성을 애플리케이션/운영 인프라로 보완해야한다.

이유

  • 도메인 기반 마이크로서비스 아키텍처(MSA)사용
    • 코어 뱅킹 시스템(계좌/거래/인증/보안)은 보통 별도의 RDBMS을 사용한다. (Oracle, PostgreSQL)
    • 비즈니스 로직을 나눈 여러 마이크로서비스들은 MySQL을 사용한다.
  • 운영 환경과 인프라 설계 역량이 매우 뛰어난경우
    • MySQL을 운영 가능한 수준까지 안정화시킬 수 있는 DBA 조직이 존재해야하고
    • MySQL을 금융환경에서도 안전하게 쓸 수 있도록 관리할 능력이 있다는 것임
  • 비용대비 효율
    - 운영 비용, 라이선스, 유연성을 고려했을 때:
    - Oracle → 코어 시스템에만 적용
    - MySQL → 부가 시스템에 적극 활용
    - 실제로 많은 글로벌 핀테크도 MySQL을 사용하지만, 핵심 시스템은 별도로 관리한다.

정리

금융권에서 MySQL이 쓰이는 조건에 대한 정리

  • 코어 시스템이 아닌 비핵심 서비스
  • 운영 인프라 역량DevOps이 충분한 경우
  • MSA 기반으로 서비스가 도메인 분리되어 있는 경우
  • MySQL의 한계를 애플리케이션 계층이나 보안 설정으로 보완 가능한 경우
  • 비용 효율성을 고려




profile
welcome

0개의 댓글