시장에 수많은 데이터베이스가 넘쳐나는 요즘, '데이터베이스 전쟁'이 본격화되고 있습니다. 업계를 선도하는 3대 관계형 데이터베이스인 Microsoft SQL Server, Oracle PL/SQL, MySQL의 차이점과 중요성을 이해하기에 적기입니다. 현재 관계형 데이터베이스 관리 시스템(RDBMS)은 산업 전반의 근간이 되었으며, 선택지가 워낙 많다 보니 어떤 것을 골라야 할지 판단하기 어려운 상황입니다.
관계형 데이터베이스 관리 시스템은 1980년대에 처음 소개되었습니다. 이 글에서는 업계에서 가장 널리 사용되는 세 가지 RDBMS인 Microsoft SQL Server, Oracle, MySQL의 역사와 특징을 살펴봅니다. Microsoft SQL Server와 Oracle이 상용 소프트웨어라면, MySQL은 오픈소스 RDBMS라는 점이 가장 큰 차이입니다.

Oracle은 1980년대 상용 RDBMS를 최초로 출시한 회사입니다. 1990년대 중반에는 Microsoft가 SQL Server로 시장에 진입하며 Oracle의 강력한 경쟁자로 부상했습니다. 한편 MySQL은 처음부터 오픈소스 소프트웨어로 개발·배포되었으며, 1995년 첫 버전이 공개되고 1998년에 윈도우 버전이 출시되었습니다. 2008년에는 SUN Microsystems에 인수된 뒤, 이후 Oracle의 손에 넘어갔습니다.
언어 – 소통의 심장
모든 RDBMS의 근간은 쿼리를 실행하는 데 사용되는 언어이며, 성능과 구현 방식도 여기서 좌우됩니다. 세 데이터베이스 모두 SQL(Structured Query Language)의 일종을 사용하지만, 세부 사양은 서로 다릅니다. Microsoft SQL Server는 Sybase에서 개발해 Microsoft가 사용해 온 SQL 확장판인 T-SQL(Transact-SQL)을 채택하고 있으며, Oracle은 PL/SQL(Procedural Language/SQL)을 사용합니다.
두 언어는 모두 SQL의 '방언(dialect)'으로, 문법과 기능이 조금씩 다릅니다. 두 언어의 주요 차이는 변수, 저장 프로시저, 내장 함수를 처리하는 방식에 있습니다. Oracle의 PL/SQL은 프로시저를 패키지 단위로 묶을 수 있는 반면, MS SQL Server에서는 불가능합니다. PL/SQL은 다소 복잡하지만 더 강력한 잠재력을 지니고, T-SQL은 훨씬 단순하고 구현이 쉽다는 장점이 있습니다.

MySQL은 T-SQL의 경량화 버전을 사용하면서, SQL/PSM과 유사한 절차적 언어를 결합합니다. MySQL의 저장 코드 객체는 ANSI 표준에 가깝지만, Microsoft와 Sybase의 독점 확장인 T-SQL만큼 폭넓고 깊이 있는 기능은 갖추지 못했습니다.
트랜잭션 제어
트랜잭션이란 하나의 단위로 실행되는 작업 묶음을 의미합니다. 예컨대 여러 개의 SQL 쿼리를 실행할 때, 전부 실행되거나 전혀 실행되지 않아야 하는 것이죠. 트랜잭션 제어 방식은 Oracle과 MS SQL Server를 가르는 핵심 차이 중 하나입니다.
MS SQL Server는 기본적으로 각 명령(작업)을 개별적으로 실행하고 즉시 커밋(commit)합니다. 따라서 도중에 오류가 발생하면 변경 사항을 되돌리기 어렵거나 불가능할 수 있습니다. "BEGIN TRANSACTION" 명령으로 문장들을 하나의 트랜잭션으로 묶고 시작을 선언한 뒤, 마지막에 COMMIT문을 사용해야 합니다. COMMIT문은 변경된 데이터를 디스크에 기록하고 트랜잭션을 종료합니다. 트랜잭션 내에서 ROLLBACK을 호출하면 해당 블록 안의 변경 사항이 모두 폐기되며, 일단 COMMIT이 실행되면 그 이전 시점으로는 더 이상 롤백할 수 없습니다.

반면 Oracle에서는 새로운 데이터베이스 연결이 곧 새로운 트랜잭션으로 간주됩니다. 쿼리가 실행되고 명령이 내려지더라도 변경 사항은 디스크가 아닌 데이터베이스 메모리와 캐시에만 머무르며, 명시적인 COMMIT문이 실행될 때까지 아무것도 커밋되지 않습니다. COMMIT 이후에 발행되는 다음 명령이 사실상 새로운 트랜잭션을 시작하며, 이 과정이 반복됩니다. 이러한 방식은 유연성을 높이고 오류 제어에도 유리합니다. COMMIT 명령이 명시적으로 실행되기 전까지는 어떤 변경도 디스크에 반영되지 않기 때문입니다.
MySQL의 경우, InnoDB 스토리지 엔진을 통해 트랜잭션을 손쉽게 지원합니다. InnoDB는 MySQL의 기본 스토리지 엔진으로, 외래 키(foreign key) 지원과 함께 표준 ACID 호환 트랜잭션 기능을 제공합니다.
데이터베이스 객체의 구조
데이터베이스 객체를 조직화하는 방식 역시 세 데이터베이스를 구분 짓는 중요한 차이점입니다. MS SQL Server는 테이블, 뷰, 프로시저 같은 모든 객체를 데이터베이스 이름 기준으로 관리합니다. MS SQL 사용자에게는 로그인이 할당되며, 이 로그인을 통해 특정 데이터베이스와 그 객체들에 대한 접근 권한이 부여됩니다. Microsoft SQL Server에서 각 데이터베이스는 서버에서 공유되지 않는 독립적인 디스크 파일을 가집니다.
반면 Oracle은 모든 데이터베이스 객체를 스키마(schema)별로 그룹화합니다. 스키마란 데이터베이스 객체들의 하위 집합 컬렉션, 즉 데이터베이스 구조를 의미합니다. 모든 데이터베이스 객체는 모든 스키마와 사용자 간에 공유되지만, 사용자별 역할(role)과 권한이 정의되어 있으므로 특정 스키마나 테이블로 접근 범위를 제한할 수도 있습니다.
요약하자면, MySQL, Oracle, SQL Server 세 가지 모두 강력한 RDBMS 선택지입니다. 내부 동작 방식과 구현 세부 사항에는 여러 차이가 있지만, 대체로 거의 동등한 방식으로 활용할 수 있습니다. 각각은 서로 다른 목표와 환경에 맞게 사용될 수 있으며, 목적은 비슷하더라도 구현 방식은 저마다 다릅니다.