가장 많이 사용되는 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
- 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 프로시저명
DBMS 특징비교
Oracle
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의 한계를 애플리케이션 계층이나 보안 설정으로 보완 가능한 경우
- 비용 효율성을 고려
