데이터베이스 기본 개념
데이터와 정보
┌─────────────────────────────────────────────────────────────┐
│ │
│ 데이터 (Data) 정보 처리 정보 (Information)
│ ┌─────────────┐ ───────────→ ┌─────────────┐ │
│ │ 관찰/측정한 │ │ 의사결정에 │ │
│ │ 사실이나 값 │ │ 유용한 결과물 │ │
│ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘데이터 vs 정보
| 구분 | 데이터 (Data) | 정보 (Information) |
|---|---|---|
| 정의 | 관찰/측정으로 수집한 사실이나 값 | 데이터를 처리한 결과물 |
| 특성 | 가공되지 않은 원시 상태 | 의사결정에 활용 가능 |
| 예시 | 25, 서울, 2024-01-15 | “서울의 1월 평균 기온은 -2도” |
정보 시스템
┌─────────────────────────────────────────────────────────────┐
│ 정보 시스템 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 데이터 수집 → 데이터 저장 → 데이터 처리 → 정보 제공 │
│ │ │
│ ┌──────┴──────┐ │
│ │ 데이터베이스 │ │
│ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘데이터베이스의 정의
데이터베이스(DB) = 공유 + 통합 + 저장 + 운영 데이터4가지 핵심 특성
| 특성 | 설명 | 예시 |
|---|---|---|
| 공유 데이터 | 여러 사용자가 함께 사용 | 회사 전체가 고객 DB 공유 |
| 통합 데이터 | 중복 최소화, 통제된 중복만 허용 | 고객 정보를 한 곳에서 관리 |
| 저장 데이터 | 컴퓨터가 접근 가능한 매체에 저장 | HDD, SSD, 클라우드 스토리지 |
| 운영 데이터 | 조직 운영에 필수적인 데이터 | 주문, 재고, 회원 정보 |
데이터 중복의 문제
❌ 중복 허용 시 문제
────────────────────────────────────────
테이블 A: 고객명 = "홍길동", 연락처 = "010-1234-5678"
테이블 B: 고객명 = "홍길동", 연락처 = "010-9999-8888" ← 불일치!
✅ 통합 데이터베이스
────────────────────────────────────────
고객 테이블: 고객ID = 1, 고객명 = "홍길동", 연락처 = "010-1234-5678"
주문 테이블: 고객ID = 1 (참조) ← 중복 없음데이터베이스의 4가지 특징
1. 실시간 접근 (Real-time Accessibility)
-- 사용자 요청에 즉시 응답
SELECT * FROM orders WHERE customer_id = 123;
-- 결과가 즉시 반환됨 (밀리초 단위)2. 계속 변화 (Continuous Evolution)
-- 현실 세계의 변화를 반영
INSERT INTO orders VALUES (1001, 123, NOW()); -- 삽입
UPDATE products SET stock = stock - 1; -- 수정
DELETE FROM cart WHERE order_completed = true; -- 삭제3. 동시 공유 (Concurrent Sharing)
┌─────────────────────────────────────────────────────────────┐
│ 데이터베이스 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 사용자 A ──┐ │
│ ├──→ 같은 데이터 동시 접근 가능 │
│ 사용자 B ──┤ │
│ ├──→ 다른 데이터 동시 접근 가능 │
│ 사용자 C ──┘ │
│ │
└─────────────────────────────────────────────────────────────┘4. 내용으로 참조 (Content Reference)
-- 주소/위치가 아닌 값(내용)으로 데이터 참조
SELECT * FROM employees WHERE name = '홍길동'; -- 이름으로 검색
SELECT * FROM products WHERE price > 10000; -- 가격으로 검색
SELECT * FROM orders WHERE date = '2024-01-15'; -- 날짜로 검색데이터 분류
형태에 따른 분류
┌─────────────────────────────────────────────────────────────┐
│ 데이터 형태 분류 │
├──────────────┬──────────────┬──────────────────────────────┤
│ 정형 데이터 │ 반정형 데이터 │ 비정형 데이터 │
├──────────────┼──────────────┼──────────────────────────────┤
│ 스키마 있음 │ 데이터 내 구조 │ 구조 없음 │
│ (미리 정의) │ 설명 포함 │ │
├──────────────┼──────────────┼──────────────────────────────┤
│ RDB 테이블 │ JSON, XML │ 이미지, 영상, 텍스트 │
│ 스프레드시트 │ HTML, 로그 │ 음성, PDF, 소셜 데이터 │
└──────────────┴──────────────┴──────────────────────────────┘정형 데이터 (Structured Data)
-- 스키마가 미리 정의된 테이블 구조
CREATE TABLE customers (
id INT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(255),
created_at DATETIME
);반정형 데이터 (Semi-structured Data)
// JSON - 데이터 내에 구조(메타데이터) 포함
{
"id": 1,
"name": "홍길동",
"email": "hong@example.com",
"orders": [
{"id": 101, "amount": 50000},
{"id": 102, "amount": 30000}
]
}<!-- XML - 태그로 구조 설명 -->
<customer>
<id>1</id>
<name>홍길동</name>
<email>hong@example.com</email>
</customer>비정형 데이터 (Unstructured Data)
- 이미지 파일 (.jpg, .png)
- 동영상 파일 (.mp4, .avi)
- 텍스트 문서 (.txt, .pdf)
- 소셜 미디어 게시글
- 음성 파일 (.mp3, .wav)특성에 따른 분류
┌─────────────────────────────────────────────────────────────┐
│ │
│ 데이터 특성 분류 │
│ │
│ ┌─────────────────────┐ ┌─────────────────────┐ │
│ │ 범주형 데이터 │ │ 수치형 데이터 │ │
│ │ (Categorical) │ │ (Numerical) │ │
│ ├─────────────────────┤ ├─────────────────────┤ │
│ │ 명목형 │ 순서형 │ │ 이산형 │ 연속형 │ │
│ │(Nominal) │(Ordinal) │ │(Discrete)│(Continuous)│ │
│ └─────────────────────┘ └─────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘범주형 데이터 (Categorical Data)
| 유형 | 설명 | 예시 |
|---|---|---|
| 명목형 | 서열 없는 분류 | 성별, 혈액형, 지역 |
| 순서형 | 서열 있는 분류 | 학점(A>B>C), 만족도(상>중>하) |
-- 명목형: 순서 의미 없음
SELECT * FROM users WHERE gender = 'M';
SELECT * FROM users WHERE blood_type = 'A';
-- 순서형: 순서 의미 있음
SELECT * FROM reviews WHERE rating >= 4; -- 4점 이상
SELECT * FROM students WHERE grade IN ('A', 'B');수치형 데이터 (Numerical Data)
| 유형 | 설명 | 예시 |
|---|---|---|
| 이산형 | 셀 수 있는 단절된 값 | 주문 수, 학생 수, 클릭 횟수 |
| 연속형 | 측정으로 얻는 연속 값 | 키, 몸무게, 온도, 시간 |
-- 이산형: 정수값, 개수
SELECT COUNT(*) FROM orders WHERE user_id = 1;
SELECT SUM(quantity) FROM order_items;
-- 연속형: 실수값, 측정값
SELECT AVG(height) FROM students;
SELECT MAX(temperature) FROM weather_data;용어 비교 정리
스키마 vs 메타데이터
| 용어 | 설명 | 사용 위치 |
|---|---|---|
| 스키마 (Schema) | 미리 정해진 데이터 구조 | 정형 데이터 |
| 메타데이터 (Metadata) | 데이터 내에 포함된 구조 설명 | 반정형 데이터 |
정성적 vs 정량적 데이터
| 구분 | 정성적 (Qualitative) | 정량적 (Quantitative) |
|---|---|---|
| 의미 | 질적 데이터 | 양적 데이터 |
| 대응 | 범주형 데이터 | 수치형 데이터 |
| 연산 | 산술 연산 불가 | 산술 연산 가능 |
실무 예시
쇼핑몰 데이터베이스
-- 정형 데이터: 관계형 테이블
CREATE TABLE products (
id INT PRIMARY KEY,
name VARCHAR(200), -- 명목형
category VARCHAR(50), -- 명목형
price DECIMAL(10,2), -- 연속형
stock INT, -- 이산형
rating VARCHAR(10) -- 순서형 (상/중/하)
);
-- 데이터베이스 특징 활용
-- 1. 실시간 접근
SELECT * FROM products WHERE id = 100;
-- 2. 계속 변화
UPDATE products SET stock = stock - 1 WHERE id = 100;
-- 3. 동시 공유 (트랜잭션으로 관리)
BEGIN TRANSACTION;
UPDATE products SET stock = stock - 1 WHERE id = 100;
INSERT INTO orders (product_id, quantity) VALUES (100, 1);
COMMIT;
-- 4. 내용으로 참조
SELECT * FROM products
WHERE category = '전자제품'
AND price BETWEEN 10000 AND 50000;핵심 용어 정리
| 용어 | 설명 |
|---|---|
| 데이터 | 관찰/측정으로 수집한 사실이나 값 |
| 정보 | 의사결정에 유용하게 처리된 데이터 |
| 정보 처리 | 데이터에서 정보를 추출하는 과정 |
| 정보 시스템 | 데이터를 저장하고 정보를 제공하는 시스템 |
| 스키마 | 미리 정의된 데이터 구조 |
| 메타데이터 | 데이터에 대한 데이터 (구조 설명) |
| 파싱 | 데이터 구조를 분석하는 과정 |
| 데이터 중복성 | 동일 데이터가 여러 곳에 존재하는 상태 |