Chapter 4: 데이터베이스란 무엇인가?
거대한 스마트 엑셀 워크북이라고 생각해보세요
엑셀에 익숙하다면, 데이터베이스에 대해 생각보다 더 많은 것을 이미 알고 있는 셈입니다. 사실, 데이터베이스는 개념적으로 매우 강력하고 매우 똑똑한 엑셀 워크북과 유사합니다—단지 훨씬 더 큰 데이터셋을 유연하고 정교하게 다룰 수 있는 ‘슈퍼파워’를 가진 버전이라고 보면 됩니다.
당신의 엑셀 워크북이 다음과 같다고 상상해보세요:
- 수백만 개의 행을 저장해도 느려지지 않고
- 수십 명이 동시에 편집해도 충돌이 없으며
- 모든 시트 간 데이터 일관성을 자동으로 보장하고
- 사용자의 권한에 따라 접근 가능한 데이터를 세밀하게 통제하며
- 다른 시스템 및 애플리케이션과 매끄럽게 연결되는
이것이 바로 데이터베이스가 하는 일입니다. 본질적으로 데이터베이스는 컴퓨터 시스템에 전자적으로 저장된, 구조화된 정보의 조직된 집합입니다. 이 정의는 기술적으로 들릴 수 있지만, 엑셀 사용자에게는 꽤 익숙한 개념입니다.
데이터베이스 사고방식
당신이 잘 구조화된 엑셀 워크북을 만들 때:
- 명확한 열 헤더를 사용하고
- 일관된 데이터 형식을 유지하며
- 데이터 영역에 병합 셀이 없고
- 정보 유형별로 별도의 워크시트를 만들고
- 시트 간 데이터를 연결하기 위해 VLOOKUP이나 INDEX/MATCH를 사용한다면...
이미 데이터베이스 설계자처럼 사고하고 있는 것입니다!
차이점은 데이터베이스는 이러한 좋은 습관들을 ‘강제’하고 ‘공식화’한다는 점입니다. 그 덕분에 더 강력하고 확장 가능한 시스템이 되는 것이죠. 데이터베이스는 DBMS (Database Management System, 데이터베이스 관리 시스템) 에 의해 제어되며, 사용자와 데이터 간의 중재자 역할을 하면서 데이터의 조직, 저장, 검색을 처리합니다.
테이블, 행, 열 – 아주 익숙하죠!
오늘날 가장 일반적인 데이터베이스 형태는 관계형 데이터베이스(Relational Database) 로, 엑셀 사용자에게 매우 익숙한 테이블 구조(행과 열)로 데이터를 구성합니다.
엑셀 용어 | 데이터베이스 용어 | 의미 |
---|---|---|
워크시트 | 테이블 (Table) | 관련된 데이터의 집합 |
행 | 레코드 (Record) | 하나의 항목 또는 엔트리 |
열 | 필드 (Field) | 특정 속성 또는 특성 |
헤더 행 | 필드 이름 (Field Names) | 각 열을 설명하는 라벨 |
셀 | 필드 값 (Field Value) | 개별 데이터 항목 |
실제로 어떻게 보이는지 살펴볼까요? 아래는 고객 정보를 추적하는 간단한 엑셀 워크시트입니다:
엑셀 워크시트: Customers
Customer ID | First Name | Last Name | Phone | |
---|---|---|---|---|
1001 | John | Smith | john@example.com | 555-1234 |
1002 | Sarah | Johnson | sarah@example.com | 555-5678 |
1003 | Miguel | Rodriguez | miguel@example.com | 555-9012 |
데이터베이스에서는 다음과 같은 테이블로 동일한 구조를 가집니다:
데이터베이스 테이블: Customers
customer_id | first_name | last_name | phone | |
---|---|---|---|---|
1001 | John | Smith | john@example.com | 555-1234 |
1002 | Sarah | Johnson | sarah@example.com | 555-5678 |
1003 | Miguel | Rodriguez | miguel@example.com | 555-9012 |
다만 몇 가지 차이점이 있을 수 있습니다:
- 필드 이름은 소문자 + 언더스코어를 쓰는 것이 일반적 (컨벤션일 뿐 필수는 아님)
- 데이터 타입에 더 엄격함 (예: 전화번호 필드는 전화번호만 입력 가능)
- 입력 가능한 데이터에 대해 규칙을 강제함 (예: 고객 ID는 유일해야 함)
그러나 기본 구조인 "행과 열로 데이터 조직" 방식은 완전히 동일합니다.
기본 키와 관계 – 시트 간 VLOOKUP 같은 개념
데이터베이스의 가장 강력한 기능 중 하나는 서로 다른 테이블 간 관계를 정의하고 유지하는 방식입니다. 엑셀에서 VLOOKUP이나 INDEX/MATCH를 사용해 시트 간 데이터를 참조한 적이 있다면 이미 이 개념에 익숙합니다.
기본 키 (Primary Key): 유일한 식별자
엑셀에서 시트 간 데이터를 참조할 때는 보통 고객 ID나 주문 번호 같은 공통된 값을 기준으로 조회합니다. 데이터베이스 용어로 이 고유 식별자를 기본 키(Primary Key) 라고 부릅니다.
기본 키는 다음과 같은 조건을 만족해야 합니다:
- 각 레코드를 유일하게 식별
- 중복값이 없어야 함
- 비어 있을 수 없음 (NULL 불가)
위 예시에서 customer_id
가 바로 기본 키 역할을 합니다.
외래 키 (Foreign Key): 관계를 만드는 열
이번에는 주문 테이블이 있다고 가정해 봅시다:
데이터베이스 테이블: Orders
order_id | order_date | amount | customer_id |
---|---|---|---|
5001 | 2025-01-15 | 120.50 | 1001 |
5002 | 2025-01-20 | 75.25 | 1002 |
5003 | 2025-02-01 | 200.00 | 1001 |
여기서 customer_id
가 두 테이블에 모두 등장합니다. Orders 테이블에서는 외래 키(Foreign Key) 로, Customers 테이블의 기본 키를 참조하여 두 테이블 간 관계를 형성합니다.
엑셀에서는 아래와 같은 수식을 사용해 Orders 시트에서 고객 이름을 찾아올 수 있습니다:
=VLOOKUP(D2, Customers!A:B, 2, FALSE)
데이터베이스에서는 이 관계가 정식으로 정의되고, 시스템에 의해 강제됩니다. 즉:
- 존재하지 않는
customer_id
값으로는 주문을 추가할 수 없음 - 고객 정보가 변경되면 주문 테이블에서도 자동으로 반영
- 주문이 있는 고객을 삭제하려 하면 시스템이 이를 막거나 관련된 주문을 자동 처리함
관계의 유형
데이터베이스는 다음과 같은 관계 유형을 지원합니다:
-
일대일(One-to-One): 하나의 레코드가 다른 하나의 레코드와만 연결됨
- 예: 사람과 여권 정보
-
일대다(One-to-Many): 하나의 레코드가 여러 개 레코드와 연결됨
- 예: 고객과 주문 (한 고객이 여러 주문 가능)
- 가장 일반적인 관계 형태
-
다대다(Many-to-Many): 여러 레코드가 여러 레코드와 연결됨
- 예: 학생과 과목 (학생은 여러 과목을 듣고, 과목도 여러 학생이 수강)
- 이를 위해 중간에 조인 테이블(Junction Table)이 필요함
엑셀에서 서로 다른 시트에 관련 데이터를 유지하면서 VLOOKUP 등을 사용해 연결했다면, 이미 이런 관계를 간단히 구현해 본 것입니다.
데이터베이스 생태계
행과 열로 구성된 테이블은 친숙하지만, 데이터베이스는 그보다 더 큰 생태계 안에서 작동합니다:
-
DBMS (Database Management System): 데이터베이스를 관리하고 쿼리 처리 및 접근 제어를 담당하는 소프트웨어
- 예: MySQL, PostgreSQL, Microsoft SQL Server, Oracle
-
SQL (Structured Query Language): 데이터베이스와 소통하기 위한 표준 언어
- 이 책의 후반에서 자세히 다룰 예정
-
데이터베이스 서버: DBMS가 설치되어 실행되는 컴퓨터, 보통 데이터베이스 성능에 최적화되어 있음
-
클라이언트 애플리케이션: 데이터베이스에 접속하여 데이터를 추가/조회/수정/삭제하는 프로그램
- 예: 사용자 정의 애플리케이션, 리포트 도구, 심지어 엑셀도 가능!
엑셀에서 데이터베이스로 – 마인드셋 전환
데이터베이스를 배우기 시작할 때, 엑셀에서 익숙한 개념을 데이터베이스 용어로 매핑하면 도움이 됩니다:
엑셀 개념 | 데이터베이스 개념 |
---|---|
워크북 | 데이터베이스 |
워크시트 | 테이블 |
행 | 레코드 |
열 | 필드 |
헤더 행 | 필드 이름 |
VLOOKUP | JOIN 연산 |
필터 | WHERE 절 |
피벗테이블 | GROUP BY 쿼리 |
데이터 유효성 검사 | 제약 조건 (Constraints) |
이름 정의 범위 | 뷰 (View) |
매크로 | 저장 프로시저 (Stored Procedure) |
이 매핑이 완벽하지는 않지만, 데이터베이스의 기본 개념을 이해하는 데 매우 유용한 출발점이 됩니다.
결론
엑셀에 익숙하다면, 이미 데이터베이스를 이해할 수 있는 튼튼한 기반을 가지고 있는 셈입니다. 행과 열로 구성된 테이블 구조는 그대로 유지되며, 시트 간 참조를 통한 데이터 연결 방식은 테이블 간 관계 설정과 유사합니다.
앞으로 우리는 엑셀로는 어렵거나 불가능한 작업들을 데이터베이스가 어떻게 해결하는지 알아볼 것입니다. 하지만 잊지 마세요—완전히 처음부터 시작하는 것이 아닙니다. 당신의 엑셀 경험은 데이터베이스 세계에 진입하는 데 훌륭한 출발점입니다.