본문 바로가기
데이터베이스

데이터베이스와 스키마, 똑같은 말이라고요? NO!

by 데이널 2024. 9. 25.

'데이널'의 컨텐츠에 포함된 정보는?

    데이터베이스와 스키마는 다른건가요?


    최근에 팀원에게 받은 질문입니다. "어 다르지~"라고 말해주니, 기다렸다는 듯이 반문 하더군요. 제가 MySQL에서 SHOW DATABASES;와 SHOW SCHEMAS;를 실행했는데요. 동일한 결과가 나오는데요. 

    '어, 이걸 어디서부터 설명하지...'

     
    속으로 생각했죠. 우선 용어 정리와 관계부터 차근차근 설명하기로 했습니다.
     

    데이터베이스와 스키마 차이점
    데이터베이스와 스키마 차이점

     

    인스턴스 vs 데이터베이스 vs 스키마의 관계

    우선 인스턴스부터 알아야 합니다. database를 메모리에 로딩하여 실제로 동작하게 하는 프로세스를 인스턴스라고 하죠. 데이터베이스 파일을 읽고 쓰며, SQL 쿼리를 실행하고 결과를 반환하는 등의 작업을 수행합니다.
     
    데이터베이스는 그 인스턴스 위에서 구동됩니다. 실제 데이터를 저장하는 물리적인 공간이죠. 파일 시스템 상에 존재하는 데이터 파일, 컨트롤 파일, redo 로그 등으로 구성됩니다.

    일반적으로 오라클과 같은 dbms는 아래와 같은 구조입니다. 하나의 인스턴스에 database도 하나가 연결돼죠. 참고로 RAC의 경우는 여러개 인스턴스가 하나의 db 스토리지로 연결되기도 합니다.
     

    인스턴스 vs 데이터베이스 vs 스키마의 관계
    인스턴스 vs 데이터베이스 vs 스키마의 관계


    그리고 스키마는 database 내에서 논리적인 공간 개념입니다. 테이블, 뷰, 인덱스 등의 객체를 포함하고 있고요. 사용자별로 권한을 부여하여 해당 스키마의 접근을 제한할 수도 있습니다.

    쉽게 말해 스키마는 데이터베이스의 하위 계념인데요. 하나의 데이터베이스 안에 여러 개의 스키마를 가질 수 있습니다. 비유하자면 도서관 안에 여러 방이라고 할수 있겠네요.
     

    MySQL에서 데이터베이스와 스키마의 의미는?

    그렇다면 MySQL에서는 왜 이러는걸까요?

     
    그 이유를 알려면 MySQL의 역사를 거슬로 올라가야 합니다. MySQL, PostgreSQL 등 오픈소스 dbms는 초기 설계부터 다중 데이터베이스를 지원했습니다. 그리고 스키마라는 개념을 오라클처럼 엄격하게 구분하지 않았죠. 그래서 개발자들 사이에 데이터베이스를 단순히 스키마라고 부르는 경우가 많았습니다.

    요약하면 오라클은 3단 구조인 반면, MySQL은 2단 구조인데요. 상대적으로 간단한 구조를 가지고 있어 스키마와 데이터베이스를 구분할 필요성이 적었습니다. 하지만, 다양한 데이터베이스 시스템과의 호환성을 위해 데이터베이스를 스키마라는 용어로 같이 사용하기로 합니다.
     

    MySQL 데이터베이스 구조
    MySQL 데이터베이스 구조

     

    표로 정리해 보면, 아래와 같습니다.
    구분설명
    오라클 스키마오라클에서는 스키마가 사용자와 밀접하게 연결되어 있으며, 각 사용자는 자신만의 스키마를 가지고 객체를 관리합니다. 스키마는 사용자의 권한과 객체 소유권을 나타내는 중요한 개념입니다.
    MySQL 스키마MySQL에서는 스키마가 데이터베이스 내부의 논리적인 영역을 지칭하는 경우가 많습니다. 즉, MySQL의 스키마는 오라클의 스키마처럼 사용자와 강하게 연결되어 있지 않고, 데이터베이스와 거의 동일한 의미로 사용됩니다.

     

    오해의 근원지는?

    그렇다면 왜 오해가 생겼을까요?

     
    첫번째는 번역의 차이 때문입니다. 영어 원문에서 "schema"를 "스키마" 또는 "데이터베이스"로 번역하는 경우가 더러 있어 혼란을 야기하기도 했습니다.
     
    두번째는 커뮤니티에서의 비슷한 뉴양스로 사용했기 때문입니다. MySQL 커뮤니티에서는 편의상 데이터베이스를 스키마라고 부르는 경우가 많아 이러한 오해를 부추겼을 수 있었다고 봅니다. 
     

    마치며

    데이터베이스와 스키마는 데이터를 효율적으로 관리하기 위한 개념입니다. 데이터베이스 관리에서 두 가지 개념은 꼭 알아두어야 합니다. 

    database는 데이터를 저장하는 공간이고, schema는 그 데이터를 어떻게 구성할지 관리하는 단위입니다. 스키마를 잘 설계하면 데이터를 효율적으로 관리할 수 있습니다.