2025. 3. 20. 17:27ㆍ데이터 분석/데이터 사이언스
12.1 데이터베이스 활용 (Database Utilization)
데이터 분석과 머신러닝 모델 구축에서는 대량의 데이터를 효율적으로 저장하고 관리할 수 있는 데이터베이스(Database)가 필수적이다.
데이터베이스는 구조화된 SQL 데이터베이스와 비구조화된 NoSQL 데이터베이스로 나뉘며,
이 장에서는 SQL과 NoSQL의 개념 및 활용 방법을 다룬다.
12.1.1 SQL 기초 (Structured Query Language, 관계형 데이터베이스)
1) SQL이란?
SQL(Structured Query Language)은 관계형 데이터베이스(RDBMS)에서 데이터를 관리하기 위한 표준 언어이다.
MySQL, PostgreSQL, SQLite, MS SQL Server, Oracle 등의 관계형 데이터베이스에서 사용된다.
✅ 관계형 데이터베이스(RDBMS)의 특징
- 테이블(Table) 기반 데이터 저장 (행과 열로 구성)
- 스키마(Schema)를 기반으로 구조화된 데이터 저장
- 정규화(Normalization)를 통해 중복 데이터 최소화
- SQL을 사용하여 데이터 조회, 삽입, 수정, 삭제 가능
2) SQL 기본 문법
(1) SELECT – 데이터 조회
데이터를 조회할 때 SELECT 문을 사용한다.
📌 예제: 직원 테이블에서 모든 데이터 조회
SELECT * FROM employees;
📌 예제: 특정 컬럼 조회 (이름과 직급)
SELECT name, position FROM employees;
📌 예제: 조건을 포함한 조회 (WHERE 조건문 사용)
SELECT * FROM employees WHERE department = 'IT';
✅ SELECT 문 핵심 개념
- SELECT column_name FROM table_name → 특정 컬럼만 조회
- WHERE → 특정 조건을 만족하는 데이터 조회
- ORDER BY → 데이터 정렬 가능
- LIMIT → 조회할 데이터 개수 제한
(2) JOIN – 여러 테이블 결합
관계형 데이터베이스에서는 여러 개의 테이블이 관계를 맺고 저장되며, JOIN을 사용하여 데이터를 결합할 수 있다.
📌 INNER JOIN 예제 (직원 테이블과 부서 테이블 결합)
SELECT employees.name, employees.position, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.department_id;
✅ JOIN의 종류
- INNER JOIN → 공통 데이터가 있는 경우에만 결합
- LEFT JOIN → 왼쪽 테이블의 모든 데이터 포함 + 오른쪽 테이블의 일치하는 데이터
- RIGHT JOIN → 오른쪽 테이블의 모든 데이터 포함 + 왼쪽 테이블의 일치하는 데이터
- FULL JOIN → 두 테이블의 모든 데이터를 포함
(3) GROUP BY – 그룹별 데이터 집계
특정 컬럼을 기준으로 그룹을 나누고, 각 그룹별로 연산(평균, 합계 등)을 적용할 때 사용된다.
📌 예제: 각 부서별 평균 급여 조회
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;
✅ GROUP BY 핵심 개념
- COUNT() → 데이터 개수
- SUM() → 합계
- AVG() → 평균
- MAX(), MIN() → 최대값, 최소값
12.1.2 NoSQL 개요 (비관계형 데이터베이스)
1) NoSQL이란?
NoSQL(Not Only SQL)은 관계형 데이터베이스의 한계를 극복하기 위해 개발된 비관계형 데이터베이스이다.
관계형 데이터베이스가 정형화된 데이터(표 형태)에 적합하다면, NoSQL은 비정형 데이터(문서, JSON, Key-Value 등)에 최적화되어 있다.
✅ NoSQL 데이터베이스의 특징
- 스키마가 고정되지 않음 (Flexible Schema) → 유연한 데이터 구조 지원
- 수직적 확장(Scale-Up)보다 수평적 확장(Scale-Out) 지원 → 대규모 데이터 처리에 유리
- JSON, Key-Value, Document 기반 데이터 저장 가능
2) NoSQL의 유형 및 대표적인 데이터베이스
유형 | 설명 | 대표적인 데이터베이스 |
문서(Document) 데이터베이스 | JSON 형식의 문서를 저장 | MongoDB, CouchDB |
키-값(Key-Value) 저장소 | Key-Value 형태로 데이터를 저장 | Redis, DynamoDB |
열(Column-Family) 저장소 | 대량의 데이터를 컬럼 단위로 저장 | Apache Cassandra, HBase |
그래프(Graph) 데이터베이스 | 노드(Node)와 엣지(Edge)로 관계를 저장 | Neo4j |
✅ NoSQL 사용 사례
- MongoDB → JSON 기반 데이터 저장 (유연한 문서 구조)
- Redis → 빠른 Key-Value 데이터 저장 (캐싱 시스템)
- Cassandra → 분산 데이터 저장 (빅데이터 처리)
- Neo4j → 관계형 데이터 분석 (소셜 네트워크, 추천 시스템)
3) MongoDB 활용 (NoSQL 대표 데이터베이스)
(1) MongoDB 기본 개념
- MongoDB는 JSON과 유사한 BSON(Binary JSON) 형식으로 데이터를 저장
- 테이블 대신 컬렉션(Collection), 행(Row) 대신 문서(Document) 사용
📌 MongoDB 예제 데이터 (JSON 형식의 문서 저장)
{
"name": "Alice",
"age": 30,
"department": "IT",
"skills": ["Python", "SQL", "Machine Learning"]
}
(2) MongoDB 기본 명령어
📌 데이터 삽입 (Insert)
import pymongo
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["company"]
collection = db["employees"]
# 데이터 삽입
employee = {"name": "Alice", "age": 30, "department": "IT"}
collection.insert_one(employee)
📌 데이터 조회 (Find)
# 모든 데이터 조회
for doc in collection.find():
print(doc)
📌 조건을 활용한 데이터 조회
# 나이가 30 이상인 직원 조회
for doc in collection.find({"age": {"$gte": 30}}):
print(doc)
📌 데이터 업데이트 (Update)
collection.update_one({"name": "Alice"}, {"$set": {"age": 31}})
📌 데이터 삭제 (Delete)
collection.delete_one({"name": "Alice"})
✅ MongoDB의 특징
- JSON 기반 데이터 저장 가능 (Document-Oriented Database)
- 스키마가 자유로워 다양한 데이터를 쉽게 저장 가능
- 수평적 확장(Scale-Out)이 용이하여 대규모 데이터 처리에 적합
결론
✅ SQL (관계형 데이터베이스)
- 구조화된 데이터 저장 (테이블 기반)
- 정형 데이터 관리 및 복잡한 JOIN 연산 가능
- 트랜잭션 관리가 필요한 경우 적합
✅ NoSQL (비관계형 데이터베이스)
- 비정형 데이터 및 대규모 데이터 처리에 적합
- 유연한 스키마(JSON 문서 구조) 지원
- 수평 확장이 가능하여 빅데이터 분석에 유리
SQL과 NoSQL의 개념을 이해하면 데이터 분석과 머신러닝을 위한 최적의 데이터 저장 방식을 선택할 수 있다.