관계형 데이터베이스는 서로 관련된 데이터 지점에 대한 접근을 저장 및 제공하는 데이터베이스 유형입니다. 관계형 데이터베이스는 데이터를 테이블에 직관적으로 간단하게 나타내는 관계형 모델을 기반으로 합니다. 관계형 데이터베이스에서 테이블의 각 행은 키라는 고유 ID가 포함된 레코드입니다. 테이블의 열에는 데이터의 속성이 들어 있으며, 각 레코드에는 일반적으로 각 속성에 대한 값이 있으므로 데이터 포인트 간의 관계를 손쉽게 설정할 수 있습니다.
소규모 기업에서 제품 주문 처리에 사용하는 두 개의 테이블을 예로 들어보겠습니다. 첫 번째 테이블은 고객 정보 테이블로, 각 레코드에는 고객의 이름, 주소, 배송 및 청구서 정보, 전화번호, 기타 연락처 정보가 담겨있습니다. 정보의 각 비트(각 속성)는 자체 열에 있으며, 데이터베이스는 각 행에 고유 ID(키)를 할당합니다. 두 번째 테이블은 고객 주문 테이블로, 각 레코드에는 주문 고객의 ID와 주문된 제품, 수량, 선택한 사이즈 및 색상 등이 포함되지만 고객의 이름이나 연락처 정보는 포함되지 않습니다.
이러한 두 테이블의 공통점은 ID 열(키)입니다. 그러나 이러한 공통 열 때문에 관계형 데이터베이스는 두 테이블 간에 관계를 생성할 수 있습니다. 회사의 주문 처리 애플리케이션이 데이터베이스에 주문을 제출하면 데이터베이스는 고객 주문 테이블로 이동하여 제품 주문에 대한 올바른 정보를 가져온 다음, 해당 테이블의 고객 ID를 사용하여 고객 정보 테이블에서 고객의 청구 및 배송 정보를 조회할 수 있습니다. 따라서 웨어하우스는 올바른 제품을 가져올 수 있고, 고객은 적시에 주문 상품을 배송 받을 수 있으며, 회사는 대금을 받을 수 있습니다.
관계형 모델에서는 데이터 테이블, 뷰 및 인덱스와 같은 논리 데이터 구조가 물리적인 스토리지 구조와 분리되어 있습니다. 이러한 분리 덕분에 데이터베이스 관리자는 논리적 구조로서 해당 데이터에 대한 액세스에 영향을 주지 않고 물리적 데이터 저장소를 관리할 수 있습니다. 예를 들어, 데이터베이스 파일의 이름을 변경해도 그 안에 저장된 테이블의 이름은 변경되지 않습니다.
논리적 구조와 물리적 구조의 차이는 데이터베이스 작업에도 적용되는데, 데이터베이스 작업은 애플리케이션에서 데이터베이스의 데이터 및 구조를 조작 할 수 있도록 명확하게 정의된 작업입니다. 논리적 작업에서는 애플리케이션이 필요한 콘텐츠를 지정할 수 있으며, 물리적 작업에서는 데이터의 액세스 방법을 결정한 다음 작업을 수행합니다.
데이터의 정확성과 액세스 가능성을 항상 보장하기 위해 관계형 데이터베이스는 특정한 무결성 규칙을 따릅니다. 예를 들어 무결성 규칙은 데이터베이스에 잘못된 정보가 입력될 가능성을 제거하기 위해 테이블에서 중복 행을 허용하지 않도록 지정할 수 있습니다.
데이터베이스 초창기에는 모든 애플리케이션이 자체적인 고유 구조에 데이터를 저장했습니다. 해당 데이터를 사용하는 애플리케이션을 빌드하고 싶을 때는 개발자가 필요한 데이터를 찾기 위해 특정 데이터 구조에 대해 많이 알아야만 했습니다. 이러한 데이터 구조는 비효율적이고 유지 관리가 까다로울 뿐만 아니라, 우수한 애플리케이션 성능을 제공하도록 최적화하기가 어려웠습니다. 관계형 데이터베이스 모델은 다중 임의 데이터 구조의 문제를 해결하도록 설계되었습니다.
관계형 데이터 모델은 모든 애플리케이션에서 사용 가능한 표준적인 데이터 표시 및 쿼리 방식을 제공했습니다. 처음부터 개발자들은 관계형 데이터베이스 모델의 가장 큰 장점이 정형 정보를 저장 및 액세스하는 직관적이고 효율적이며 유연한 방법인 테이블 사용에 있음을 알았습니다.
시간이 지남에 따라 개발자가 SQL(Structured Query Language)을 사용하여 데이터베이스에 데이터를 기록 및 쿼리하기 시작하면서 관계형 모델의 또 다른 강점이 부각되었습니다. 오랜 세월 SQL은 데이터베이스 쿼리용 언어로 널리 사용되었습니다. 관계형 대수를 기반으로 하는 SQL은 내부적으로 일관된 수학적 언어를 제공하여 모든 데이터베이스 쿼리의 성능을 보다 손쉽게 향상시킬 수 있게 해줍니다. 이에 비해 다른 접근 방식들은 개별 쿼리를 정의해야 합니다.
단순하지만 강력한 관계형 모델은 광범위한 정보 요구를 해결하기 위해 유형과 규모에 관계 없이 모든 조직에서 사용됩니다. 관계형 데이터베이스는 재고를 추적하고, 전자 상거래 트랜잭션을 처리하고, 엄청난 양의 미션 크리티컬한 고객 정보를 관리하는 데 사용됩니다. 데이터 포인트를 서로 연결하고 규칙을 기반으로 안전하고 일관된 방식으로 관리하기 위해 필요한 모든 정보에서 관계형 데이터베이스를 고려할 수 있습니다.
관계형 데이터베이스는 1970년대부터 사용되어 왔습니다. 관계형 모델은 이러한 장점 덕분에 오늘날에도 데이터베이스에서 가장 널리 채택되는 모델로 계속해 자리매김하고 있습니다.
관계형 모델은 애플리케이션과 데이터베이스 복사본(인스턴스) 간에 데이터 일관성을 유지하는 데 가장 적합합니다. 예를 들어 ATM에 돈을 입금한 다음, 휴대폰에서 계정 잔액을 확인할 때 고객은 해당 입금이 업데이트된 계정 잔액에 즉시 반영되기를 기대합니다. 관계형 데이터베이스는 데이터베이스의 여러 인스턴스가 항상 동일한 데이터를 갖도록 한다는 점에서 이러한 종류의 데이터 일관성에 있어 탁월합니다.
다른 유형의 데이터베이스는 대량의 데이터에서 이 정도 수준의 시의적절한 일관성을 유지하기 어렵습니다. NoSQL과 같은 일부 최신 데이터베이스조차도 "최종적인 일관성"만 제공하는 실정입니다. 이 원칙에서는 데이터베이스를 확장하거나 여러 사용자가 같은 데이터에 동시에 액세스 할 때 데이터가 이러한 상황을 "이해"하려면 약간의 시간이 걸립니다. 제품 카탈로그에 목록을 유지하는 것과 같은 일부 사례에서는 결과적 일관성이 허용되지만, 쇼핑 카트 트랜잭션과 같이 중요한 비즈니스 시스템에서는 관계형 데이터베이스가 여전히 최적 표준입니다.
관계형 데이터베이스는 커밋(즉, 데이터베이스를 영구적으로 변경)에 대한 엄격한 정책을 사용하여 매우 세분화된 수준에서 비즈니스 규칙 및 정책을 처리합니다. 항상 함께 사용되는 세 부품을 추적하는 재고 데이터베이스를 예로 들어보겠습니다. 한 부품을 재고에서 가져 오면 다른 두 부품도 가져와야 합니다. 세 부분 중 하나라도 가용 상태가 아니면 어떤 부분도 풀링하지 않습니다. 즉, 데이터베이스가 커밋을 수행하기 전에 세 부분 모두 가용 상태여야 합니다. 관계형 데이터베이스는 세 부분을 모두 커밋할 수 있는지 확인할 때까지 한 부분에 대한 커밋을 수행하지 않습니다. 이 다각적 커밋 기능을 원자성이라고 합니다. 원자성은 데이터베이스에서 데이터를 정확하게 유지하고, 비즈니스 규칙, 규정 및 정책을 준수하도록 보장하기 위한 핵심 개념입니다.
네 가지 중요한 속성은 관계형 데이터베이스 트랜잭션(원자, 일관성, 격리 및 내구성)을 정의합니다. 일반적으로 ACID라고 합니다.
데이터 액세스를 위해서는 많은 반복 작업이 필요합니다. 예를 들어, 데이터 테이블에서 정보를 가져오는 간단한 쿼리에서 원하는 결과를 생성하려면 수 백 또는 수 천 번 작업을 반복해야 할 수 있습니다. 이러한 데이터 액세스 기능에서는 데이터베이스 액세스를 위한 일종의 코드가 필요합니다. 애플리케이션 개발자는 이러한 기능을 사용하기 위해 새로운 애플리케이션마다 새로운 코드를 작성하기를 원치 않습니다. 다행히 관계형 데이터베이스에서는 간단한 애플리케이션 호출로 액세스할 수 있는 코드 블록인 저장 절차를 사용할 수 있습니다. 예를 들어, 단일 저장 절차는 여러 애플리케이션 사용자에게 일관된 레코드 태그 지정 기능을 제공할 수 있습니다. 또한 저장 절차는 개발자가 애플리케이션의 특정 데이터 기능이 특정 방식으로 구현되도록 하는 데 도움이 될 수 있습니다.
여러 사용자 또는 애플리케이션이 동시에 같은 데이터를 변경하려고 하면 데이터베이스에서 충돌이 발생할 수 있습니다. 잠금 및 동시성 기법을 사용하면 데이터의 무결성을 유지하면서도 충돌 가능성을 줄일 수 있습니다.
잠금은 데이터가 업데이트 되는 동안 다른 사용자 및 애플리케이션이 데이터에 액세스하지 못하도록 합니다. 일부 데이터베이스에서는 잠금이 전체 테이블에 적용되어 애플리케이션 성능에 부정적인 영향을 미칩니다. Oracle 관계형 데이터베이스 같은 다른 데이터베이스는 레코드 수준에서 잠금을 적용하여 테이블 내의 다른 레코드를 사용 가능한 상태로 유지하여 향상된 애플리케이션 성능을 보장합니다.
동시성은 여러 사용자 또는 애플리케이션이 동일한 데이터베이스에서 동시에 쿼리를 호출할 때 활동을 관리합니다. 이 기능은 데이터 제어를 위해 정의된 정책에 따라 사용자 및 애플리케이션에 대한 올바른 액세스를 제공합니다.
관계형 데이터베이스에 저장된 데이터의 저장, 관리, 쿼리 및 조회에 사용되는 소프트웨어를 관계형 데이터베이스 관리 시스템(RDBMS)이라고 합니다 RDBMS는 데이터 저장, 액세스 및 성능을 관리하기 위한 기능 뿐만 아니라, 사용자와 애플리케이션 및 데이터베이스 간에 인터페이스를 제공합니다.
데이터베이스 유형 및 관계형 데이터베이스 제품 중에서 선택을 할 때 결정에 영향을 미칠 수 있는 요소가 몇 가지 있습니다. 선택하는 RDBMS는 비즈니스 요구에 따라 다릅니다. 스스로에게 다음 질문을 해보세요.
시간이 지남에 따라 관계형 데이터베이스는 더 개선되고, 더 빨라지고, 더 강력해지고, 더 사용하기 쉬워졌습니다. 그러나 이는 더욱 복잡해졌으며, 관계형 데이터베이스 관리는 오랫동안 어려운 업무로 인식되어 왔습니다. 개발자는 전문 지식을 활용해 비즈니스에 가치를 제공하는 혁신적인 애플리케이션 개발에 집중하는 대신, 데이터베이스 성능을 최적화하는 데 필요한 관리 활동에 대부분의 시간을 할애해야 했습니다.
이제 자율운영 기술이 관계형 모델, 클라우드 데이터베이스 기술 및 머신러닝의 강점을 바탕으로 새로운 유형의 관계형 데이터베이스를 선보이고 있습니다. 자율구동 데이터베이스(자율운영 데이터베이스라고도 함)는 관계형 모델의 성능과 이점은 그대로 유지하면서 인공 지능(AI), 머신러닝 및 자동화를 사용해 쿼리 성능 및 관리 작업을 모니터링하고 개선합니다. 예를 들어 쿼리 성능을 개선하기 위해 자율 운영 데이터베이스는 쿼리 속도를 높이는 인덱스에 대한 가설 검정을 수행한 다음, 가장 우수한 것을 생산에 투입하며 이 모든 과정은 자율적으로 진행됩니다. 자율 운영 데이터베이스는 사람의 개입 없이도 지속적으로 이러한 개선을 이룰 수 있습니다.
자율 운영 기술을 통해 개발자는 반복적인 데이터베이스 관리 업무에서 벗어날 수 있습니다. 예를 들어 더 이상 인프라 요구사항을 미리 결정할 필요가 없습니다. 대신에 자율 운영 데이터베이스를 사용하면 데이터베이스 성장을 지원하기 위해 필요에 따라 스토리지 및 컴퓨팅 리소스를 추가할 수 있습니다. 몇 단계만 거치면 개발자는 자율 운영 관계형 데이터베이스를 손쉽게 생성하여 애플리케이션 개발 시간을 단축할 수 있습니다.