Schema (TIL 76일차)

EenSung Kim·2021년 6월 20일
0

"관계"


스키마란?

컴퓨터 과학에서 데이터베이스 스키마(database schema)는 데이터베이스에서 자료의 구조, 자료의 표현 방법, 자료 간의 관계를 형식 언어로 정의한 구조이다.

스키마에 대해 위키백과는 위와 같이 정리를 해놓았는데요. 스키마라는 단어가 개요, 도표 등의 뜻을 가진다면 컴퓨터과학에서 스키마란 쉽게는 데이터베이스와 관련해서 그 관계가 어떠한지를 나타내는 것이라고 이해할 수 있습니다.


데이터베이스는 왜 등장하게 되었을까?

클라이언트와 서버, 그리고 데이터베이스로 나뉘는 형태를 3 티어 아키텍처라고 하죠. 서버에서 데이터를 관리할 수도 있는데 왜 굳이 데이터베이스로 분리를 했을까요?

코드를 작성할 때 우리는 정보를 변수에 담아 저장합니다. 변수는 코드의 실행이 종료되면 사라지게 되죠. 만약 생성된 데이터를 안전하게 보관하고 싶다면 실행이 종료되더라도 데이터를 유지할 수 있는 방법을 찾아야 합니다.

'그래서 파일에 저장하는 것 아닌가요?' 라고 생각할 수도 있습니다. 그러나 서버의 파일 시스템에 저장하게 되면, 데이터가 필요할 때마다 파일 전체를 먼저 가져와서 필터링을 해야 하는 불필요한 과정이 반복됩니다. 당연히 서버에 걸리는 부하가 늘어나겠죠.

완벽한 비유는 아니겠지만 컴퓨터의 구조와 비교해서 살펴보겠습니다. CPU 와 RAM 그리고 저장장치는 서로 다른 역할을 감당합니다. 저장장치는 CPU 나 RAM 처럼 빠른 속도를 지닐 필요는 없습니다. 대신 CPU 나 RAM 이 감당할 수 없는 높은 용량의 정보들을 보관할 수 있는 넉넉한 공간을 가지고 있죠. 프로그램을 실행하게 되면 컴퓨터는 저장 장치에서 필요한 정보들을 RAM 으로 가져옵니다. 이렇게 되면 느린 속도를 지닌 저장장치와 계속해서 데이터를 주고받을 일 없이 CPU 와 RAM 이 서로 작동하며 보다 빠르게 프로그램을 실행할 수 있죠. CPU 를 클라이언트로, RAM 을 서버로, 그리고 저장 장치를 데이터베이스로 치환한다면 왜 구조가 나뉘게 되는지를 조금 더 쉽게 이해할 수 있지 않을까 싶습니다.


스키마의 적용

데이터베이스에 왜 관계가 필요할까요. 첫째로는 데이터베이스의 규모가 방대하기 때문이고, 둘째로는 효율적으로 원하는 데이터에 접근하고 가공하기 위해서입니다.

저는 리액트의 컴포넌트 구조가 떠올랐었는데요. 리액트가 각각의 컴포넌트에 하나의 역할을 부여하고 이를 유기적으로 조합해 앱을 빌드하는 것처럼, 데이터가 너무 비대해지는 것을 막기 위해 데이터를 각각의 역할로 나누어 쪼개고, 필요한 경우 이를 유기적으로 조합해 사용하는 것이죠.

학생과 교수 그리고 강의실의 관계를 예로 들어보겠습니다. 일반적인 대학교를 생각해보자면 교수의 숫자가 제일 적고 그 다음이 강의실, 그리고 학생의 숫자이겠죠. 어떤 교수가 어떤 강의실에서 어떤 학생들을 가르칠지를 교수마다, 강의실마다, 학생마다 자료를 만들어 관리하는 것은 매우 번거로운 일입니다.

관계형 데이터베이스에서는 그 대신 교수의 정보가 담긴 테이블, 강의실의 정보가 담긴 테이블, 그리고 학생의 정보가 담긴 테이블을 각각 관리합니다. 이렇게 정보를 나누어 관리하게 되면, 어떤 정보가 필요할 때 모든 데이터를 다 불러올 필요 없이 우리가 원하는 것을 선별해 가져올 수 있죠. 또한 필요한 경우 이 데이터들을 아래와 같이 유기적으로 연결해서 가져올 수도 있습니다.

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;

이를 잘 다루기 위해서는 어제 소개한 SQL 이라는 언어를 알아야 합니다. 코드에 어느 정도 익숙해지셨다면 엄청나게 어렵지는 않지만, 아무래도 명령어가 아예 다르다보니 익숙해지는데 시간이 좀 걸리는 것 같네요.

profile
iOS 개발자로 전직하기 위해 공부 중입니다.

0개의 댓글