티스토리 뷰



우리 생활에 밀접하고 매우 중요한 역할을 감당하지만 너무 익숙하거나 친숙한 탓에 그 존재를 잊어버리고 사는 것들이 있습니다. 대표적인 것이 냉장고가 아닐까 싶습니다. 대한민국 대부분의 가정에 냉장고 없는 집이 없고 심지어 원룸이나 모텔, 콘도 같은 사람들이 잠시 머물다 떠나는 곳 까지도 냉장고가 자리하고 있는 실정입니다. 냉장고를 사용하는 사람들의 입장에서 생각해 보면 냉장고 사용법이 어렵다거나 복잡하다는 생각을 하는 사람은 거의 없을 것입니다. 전원 넣고 문 열고 닫는 것이 사용법의 전부라 해도 과언이 아닙니다. 효율적으로 사용하기 위하여 칸칸 마다 별도의 용기로 정리하고 포스트잍으로 구입한 일자를 메모하는 주부님도 있지만 많은 경우는 그냥 빈곳에 넣었다가 필요할때 꺼내는 것이 냉장고 사용 요령의 전부라 할 수 있습니다.

 

냉장고를 대하는 수많은 사람들의 태도와 냉장고의 기능적 특성은 데이터베이스와 상당 부분 유사하기 때문에 데이터베이스를 이해하는데 많은 도움을 받을 수 있습니다. "DB를 냉장고처럼 쓰자" 시리즈의 정체는 실제로는  데이터베이스에 대한 이해와 사용법이지만  냉장고와의 비교를 통해서 데이터베이스를 어렵거나 복잡한 시스템이라 생각하지 않고 마치 냉장고 사용하듯 데이터베이스를 쉽고 친숙하게 다룰 수 있도록 하는데 그 목적을 두고 있습니다.


위키피디아의 데이터베이스 정의를  인용해보면

여러 사람들이 공유하고 사용할 목적으로 통합 관리되는 정보의 집합이다. 논리적으로 연관된 하나 이상의 자료의 모음으로 그 내용을 고도로 구조화함으로써 검색과 갱신의 효율화를 꾀한 것이다. 즉, 몇 개의 자료 파일을 조직적으로 통합하여 자료 항목의 중복을 없애고 자료를 구조화하여 기억시켜 놓은 자료의 집합체라고 할 수 있다.

"데이터를 모아 놓은것"이라는 개념적 정의를 내리고 있는데 실제적인 모습의 데이터베이스는 데이터베이스 시스템(DBS, DataBase System)의 일부로 데이터베이스 관리 시스템(DBMS, DataBase Management System)의 통제를 받아 사용자의 요구에 따라 정보를 저장 혹은 추출하기 위한 정보의 기반 역할을 하는 곳입니다.

일반적으로 개발자들간에 "데이터베이스는 무엇을 사용합니까?"라고 질문하곤 하는데 이 질문을 구체적으로 따져보면 "어떤 DBMS를 사용합니까?"가 더 정확한 질문입니다. 일반적으로 DBMS는 주요 메이저 IT 기업들이 만들고 있고 버전에 따라 기능에도 차이가 있어서 DBMS 자체가 이미 브랜드화 되어 있습니다.  그래서 "우리는 MySQL 5를 사용하고 있어" 정도의 대답이면 상호 의사 소통에 충분한 정보를 제공하는 것입니다. 그런데 이런 현상은 냉장고도 마찬가지 입니다. 우리가 냉장고를 지창할 때 냉장고 박스 뒷편에 있는 압축기, 기화기, 모세관, 컨트롤러 등을 염두에 두지 않고 있고 내용물의 종류, 사용 빈도, 용도, 사용 장소등의 기준에 따라 몇몇 브랜드를 중심으로 냉장고를 선택하는 것처럼 데이터베이스를 중심으로 정보를 저장, 추출 및 관리하고자 한다면 특정 DBMS에 대한 깊은 지식 없이도 정보의 양, 사용 패턴 및 성능 요구사항 등의 기준에 따라 어떤 DBMS를 기반으로 하더라도 적절한 데이터베이스 시스템 구축이 가능하다는 것입니다.

 

냉장고가 낮은 온도로 음식물을 보관할 수 있는 기본 원리는 암모니아, 프레온, CFC등의 냉매가 액체 상태에서 기체 상태로 기화할 때 주위 온도를 낮추는 현상을 이용한 것으로 기화과정을 거친 냉매는 다시 냉각과 압축을 과정을 순환하게 됩니다. 그렇지만 많은 냉장고 사용자가 냉장고의 이런 원리를  이해하거나 깊게 탐구하지 않는 것처럼 대다수의 데이터베이스 사용자는 DBMS가 내부적으로 수행하는 다양한 작업, 예를 들어 파싱, 쿼리 캐싱, 플랜 캐싱, 버퍼 관리, 샤딩, 아카이빙, 리커버리, 가상 공간 관리등 전문 DBMS 개발자들이 다루는 영역을 굳이 공부하지 않더라도 간단한 사용법만 익히면 충분히 데이터베이스 사용의 장점을 누릴 수 있습니다. 물론 내부 기능 흐름을 아는 것은 도구를 효율적으로 사용하기 위한 초석이 되지만, 많은 경우 고가 브랜드의 냉장고로 맥주 캔 몇개를 보관하는 것이 전부인것과 같은 사례가 비일비재합니다. 엄청난 자원 낭비의 요소가 데이터베이스 시스템에도 존재합니다. 이미 냉장고 기술의 수준은 업체간에 큰 차이가 없음에도 브랜드에 따라 가격차이가 있는 것 처럼 DBMS의 경우에도 오픈소스 DBMS가 충분한 성능과 기능을 갖추고 있음에도 불구하고 상용 DBMS가 시장의 주요 영역을 차지 하고 있는 것이 현실입니다.

 

냉장고의 핵심 경쟁력이라고 한다면 디자인과 함께 소비전력이 몇 등급인지, 용량은 얼마나 되는지, 친환경 냉매를 쓰는지등에 따라 제품 경쟁력의 차이를 보입니다. DBMS의 경우에는 지원하는 고급 기능(파티션, 트랜잭션,  복제,  외래키, 샤딩.......)과 도구에는 무엇이 있는지에 차이가 있을 수 있지만 냉장고 처럼 소비전력이 몇 등급이다와 같은 객관적인 기준이 없습니다. 유사한 벤치 마킹 기법들이 있으나 이 평가 방법 역시 DB 튜닝이나 설정등에 따라 결과가 천차만별이고 현실과 부합하지도 않기 때문에 성능 판단 기준으로 적용하기도 애매합니다. 성능 기준이 애매하다보니 DBMS 선택의 핵심 기준은 브랜드와 정책 결정자 또는 개발자의 개인 선호도에 지나치게 치우쳐 있는 것이 사실입니다. 사용해보고 선택할 수 있다면 제일 좋겠지만 상용 DBMS의 경우 적용하기 어려운 문제이고 응용 프로그램이 여러 DBMS를 사용할 수 있는 준비가 되어 있지 않다면 이 또한 제한 요소이기 때문에 오픈소스 DBMS가 아니라면 DBMS를 사용해 보고 선택하기란 쉽지 않습니다. 그래서 상용 DBMS를 적용하는 많은 프로젝트에서 어떤 DBMS를 사용할 것인지 결정하는 문제는 시스템 구축에 있어 매우 중요한 요소로 작용합니다. 반면에 최근 공개되고 있는 다양한 오픈소스 프로젝트들은 응용 프로그램 차원에서 어떤 DBMS를 선택하더라도 동작가능하도록 준비해 놓고 있기 때문에 그야말로 용도와 정보의 량 등에 따라 자유롭게 DBMS를 선택할 수 있습니다. 예를 들어 위키피디아의 기반 패키지인 미디어위키(http://www.mediawiki.org)의 경우 아래와 같은 DBMS들을 응용 프로그램 수정없이 설정만으로 DB 엔진으로 사용할 수 있습니다.


    • PostgreSQL
    • MySQL
    • Oracle
    • SQLite
    • IBM DB2
    • Microsoft SQL Server


사용자가 데이터베이스를 사용하기 위해서는 DBMS와 대화해야하고 DBMS와 사용자 사이의 대화는 SQL(Structured Query Language)를 사용합니다. 일부 DBMS는 표준인 SQL에 문법을 확장하여 기능을 제공하거나 API(Application Programming Interface)를 통해서 DBMS에 작업을 요구할 수 있도록 기능을 제공하기도 하지만 SQL 핵심 기능은 모든 DBMS에서 동일하게 지원한다고 생각해도 좋습니다. 표준도 진화하기 때문에 특정 DBMS가 어떤 SQL 표준을 따르고 있는지를 확인해서 적절한 문법을 사용하면 됩니다. DBMS의 교과서 격인 PostgreSQL의 경우 다음과 같이 버전에 따라 적용한 SQL 표준이 발전해 왔음을 확인할 수 있습니다.


    • PostgreSQL 9.2 - SQL:2011
    • PostgreSQL 9.1 - SQL:2008
    • PostgreSQL 8.0 - SQL:2003
    • PostgreSQL 7.3 - SQL99
    • PostgreSQL 7.0 - SQL92


사용자가 DBMS 도구나 응용 프로그램을 통해서 SQL기반의 질의문을 DBMS로 전달하면 DBMS는 구문 분석 과정을(Parsing) 거쳐서 어떻게 자료를 찾을지 실행 계획을(Query execution plan) 세우거나 정보 갱신/삽입/삭제 등의 작업을 수행합니다. DBMS가 작업 결과나 질의 결과를 사용자에 전달하기까지 얼마나 빠르고 정확하게 사용자의 요구를 충족시키는지는 DBMS 자체의 성능, 동시 작업자 규모, 하드웨어 성능, 데이터베이스 설계 품질, 적절한 SQL 사용등 다양한 요소가 복합적으로 작용하게 됩니다. 그렇지만, 당장 고도의 성능과 안정성을 요구하는 시스템을 개발하거나 유지보수하는 사용자가 아니라면 냉장고를 대하듯 보다 친숙하고 편안하게 데이터베이스를 대할 수 있기를 권면하고 싶습니다. 특히, 개발자라면 직접 DBMS를 설치하고 데이터베이스를 생성하고 SQL을 통해서 정보를 입력하고 질의하는 단계를 모두 경험하면서 시스템 이해의 폭을 넓히면 보다 안정적인 시스템 개발을 도모할 수 있을 것입니다. 물론 개발자가 아니어도 간단한 SQL을 익혀두면 업무 수행에 날개를 다는 일이 될것입니다. 웹서버와 웹브라우저가 HTML로 대화하듯이 SQL로 DBMS와 대화를 시작해 보세요.


댓글
댓글쓰기 폼