[초보자들] 데이터베이스 기초 – (1)기초개념익히기

Bsidesoft에서는 회사 안과 밖으로 꾸준히 스터디를 진행하고 있습니다. 회사 내부 스터디로 이번에는 <사례로 배우는 데이터베이스 설계와 구축>책을 가지고 데이터베이스에 대해 공부를 하게 되었는데요, 스터디를 하며 배운 내용을 부족하지만 Summer가 정리해보고자 합니다.

오늘은 그 첫번째로 책 1장에서 다룬 데이터베이스와 관련된 기본 개념들에 대해 살펴보겠습니다.

데이터, 정보, 데이터베이스, 데이터베이스 관리시스템top

데이터 vs 정보

본격적으로 데이터베이스를 알아보기 전에 데이터베이스가 다루는 ‘데이터’가 무엇인지 알아보겠습니다.

책에서는 데이터를 더 정확하게 ‘데이터’와 ‘정보’로 나눕니다. (저는 둘 다 똑같은 것인줄 알았지만요…)

데이터는 단순한 관찰이나 측정 등의 수단을 통해 현실 세계로부터 수집된 사실이나 값을 일컫습니다. 은행 대기 번호표의 숫자, 친구가 보낸 카카오톡 메시지, 점심에 간 식당의 메뉴판 내용 등은 모두 데이터가 될 수 있겠지요. 하지만 이러한 데이터가 모두 유용한 것은 아닙니다. 데이터가 유용할 수 있는지의 여부는 상황, 사용자 등에 따라 달라집니다.

이처럼 데이터 중에서도 조직화되고 체계화 된 데이터로서 의사 결정권자에게 의미를 제공하는 것을 정보라고 합니다.

*이처럼 정확하게는 두 뜻이 다르지만 앞으로 책과 제 후기에서 나오는 데이터는 정보로서의 데이터를 의미한다고 알아주시면 좋을 것 같습니다^^

데이터베이스

데이터베이스(DB; Database)는 Data와 Base라는 두가지 단어가 합쳐져서 만들어졌습니다. Data는 위에서 살펴본 ‘정보’로서의 데이터를 말합니다. 즉, 수많은 데이터중에서도 중요하고 유용하기 때문에 사용자가 꼭 ‘기억해야 할 것’을 의미한다고 볼 수 있습니다. Base는 미군의 용산 베이스라고 할 때의 베이스로 ‘기지’를 의미합니다.

결론적으로 데이터베이스는 꼭 기억해야하는 데이터들의 집합을 의미한다고 볼 수 있겠습니다. 하지만 데이터가 모아져 있다고 해서 모두를 데이터베이스라고 하진 않으니…
현실의 베이스를 생각해 보면 모두가 베이스에 들어갈 수 있는 것은 아닙니다. 베이스가 가진 체계와 규격에 맞춰진 사람만 베이스에 입소할 수 있습니다. 데이터베이스도 마찬가지로 데이터베이스에서 정한 규격에 맞춘 데이터들만 들어갈 수 있고, 이렇게 규격에 따라 서로 관련있는 데이터를 모아둔 곳이라야 데이터베이스라고 할 수 있습니다.

이 모든 의미를 담아 책에서는 데이터베이스를 한 조직의 여러 응용 시스템들이 공유해서 사용할 수 있도록 데이터들을 통합해 체계적으로 조직한 후 저장한 운영 데이터의 집합이라고 정의했습니다.

데이터베이스 관리 시스템

데이터베이스 관리 시스템(DBMS ; DataBase Management System)은 말 그대로 데이터베이스를 관리해주는 시스템(프로그램)을 말합니다. 데이터베이스의 생성, 접근방법, 처리절차, 보안, 물리적 구조등을 책임지며 대량의 데이터를 체계적으로 관리하고 검색, 활용할 수 있도록 합니다.

컴퓨터에 데이터를 기억하기 위해서는 데이터베이스를 이용하는 것 이외에도 다른 방법이 있습니다. 대표적으로는 파일 시스템을 생각해 볼 수 있는데요, 동영상, 문서, 음악 등… 다양한 형식의 파일을 통해 다양한 내용의 데이터를 생성, 열람, 수정, 삭제할 수 있습니다.

하. 지. 만…! 파일을 이용해 여러명이서 데이터를 저장할 때에는 문제가 생기게 됩니다. 대표적인 문제로는 데이터 종속성과 중복성을 들 수 있습니다.

데이터 종속성은 데이터와 응용 프로그램 간의 상호 의존 관계를 말합니다. 파일에 접근하기 위해서는 파일을 열 수 있는 적절한 응용 프로그램이 필요합니다. 예를 들면 mp3파일을 재생하려면 미디어 재생 프로그램이 있어야하고, 엑셀 파일을 열려면 엑셀 프로그램이 컴퓨터에 설치되어 있어야 합니다. 똑같은 내용을 표로 작성해 한글 파일로 저장한 경우에는 데이터의 종속성 때문에 엑셀파일로는 열 수 없습니다.

이처럼 데이터의 종속성은 동일한 데이터라고 할 지라도 응용프로그램마다 다른 형식의 파일이 여러개가 생기게 합니다. 또 파일을 보관하는 컴퓨터가 다른 경우, 파일을 내 컴퓨터에 복사해서 사용해야 합니다. 동일한 내용의 데이터가 두 개 생기게 됩니다.

이처럼 동일한 내용의 파일이 여러개 생기는 것을 데이터의 중복성이라 하는데, 데이터가 중복되면 저장 공간이 낭비되고 데이터를 변동하거나 갱신할 때 수정된 내용을 동시에 모두 반영해야하니 굉장히 비효율적입니다.

따라서 여러명의 사람들이 데이터를 공용으로 사용할 수 있도록 데이터베이스와 데이터베이스 관리 시스템(이하 DBMS)이 도입되었습니다.

데이터베이스와 DBMS가 도입됨으로서 데이터의 공유가 가능해지고 중복을 최소화할 수 있게 되었습니다. 중복이 사라지니 데이터가 흠없이 정확한 무결성을 갖추고 일관성을 유지하기에 더 수월해졌습니다. 또한 데이터 접근 가능 여부에 인증과 인가를 도입해 보안성도 높일 수 있게 되었습니다.

물론 단점도 존재합니다. 초기에 데이터베이스 구축과 운영에 비용과 자원 많이 들며, 후에도 데이터베이스에 있는 데이터들이 망가지지 않도록 DBMS을 사용하고 유지하는데 많은 교육과 주의가 필요하기도 합니다. 따라서 DBMS를 도입하는 것이 좋은지 나쁜지는 상황에 따라 다르다고 할 수 있겠습니다^^

데이터베이스의 계층 구조top

데이터는 어떻게 데이터베이스에 기억이 될까요?

우선 컴퓨터가 데이터를 저장하는 방식을 알아봅니다.
컴퓨터에는 작은 전구들이 있는데 컴퓨터는 이 전구에 전기가 들어와있는지 안들어와있는지에 따라 상태를 다르게 기억합니다. 이렇게 컴퓨터에서 기억하는 상태의 가장 작은 단위를 비트(Bit)라 합니다.

전구 3개로는 8개의 상태를 나타낼 수 있는데요, 이렇게 비트 8개를 모아 바이트(Byte)라고 합니다.
바이트 몇 개를 모으면 문자나 숫자를 기억할 수 있는데, 이렇게 숫자나 문자 등 특정한 종류의 데이터를 저장하기 위한 영역을 필드(Field)라고 합니다.
필드가 모이면 레코드(Record)가 되고, 레코드들이 모이면 파일(File)이 됩니다.
그리고 여러 개의 관련있는 파일을 논리적으로 연결해 필요한 부분을 적절히 찾고 활용할 수 있도록 한 것을 데이터베이스(Database)라고 합니다.

데이터베이스의 추상화top

사용자는 DBMS를 통해 데이터베이스에 저장된 데이터에 접근할 수 있는데 그 과정에서 복잡한 데이터베이스의 구조를 굳이 알 필요는 없습니다. 사용자는 오직 어떻게 하면 빠르고 쉽게 데이터를 가져올 수 있는지에 관심이 있습니다. 반면, 데이터베이스의 입장에서는 어떻게하면 안전하고 오류없이 데이터를 보관할 수 있을지에 관심이 있을 것입니다.

이처럼 사용자와 데이터베이스의 물리적인 구조는 관심사가 전혀 다르며, 그 관심사에 따라 알아야 할 부분과 알지 않아도 될 부분이 나뉩니다. 알지 않아도 되는 부분은 드러내지 않는데 이를 ‘추상화’라고 합니다.

데이터베이스의 추상화를 구현한 대표적인 예로는 3단계 데이터베이스 구조(3-level-database architecture, =ANSI/SPARC 구조)가 있습니다. 이 구조는 이름대로 데이터베이스를 3계의 단계로 나누고, 단계마다 데이터베이스를 구성하는 데이터의 구조와 제약조건에 대해 구체적으로 기술하는 스키마를 가지고 있습니다.

외부 단계(External Level)

외부 단계(또는 뷰 단계)는 가장 추상화된 층으로 개별 사용자 또는 프로그램이 접근하는 층입니다. 사용자는 뷰 또는 SQL 쿼리를 통해 외부 스키마를 구성할 수 있습니다. 이 때 외부스키마는 아래 단계에 위치한 개념스키마로부터 생성되거나 사용될 수 있으므로 서브스키마(SubSchema)라고도 불립니다. 한 개의 개념스키마로부터 여러개의 서브스키마가 만들어질 수 있습니다.

개념 단계(Conceptual Level)

개념 단계에는 개념스키마(Conceptual Schema)가 존재합니다. 개념스키마는 논리스키마(Logical Schema)라고도 하는데 어떤 데이터들이 기억되어야 하는지, 그리고 그 데이터들 간에는 어떤 관계가 있는지를 정의합니다.

내부 단계(Internal Level)

내부 단계는 데이터들이 실질적으로 어떻게 저장되어 있는지에 관심이 있는 층으로 내부스키마(Internal Schema)를 가집니다. 내부 스키마는 데이터베이스의 물리적인 저장 구조를 기술하므로 물리스키마(Physical Schema)라고도 합니다.

데이터의 독립성top

이렇게 3단계 계층구조로 나눠진 데이터베이스는 데이터의 독립성을 가집니다. 데이터의 독립성이란 특정 스키마를 변경해도 상위 수준의 스키마 정의에 영향을 주지 않는 성질을 말합니다.

예를 들어 데이터베이스에 새로운 데이터가 추가되거나 필드가 추가/삭제되는 경우 현재 사용하고 있는 응용프로그램에서 사용자의 뷰에서 직접 관련되지 않는 부분들은 영향을 받지 않습니다. 이처럼 논리 스키마가 변하더라도 상위 단계에 존재하는 외부스키마(서브스키마)가 영향을 받지 않는 성질을 논리적 데이터 독립성이라고 합니다. 또 데이터베이스 관리 시스템의 성능 향상을 위해 시스템을 바꾸거나 물리스키마 구조를 변경하는 경우가 있습니다. 이 때 물리 스키마가 바뀌더라도 개념스키마나 사용자가 이용하는 응용 프로그램은 영향을 받지 않습니다. 이러한 성질은 물리적 데이터 독립성이라고 합니다.

이렇게 데이터 독립성을 가질 수 있는 것은 각 계층구조를 유기적으로 연결해주는 매핑(Mapping, 또는 사상)때문입니다. 특정 스키마가 바뀌더라도 매핑을 다시 함으로써 다른 계층의 스키마의 내용은 변하지 않아도 되는 것입니다. 결론적으로 데이터의 추상화 레벨에 따른 구조에 독립성, 매핑을 함께 표현하면 다음과 같이 정리할 수 있습니다.

데이터베이스 모델링top

현실 세계의 데이터를 데이터베이스로 옮긴다고 가정을 해볼까요? 저장할 때 되는대로 마구마구 저장할 순 없습니다. 현실 세계에 있는 데이터를 데이터베이스에 저장하기 위해서는 우선 데이터 모델을 세워야합니다. 데이터 모델은 현실 세계로부터 추출한 데이터의 의미, 데이터간의 관계, 제약 조건들을 기술한 것을 의미합니다. 데이터 모델은 사용자와 컴퓨터 중 어디에 초점을 맞추는 지에 따라 개념적 데이터 모델, 논리적 데이터 모델, 물리적 데이터 모델로 나누어 볼 수 있습니다.

개념적 데이터 모델
사용자에 초점을 맞추는 데이터 모델로 사용자가 데이터를 어떻게 인식하는지에 관심을 둡니다. 어떤 데이터들이 있고 각 데이터의 특징, 데이터 간의 관계 등을 정합니다. 개념적 데이터 모델의 대표적인 예로는 ER 데이터 모델이 있다고 합니다.

논리적 데이터 모델
컴퓨터와 사용자 둘 다를 고려하는 데이터 모델로 사용자가 이해하면서 실제로 저장 될 수 있는 구조를 설계합니다. 논리적 데이터 모델로는 관계형 데이터 모델, 계층형 데이터 모델, 네트워크형 데이터 모델 등이 있다고 합니다.

물리적 데이터 모델
컴퓨터에 초점을 맞춘 모델로 데이터가 어떻게 컴퓨터에 저장되는지에 관심을 둡니다. 예를 들어 레코드의 형식, 레코드 순서, 접근 경로 같은 정보들이 물리적 데이터 모델을 나타낸다고 합니다.

위와 같이 데이터 모델을 설계해 나가는 과정을 데이터 모델링이라고 하며 보통은 개념적 데이터, 논리적 데이터, 물리적 데이터 순으로 모델링을 진행합니다.

사실 위의 내용은 데이터 모델과 데이터 모델링에 관한 아주 간략한 정리 내용이기 때문에 데이터 모델이 무엇인지, 각각의 데이터 모델의 의미와 예 등을 완전히 이해했다고 보기는 어렵습니다^^;; 앞으로 배워나가면서 차근차근 정리하도록 하겠습니다.

결론top

보통 책 첫 부분은 쉬웠던 것 같은데 이 책은 왜 이렇게 어려운지… 데이터, 데이터베이스, 데이터베이스 관리 프로그램, 관계 데이터 모델, 데이터 모델링, 스키마, 데이터 독립성, 데이터베이스 모델링 등 하나도 쉬운게 없었네요. 추상적인 개념들의 뜻을 소화해내기 참 벅찼던 것 같습니다.

사실 아직도 이 단어들이 모두 낯설고 온전히 이해가 안되고 각각의 단어들이 머리 이곳 저곳에 산발되어 있는 느낌이지만 책을 공부해나가며 아 이 뜻이 이 뜻이었어?라고 깨닫는 유레카의 순간을 기대합니다..!

 


summer| bsidesoft 신입사원
디자인을 공부했던 섬머는 개발까지 해버리겠다는 욕심으로 개발자의 세계에 입문하게 되었습니다. 개발왕이 되어 멋진 제품을 만들어내는 꿈을 꾸고 있습니다. 코드, 디자인을 포함한 세상의 모든 아름다운 것들과 미드, 그리고 달리기를 좋아합니다.