Chapter 5: 데이터베이스가 강력한 이유

수백만 개의 행을 멈추지 않고 처리하기

대용량 Excel 파일을 다뤄본 적이 있다면 잘 아실 겁니다. 스크롤이 느려지고, 계산이 오래 걸리며, 심하면 Excel이 완전히 멈춰버리는 경우도 있죠. 이는 Excel이 전체 워크북을 컴퓨터 메모리에 로드하기 때문인데, 메모리에는 한계가 있습니다.

반면, 데이터베이스는 방대한 데이터를 효율적으로 처리하도록 설계되어 있습니다. 어떻게 이런 일이 가능한지 알아봅시다:

최적화된 스토리지

Excel과 달리, 데이터베이스는 모든 데이터를 메모리에 한꺼번에 불러오지 않습니다. 필요한 데이터만 선택적으로 불러오는 정교한 기술을 사용하므로, 수백만 또는 수십억 개의 행이 있는 테이블도 성능 문제 없이 처리할 수 있습니다.

예를 들어, 500개의 매장에서 일일 매출을 추적하는 소매 회사는 하루에 50,000건의 거래 기록을 생성할 수 있습니다. 1년이면 1,800만 건이 넘는 기록이 쌓이게 되죠! Excel이라면 감당하기 어려운 양이지만, 잘 구성된 데이터베이스는 이러한 규모를 무리 없이 처리합니다.

인덱싱

데이터베이스는 데이터 검색 속도를 높이기 위해 **인덱스(index)**라는 특수한 데이터 구조를 사용합니다. 책의 색인처럼, 원하는 정보를 전부 읽지 않고도 빠르게 찾을 수 있도록 도와줍니다.

예를 들어, 고객을 성(last_name)으로 자주 검색한다면, last_name 컬럼에 인덱스를 추가함으로써 검색 속도를 100배까지 향상시킬 수 있습니다. Excel에서는 모든 데이터를 처음부터 끝까지 스캔해야 하므로 비교가 어렵습니다.

쿼리 최적화

데이터베이스는 단순히 사용자의 명령을 그대로 실행하지 않습니다. 쿼리를 분석하여 가장 효율적인 실행 계획을 수립한 후 데이터를 검색합니다. 이 쿼리 최적화(query optimization) 과정은 자동으로 이루어지며, 성능 향상에 큰 도움을 줍니다.

디스크 기반 연산

Excel은 전체 워크북을 RAM(메모리)에 올려야 하지만, 데이터베이스는 메모리에 다 담을 수 없는 연산도 디스크와 메모리 간의 효율적인 데이터 이동을 통해 처리할 수 있습니다. 즉, 데이터베이스는 컴퓨터의 메모리 용량을 초과하는 크기의 데이터도 다룰 수 있습니다—Excel에서는 불가능한 일입니다.

스크롤 대신 쿼리하기

Excel에서 정보를 찾으려면 보통 스크롤하거나, 필터를 적용하거나, Ctrl+F로 검색합니다. 작은 데이터셋에서는 괜찮지만, 데이터가 커지면 이런 방법은 비효율적입니다. 데이터베이스는 훨씬 강력한 방법을 제공합니다: 바로 쿼리(query)입니다.

SQL의 힘

**SQL(Structured Query Language)**은 데이터베이스와 소통하는 표준 언어입니다. 데이터를 직접 탐색하는 대신, 원하는 정보를 SQL로 명시하면 데이터베이스가 정확하게 해당 데이터를 찾아줍니다.

예를 들어, Excel에서 "뉴욕 거주 고객 중 지난달에 $1,000 이상을 지출한 고객"을 찾으려면 필터링과 수작업이 필요하지만, SQL에서는 단순한 쿼리 한 줄로 해결됩니다:

SELECT customer_name, email, total_spent
FROM customers
WHERE state = 'NY' AND total_spent > 1000
  AND purchase_date >= '2025-03-01'
ORDER BY total_spent DESC;

이 쿼리는 원하는 정보를 정확히 기술하고 있으며, 데이터베이스가 결과를 빠르게 정렬해서 반환합니다. SQL은 이후 챕터에서 자세히 다룰 예정이지만, 이 예시만으로도 수작업 대신 쿼리가 얼마나 강력한지 알 수 있습니다.

복잡한 계산을 간단하게

데이터베이스는 대규모 데이터셋에서의 계산에 매우 강력합니다. Excel에서는 복잡한 수식이나 VBA 매크로가 필요한 작업도, SQL 쿼리로 간단히 처리할 수 있습니다.

예를 들어, 상품 카테고리별 월별 평균 주문 금액을 계산하려면 Excel에서는 여러 단계가 필요하지만, SQL에서는 한 줄로 가능합니다:

SELECT 
    product_category,
    MONTH(order_date) as month,
    AVG(order_amount) as average_order_value
FROM orders
GROUP BY product_category, MONTH(order_date)
ORDER BY product_category, month;

일관된 결과

여러 사람이 같은 Excel 파일을 작업하다 보면 필터나 정렬 기준, 수식이 서로 달라져서 결과가 일관되지 않을 수 있습니다.

데이터베이스에서는 모두가 같은 데이터 소스에 대해 같은 SQL 쿼리를 사용하므로, 누가 작업하든 결과는 항상 동일합니다. 이로 인해 협업 시 혼란을 줄이고 정확성을 높일 수 있습니다.

다중 사용자 접근과 버전 관리

Excel의 큰 한계 중 하나는 협업 기능입니다. "다른 사용자가 편집 중인 파일입니다"라는 메시지를 본 적 있으시죠? 또는 수많은 버전의 파일을 병합해야 했던 경험도요.

동시 접근

데이터베이스는 다중 사용 환경을 염두에 두고 설계되었습니다. 수십, 수백 명의 사용자가 동시에 같은 데이터베이스를 읽고 수정할 수 있으며, 충돌이 발생하지 않도록 다음과 같은 기술을 사용합니다:

  1. 트랜잭션 관리: 여러 변경사항을 하나의 "트랜잭션"으로 묶어, 전부 성공하거나 전부 실패하게 합니다. 일부만 반영되는 상황을 방지합니다.
  2. 잠금 메커니즘: 전체 데이터베이스가 아닌, 변경 중인 특정 레코드만 잠궈 다른 사용자의 작업을 방해하지 않습니다.
  3. 충돌 해결: 두 사용자가 동시에 같은 데이터를 수정할 경우, 미리 정의된 규칙에 따라 충돌을 해결합니다.

더 이상 "버전 지옥" 없음

Excel에서는 Sales_Report_v3_Final_ACTUALLY_FINAL_2.xlsx 같은 파일 이름이 흔하죠. 데이터베이스에서는 이런 일이 없습니다:

  1. 항상 최신 데이터를 실시간으로 작업
  2. 모든 변경사항은 실시간으로 반영
  3. 파일을 이메일로 주고받거나 수동 병합할 필요 없음

감사 로그 (Audit Trail)

대부분의 데이터베이스 시스템은 누가, 언제, 어떤 데이터를 변경했는지 추적할 수 있습니다. 이를 통해:

  1. 특정 레코드의 변경 이력 확인
  2. 특정 데이터의 변경자 식별
  3. 필요 시 변경사항 롤백
  4. 데이터 추적이 필요한 규제 요건 충족

이런 수준의 추적을 Excel에서 구현하려면 복잡한 매크로와 모든 사용자의 철저한 관리가 필요하며, 그마저도 완벽하지 않습니다.

데이터 무결성과 검증

Excel에서는 거의 모든 셀에 무엇이든 입력할 수 있습니다. 때로는 유용하지만, 데이터 품질 문제로 이어질 수 있습니다. 데이터베이스는 정확성과 일관성을 확보하기 위한 강력한 메커니즘을 제공합니다.

데이터 타입 강제

데이터베이스의 각 컬럼은 고정된 데이터 타입을 갖습니다:

  • 텍스트 컬럼: 문자 (이름, 설명 등)
  • 숫자 컬럼: 숫자 (가격, 수량 등)
  • 날짜 컬럼: 날짜 및 시간
  • 불리언 컬럼: 참/거짓 값

이 타입들은 자동으로 강제됩니다. 숫자 컬럼에 "abc"를 넣으려고 하면 데이터베이스가 거부해, 데이터 손상을 방지합니다.

제약조건과 규칙

데이터베이스는 데이터가 반드시 따라야 하는 규칙(제약조건, constraints)을 정의할 수 있습니다:

  1. NOT NULL: 값이 반드시 있어야 함
  2. UNIQUE: 중복된 값 허용 안 됨
  3. CHECK: 특정 조건을 만족해야 함 (예: price > 0)
  4. DEFAULT: 값이 없을 때 자동으로 설정되는 기본값
  5. FOREIGN KEY: 다른 테이블과의 관계 유효성 검증

이러한 제약은 자동으로 적용되어 잘못된 데이터를 입력할 수 없습니다. Excel에도 데이터 유효성 검사가 있지만, 선택 사항이며 우회하기 쉽습니다.

참조 무결성

이전 챕터에서 다룬 primary key와 foreign key를 기억하시나요? 데이터베이스는 이 관계를 자동으로 강제하여 **참조 무결성(referential integrity)**을 유지합니다:

  1. 존재하지 않는 고객에 대한 주문을 생성할 수 없음
  2. 주문이 있는 고객을 삭제할 수 없음 (삭제 시 어떻게 할지 명확히 해야 함)
  3. 고객 ID가 바뀌면 관련된 모든 참조가 자동으로 업데이트됨

Excel에서는 VLOOKUP과 데이터 유효성 검사를 사용하더라도 이 수준의 무결성을 유지하기 어렵습니다.

보안과 접근 제어

Excel에서의 보안은 거의 전부 아니면 전무입니다. 파일을 가진 사람은 거의 모든 것을 볼 수 있고, 수정할 수도 있습니다. 데이터베이스는 훨씬 정교한 보안 기능을 제공합니다.

사용자 인증

데이터베이스는 사용자가 로그인하여 인증을 거치도록 요구합니다. 이 인증은 다음과 같은 역할을 합니다:

  1. 사용자의 신원 확인
  2. 접근 이력(감사 로그) 생성
  3. 개인화된 접근 권한 부여

세분화된 권한 제어

인증된 사용자에게는 다음과 같은 구체적인 권한이 부여됩니다:

  1. SELECT: 데이터 조회
  2. INSERT: 새 데이터 추가
  3. UPDATE: 기존 데이터 수정
  4. DELETE: 데이터 삭제
  5. EXECUTE: 저장 프로시저 또는 함수 실행

이 권한은 다음 수준에서 조정 가능합니다:

  • 데이터베이스 전체
  • 특정 테이블
  • 특정 컬럼
  • 특정 행 (조건 기반 접근 제어)

예를 들어, 영업 사원은 자신의 지역 고객만 볼 수 있고, 매니저는 전체 고객을 볼 수 있으며, 인사 담당자는 이름은 볼 수 있지만 급여는 볼 수 없습니다. 반면, 급여 담당자는 모두 확인 가능하죠.

Excel에서는 이런 세밀한 제어가 불가능하며, 여러 파일을 나누어 관리해야만 유사한 효과를 낼 수 있습니다.

결론: 데이터베이스의 장점

Excel은 여전히 훌륭한 도구지만, 데이터 양이 많아지고 협업이 중요해질수록, 데이터베이스는 뛰어난 성능, 협업 지원, 무결성 보장, 보안성 측면에서 압도적인 장점을 제공합니다.

다음 챕터에서는 관계형 데이터베이스의 구조와 테이블 간 데이터 연결 방식에 대해 자세히 알아보겠습니다. 이는 SQL이라는 강력한 언어를 배우기 위한 기초가 됩니다.