[[TableOfContents]] ==== 데이터베이스의 정의 ==== 데이터베이스가 무엇이냐고 필자에게 묻는다면 '데이터를 잘 꺼내보고, 잘 저장하기 위한 개념과 논리' 라고 하겠다. 여기에 '여러 명의 사용자' 또는 '고도로 구조화'와 같은 여러 가지 옵션들이 붙지만 '데이터를 잘 꺼내보고, 잘 저장하기 위한'에 포함이 된다. 여기서 논란의 여지가 있는 것은 역시 '잘'이란 부사이다. 데이터를 '잘' 꺼내보고, '잘' 저장하는 것이 데이터베이스의 지식영역의 전부(데이터 분석과 관련된 통계, 마이닝 분야는 데이터를 관리하는 것이 아닌 데이터 자체에 대한 해석의 영역이므로 데이터베이스의 지식영역에서는 제외한다)라고 봐도 된다. 데이터를 잘 꺼내보고 잘 저장하기 위한 일련의 작업들 중에서 가장 중요한 단계는 누가 뭐라고 해도 데이터 모델링과 설계 단계다. 나머지는 DBMS 제품과 기능의 우수성, 최적화된 SQL, 우수한 하드웨어의 구성에 따라서 결정된다. 조직의 데이터베이스 시스템을 구축하는데 자체적으로 DBMS를 제작하지는 않으므로 데이터 모델링과 설계, SQL작성에 집중하면 된다. 자, 그럼 데이터를 꺼내보기 좋게 잘 저장해 놓았다고 하자. 왜 이런 짓을 해야 할까? 이유는 사용자의 정보욕구를 만족시키기 위해서다. 결국 데이터베이스는 종이로 된 문서나 파일보다 정보를 얻기 편리하게 해보자는 의도에서 만들어진 것이다. 그렇다면 다른 문서에서는 데이터베이스를 어떻게 정의하고 있는지 살펴보자. 모두 비슷하므로 첫 번째 정의를 설명하도록 하겠다. * 논리적으로 연관된 하나 이상의 자료의 모음으로 그 내용을 고도로 구조함으로써 검색과 갱신의 효율화를 꾀한 것이다. 즉, 몇 개의 자료 파일을 조직적으로 통합하여 자료 항목의 중복을 없애고 자료를 구조화하여 기억시켜 놓은 자료의 집합체라고 할 수 있다. -- 네이버 백과사전 * 어느 한 조직의 여러 응용 시스템들이 공용할 수 있도록 통합, 저장된 운영 데이타의 집합이다. -- 정익사, 이석호, 데이타베이스 시스템 * 조직의 여러 사용자의 다양한 정보 욕구를 충족시키기 위한 데이타의 집합체. --박영사, 서길수, 데이타베이스 관리 첫 번째로 '논리적으로 연관된'을 살펴보자. 연관되어있다는 것은 어떤 개념의 범위에 속해 있다는 뜻이 된다. 지금 이 글을 보고 내용을 이해하고 있는 사람은 "한글을 읽고 그 뜻을 이해 할 수 있는 사람" 으로써 나와 연관될 수 있다. 집합의 명제로 표현하면 다음과 같다. 집합 A = {x | x는 한글을 읽고 그 뜻을 이해 할 수 있는 사람들} 집합의 명제 속에 속하는 원소들끼리는 논리적으로 연관됨을 의미한다. 데이터베이스는 집합체이므로 논리적으로 연관되어 있다. 두 번째로 '하나 이상의 자료의 모음'의 "하나 이상"의 뜻은 인간이 감당하기 힘들 정도의 자료의 양으로 이해하면 될 것이다. 여러분이 어느 산골 1평 남짓한 구멍가게를 운영한다고 가정하자. 상품은 30개가 되지 않는다. 하루 매출은 1만원을 넘지 않는다. 물건을 사기 위해 오는 사람도 몇 명 되지 않는다. 다른 경쟁 가게도 없다. 데이터 관리를 위해 데이터베이스 시스템이 필요할까? 반면에 대형 창고형 매장을 생각해보자. 하루에 수천 가지의 상품들이 몇 억 개씩 팔려나간다. 당연히 수작업으로는 감당되지 않으므로 데이터베이스 시스템이 필요하다. 세 번째로 '그 내용을 고도로 구조화함으로써 검색과 갱신의 효율화를 꾀 한 것'이란 글에 대해서 살펴보자. 위에서 예를 든 대형 창고형 매장으로 다시 돌아가보자. 그 수많은 상품들을 아무런 진열도 하지 않고 그냥 쏟아 부어 놓았다고 가정하자. 여러 가지 상품이 산더미처럼 엉켜 있을 것이다. 상품의 가치하락도 문제지만, 운이 없다면 원하는 물건을 사기 위해서는 여기 저기 오랜 시간을 뒤져봐야 할 것이다. 또한 A라는 상품이 없다고 어떤 고객이 눈앞에서 난리를 치고 있다. 매니저는 전 직원을 동원하여 A 상품을 찾았다. 이를 본 옆의 고객도 자기도 찾아달라고 난리다. 또 다른 고객도 찾아달라고 한다. 옆의 고객들은 서로 먼저 찾았다고 줄다리기 경합을 벌이고 있다. 장사가 될까? 데이터베이스도 마찬가지이다. 데이터를 잘 정리정돈 해놓아야 데이터를 잘 사용할 수 있으며, 이것이 데이터를 고도로 구조화하는 하는 것이다. 몇 백 기가 바이트(GB), 몇 테라 바이트(TB)의 데이터베이스 시스템에서 내가 원하는 데이터를 쉽게 찾을 있는 이유도 고도로 구조화되어 있기 때문이다. 네 번째로 '몇 개의 자료 파일을 조직적으로 통합하여 자료 항목의 중복을 없애고'를 살펴보자. 파일시스템이 지금도 사용되고 있고, 어떤 경우에는 데이터베이스보다 더 효율적이지만, 대부분의 경우 "데이터의 중복"에 의한 여러 가지 문제점을 가졌었다. 이러한 문제점을 해결하기 위해 데이터베이스 출현하게 되었다. ==== 데이터베이스의 출현배경 ==== 데이터베이스 시스템이 출현하기 전에는 파일 시스템을 사용하였다. 물론 지금도 파일 시스템을 사용하고 있으며, 특정한 경우에는 데이터베이스 시스템보다 더 효율적인 경우도 허다하다. 하지만 데이터베이스 시스템이 발전을 한 것은 여러모로 파일 시스템보다 유용한 경우가 많기 때문이다. 여러 가지 이유가 있지만 필자는 아래의 2가지가 데이터베이스의 직접적인 출현 배경이라고 생각한다. * 데이터의 중복과 고립성(silo) * 변화에의 취약(유연성 문제) 데이터의 중복문제는 파일 시스템 고유의 문제가 아닌 지금도 발생하는 문제다. 하지만 데이터베이스가 출현되고 나서는 훨씬 나아졌다. 각각의 서브 시스템들간에 고립화는 자료의 중복을 더욱 증가시킨다. 자료의 중복은 성능을 떨어뜨리고, 정보시스템의 복잡성을 가중시키는 원인이 된다. 데이터의 중복과 고립화를 없애는 일은 데이터베이스에서 너무나도 중요하므로 아래의 절에서 따로 다루도록 하겠다. 파일 시스템은 변화에 매우 취약하다. 하지만 데이터베이스는 논리적, 물리적 독립성으로 인해 기본적으로는 변화에 매우 강하다. 물론 어떻게 설계하고 구현하느냐에 따라 파일 시스템보다 더 변화에 취약해 질 수도 있다. 변화 취약한 정보 시스템은 비용을 증가시킨다. 실제로 소프트웨어 라이프 사이클 중 유지보수 단계에 비용이 70% 정도(객체지향 소프트웨어 공학, 유해영역, McGraw-Hill Korea)라고 한다. 필자는 파일 시스템과 데이터베이스 시스템을 비교하였다. 왜 비교했을까? 그 이유는 데이터베이스 시스템을 데이터베이스 시스템처럼 사용해야 한다는 것을 강조하기 위함이다. 데이터베이스 시스템을 파일 시스템처럼 사용하여 큰 문제가 발생하는 것을 많이 보았다. 물론 개발환경이 열악한 탓도 있다. DBA(DataBase Administrator)도 없이 개발자가 1인 다역을 맡는 경우도 중소기업에서는 일상다반사니까 말이다. ---- good!!! 완전 이해가 쏙쏙 됩니다..ㅋ -- 홍 2012-04-01 23:31:06