표준 SQL 및 데이터베이스 입문
DBMS(데이터베이스 관리 시스템)가 도대체 무슨 일을 하는지, 어떤 기능들이 필요할지 생각해 봅시다. 예를 들어, 거래처 명함이 한뭉치있다고 생각해 봅시다. 주식회사XX의 담당자 이름과 전화번호를 확인하려면 어떻게 해야 할까요?
보통 생각하면 명함갯수가 적으니까 위부터 순서대로 살펴보는 수밖에 없지 않을까라고 생각할지도 모릅니다. 또한 오래된 명함이 섞여 있을지도 모르니, 마지막까지 다 봐야 할 것 같지요. 내 머릿속에는 내가 받은 명함 정보가 어렴풋이 기억하고 있으니, 보면 알 것 같은데라며 제대로 정리해두면 좋았을 것을이라고 후회하고 있지 않을까요?
즉, 이 명함보관함은 데이터베이스로 사용하기에는 적절히 정리되어 있지 않다는 의미입니다. 데이터를 언제든지 쓸 수 있는 상태로 잘 정리해 두고, 필요할 때 쉽게 꺼내 쓸 수 있도록 하는 것이 바로 DMBS의 역할입니다.
이는 체계적으로 정리 및 관리된 데이터의 집합을 데이터베이스(Database, DB)라고 합니다. 데이터베이스 관리 시스템(Database Management System, DBMS)은 이 데이터베이스를 관리하기 위한 시스템입니다. DBMS는 일반적으로 사용자용 표시나 조작등을 담당하는 애플리케이션 소프트웨어와는 독립적으로 동작하며, 데이터의 일관성(정합성)을 유지하면서 데이터를 조작할 수 있는 기능을 제공합니다. 이런 데이터 조작을 수행하기 위해 사용되는 언어가 바로 SQL입니다.
DBMS 작업
여기서 말하는 애플리케이션 소프트웨어라고 한다면, 학원관리 소프트웨어일 경우, 예를 들어, 출석관리, 성적관리용 시스템등이 있을 것입니다. 강사관리도 포함될 수 있고, 물류관련일 경우, 재고관리나 매출전표 발생시스템등이 있습니다. 중요한 것은 각 시스템이 개별적으로 데이터를 관리하는 것이 아니라, 공통의 데이터를 사용할 수 있도록 하는 것입니다.
지금 길동학원에서는 출석관리와 성적관리 데이터가 분리되어 있습니다. DBMS를 도입하면같은 데이터를 공유할 수 있게 되는 것입니다. 여기서 사용하는 언어가 바로 SQL입니다.
그럼 여기서 DBMS에 필요한 기능들이 무엇인지 대략적으로 살펴봅시다.
데이터 조작기능
동시실행 제어
트랜잭션 관리
기밀보호
장애복구
데이터조작이라고 하면, 앞서 말한 SELECT문입니다. 또한 SELECT문 외에도 데이터의 정의나 업데이트도 있습니다.
데이터조작 기능은 데이터의 구조와 형식을 정의하고, 데이터의 갱신(추가/삭제/변경)을 수행하며, 질의 처리를 진행하는 데이터베이스 시스템의 기본 기능입니다. 데이터 정의 단계에서는 예를 들어, 학생번호의 경우, 중복이 발생하지 않도록, 시험성적의 경우 '0~100 사이의 숫자'와 같은 어떤 데이터가 들어가야 하는지 명시합니다. 그리고 데이터 갱신 시에는 이 데이터 정의에 따라 일관성이 유지되도록 합니다.
여러 시스템에서 공통의 데이터베이스를 사용한다는 것은 같은 데이터를 동시에 사용해 된다는 것입니다. 여러 사용자가 같은 데이터를 동시에 조작할 수 있도록 하는 것이 중요합니다.
동시실행제어(Concurrency control, 병행성제어)는 여러 사용자가 동일한 데이터베이스를 동시에 사용할 수 있도록 하는 기능입니다. 동시실행제어는 단순히 같은 데이터를 동시에 참조할 수 있게 하는 것에 그치지 않고, 데이터 갱신시 모순이 발생하지 않도록 하는 메커니즘을 필요로 합니다.
예를 들어, 데이터 갱신시 업데이트가 완료될 때까지 다른 사용자가 해당 데이터를 참조하지 못하도록 합니다. 이런 제어를 베타제어(exclusive control)라고 하며, DBMS에서는 베타제어를 위해 데이터를 락(lock)할 수 있는 기능을 제공합니다.
보통 하나의 처리에서 여러 데이터를 갱신해야 하는 경우가 있습니다. DBMS는 이런 상황을 위한 기능을 갖추고 있습니다. 이런 경우 은행의 계좌이체를 예를 들면, 출금과 입금이 한세트로 이루어저야 합니다. 출금이라면 전표기록과 차감이 한세트가 되어야 합니다. 학생의 경우라면 문제출제 실수가 있을 경우, 모든 학생에게 점수가산을 동시에 이루어지는 경우가 비슷한 경우라고 할 수 있습니다. 즉, 업무에 따라 이런 경우가 많이 존재할 것입니다.
사용자 입장에서 하나의 묶음 처리(일련의 작업)을 '트랜잭션(transaction)'이라고 합니다. 예를 들어, 판매의 경우 입금과 재고차감이 하나의 묶음으로 처리됩니다. 트랜잭션 내의 작업은 '모두 성공'하거나, '모두 실패'하는 것 외에는 허용되지 않습니다. 입금 처리가 완료되었는데 재고는 그대로라면 전체의 정합성이 맞지 않기 때문입니다.
트랜잭션 전체의 처리가 성공하여 결과를 데이터베이스에 반영하는 것을 '커밋(commit)'이라고 하고, 도중에 처리에 실패하는 등의 이유로 트랜잭션 시작 전의 상태로 되돌리는 것을 '롤백(rollback)'이라고 합니다.
베타제어
데이터 사용을 누구에게 허용할지, 누가 데이터를 변경할 수 있는지를 제어하는 기능도 필요합니다. 이런 중요성은 충분히 이해됩니다. 독자나 필자가 다루는 건 개인정보이기 때문입니다.
기밀보호(security)에는 사용자인증, 접근제어(access control), 그리고 암호화등의 기능이 필요합니다. DBMS에서는 어떤 데이터에 대해 어떤 작업을 수행할 권한이 있는지를 사용자별로 관리합니다. 예를들어, A사용자는 데이터 업데이트가 가능하지만 B사용자는 참조만 가능하도록 제어하는 형태입니다.
장애대응도 중요합니다. 데이터베이스의 경우에는 데이터복구가 관건입니다.데이터 백업을 말하는 것으로 시스템에 딸라서는 데이터가 끊임없이 갱신되니까 백업방법에도 신경을 써야 합니다. 데이터 갱신기록, 이런 기록을 로드(log)라고 하며 로그를 이용해서 복구하기도 합니다.
장애복구(recovery)란, 시스템다운이나 디스크(SSD, HHD)의 파손등에 대비하는 기능입니다. 복구작업은 주로 백업데이터와 업데이트 작업을 기록한 로그파일을 기반으로 진행됩니다.
데이터를 유효한 상태로 유지하기 위해서는 여러가지 처리가 필요합니다. DBMS는 이런 기본적인 처리들을 모두 담당해줄까요? 하지만 데이터를 유효하게 유지하는 것만으로는 충분하지 않습니다. 가장 중요한 것은 '무엇을' 그리고 '어떤 형태로' 관리할 것인가입니다. '무엇을'이라는 것은 학원에서 주로 다루는 학생이름이나 캠퍼스, 선택과목, 그리고 성적같은 것일 것입니다. '어떤 형태'라는 건 구체적으로 어떤 식으로 관리할 것인지를 의미하는데, 이 부분에서 '데이터베이스의 종류'라는 것이 나오는데 이제 관계형 데이터베이스에 대해 설명합니다.
©2024-2025 GAEBAL AI, Hand-crafted & made with Damon JW Kim.
GAEBAL AI 개발사: https://gaebalai.com
AI 강의 및 개발, 컨설팅 문의: https://talk.naver.com/ct/w5umt5