본문 바로가기
프로젝트/Recipository

[MySQL DB] 22.09.20. InnoDB, Schema와 Database

by 규글 2022. 9. 20.

InnoDB, Schema와 Database

InnoDB[각주:1]

 InnoDB는 MySQL이 제공하는 storage engine(스토리지 엔진) 중에 하나이다. 다른 여러 엔진들도 있지만, 이 친구는 ACID transaction(트랜잭션) 처리를 위해 고안되었다고 한다. 대부분의 경우는 roll back(롤백) 되지 않고 완료되어 정상 종료되는 짧은 transaction이 많은 경우를 처리하기 좋게 되어있다고 한다. 그래서 storage engine 중에 가장 많이 사용된다고 한다.

 MySQL을 기반으로 프로그램을 설계할 때는 어떤 storage engine을 사용해서 data를 저장할지 설계 단계에서 결정해야한다고 한다. 설계 단계에서 고민하지 않으면 나중에 번거로워질 수 있다고 한다. Table 별로 storage engine을 다르게 선택할 수 있어서 각 table이 어떻게 사용되고 data가 저장되는지 이해하는 것이 중요하다.

 예를 들어 InnoDB는 transaction이 필요한 프로그램에 사용하는 것이 가장 적합할 것이다. 이외의 storage engine 중에서 MyISAM은 transaction이 필요없는, 단순히 data를 select하는 작업에 사용하는 것이 적합할 것이다.

 

 

Schema

 Schema는 사전적으로는 '개요'를 의미하고, 심리학에서는 생각이나 행동의 조직화된 패턴을 말한다.

 컴퓨터 과학에서 Schema는 데이터베이스에서 자료의 구조, 자료의 표현 방법, 자료 간의 관계를 형식 언어로 정의한 구조를 말한다. Schema는 table, column, data type, primary key 등의  schema object를 포함한다. 데이터베이스 관리 시스템(DBMS)이 주어진 설정에 따라 데이터베이스 스키마를 생성하며, 데이터베이스 사용자가 자료를 저장, 조회, 삭제, 변경할 때 DBMS는 자신이 생성한 데이터베이스 스키마를 참조하여 명령을 수행한다. [각주:2]

 

 

스키마는 3층 구조로 되어있다고 한다. 다음은 wiki에 언급된 내용과 정보 통신 용어 사전[각주:3]에 언급된 내용을 합쳐보았다. 다음 게시글[각주:4] 포함

  • 외부 스키마(external schema) : 사용자 관점의 스키마. 사용자 또는 프로그램 입장에서의 논리적 구조를 정의하며, 여러 개가 존재할 수 있고, 하나의 schema를 여러 사용자가 공유할 수도 있다. 데이터베이스의 모습으로 조직의 일부분을 정의한 것이고, 사용자와는 관계없는 database의 부분들은 숨긴다. 예를 들어 회사의 판매 부서의 사원은 판매와 관련된 data만을 볼 수 있다.즉, 전체 database의 일부라고 볼 수 있기때문에 sub schema라고도 한다.

  • 개념 스키마(conceptual schema) : 사용자와 데이터베이스(DB) 관리자 관점의 스키마. 데이터베이스에 실제로 어떤 데이터가 저장되었으며, 데이터의 속성과 그 관계는 어떻게 되는지, 제약조건 등의 데이터베이스 구조를 정의하는 스키마로 전체 관점으로 한 개만 존재하며 접근 권한, 보안 및 무결성 등에 관한 정의를 포함한다. 제약 조건이란 예를 들면 특정 내용을 입력하는 과정에서 숫자만, 혹은 영문만을 입력하도록 하는 것을 말한다. 일반적인 스키마를 언급한다고 하면 이 개념 스키마를 의미한다고 한다.

  • 내부 스키마(internal schema) : 저장 장치와 데이터베이스(DB) 설계자 및 개발자 관점의 스키마. 개념 스키마를 물리적 저장 장치에 구현하는 방법을 정의하는 데 사용하고 물리적 구조 및 내부 레코드의 물리적 순서 등을 표현한다. 전체 database의 low-level의 representation이다.

 

 

Schema와 Database는 같은 것인가?

 그것은 vendor에 따라 다르다. Vendor는 사전적으로 '공급자'라는 의미가 있는데, 이를 바탕으로 생각해보면 어떤 database를 사용하는가에 따라 다른 점이라고 말할 수 있겠다. MySQL의 경우는 schema와 database가 같은 것이라는 내용을 documentation에서 찾을 수 있었다.[각주:5] (이미지 상단) 반면에 Oracle에서는 Database object가 schema object와 non-schema object로 나뉜다는 말을 documentation에서 찾을 수 있었는데, 이는 schema와 database를 다른 것으로 본다는 의미이기도 하다.[각주:6](이미지 하단)

 

 DBMS server는 instance와 database로 구성되어 있다고 한다.[각주:7] 그림의 출처는 '데이터베이스의 첫걸음' 도서인 것 같다.[]MySQL에서 데이터베이스, 스키마가 어떻게 다를까? – 폭군길냥의 블로그 (hue9010.github.io)[]

  • Instance(인스턴스) : DBMS가 동작하는 단위. Memory 파트와 Process 파트로 구성.
  • Database(데이터베이스) : 데이터가 저장되는 공간.

 그리고 database 아래에 schema가 folder처럼 있고, 그 아래 여러 테이블을 담을 수 있는 형태라고 한다. 그럼 다시 이전의 vendor에 따라 다르다는 점을 다시 살펴보도록 한다.

 

MySQL의 경우는 3계층 구조로, database 가 없다. 문서에서도 database와 schema를 동일하게 취급한다. 그림의 출처는 '데이터베이스의 첫걸음' 도서인 것 같다.

 

 Oracle은 database가 존재하긴 하나, 그 개수가 단 하나밖에 존재할 수 없는 제약이 있다고 한다. 그래서 어떻게 보면 instance의 바로 아래 schema layer가 있는 듯한 느낌도 준다고 한다. 그림의 출처는 '데이터베이스의 첫걸음' 도서인 것 같다.

 

 이 두 DBMS가 이런 형태라고 하니, 기본적인 4개의 계층을 가지고 있다는 것을 알고 사용했으면 좋겠다고 생각해서 기록으로 남겨보았다. 이제 MySQL을 사용해서 작업을 이어나가보도록 하자.

 

Reference

댓글