14일차는 데이터 분석 수업에서 본격적으로 DB와 SQL로 넘어가기 위한 준비 단계에 가까웠다. 이전까지는 Python, Pandas, API, 크롤링처럼 데이터를 가져오고 다루는 방법을 배웠다면, 이번에는 그 데이터가 실제로 어디에 저장되고, 어떻게 관리되고, 어떤 언어로 조회되는지를 배우기 시작했다.
먼저 Mac 환경에서 MySQL을 설치하는 흐름을 정리했고, 이어서 DB, DBMS, RDBMS, SQL의 기본 개념을 잡았다. 특히 이번에는 “DB가 뭔지 안다” 수준이 아니라, DB와 DBMS의 차이, RDBMS에서 왜 Table과 관계가 중요한지, SQL 문법이 어떤 역할별로 나뉘는지를 구분하는 게 핵심이었다.
1. Mac에서 MySQL 설치하기
SQL 실습을 하기 위해 먼저 Mac에 MySQL 환경을 세팅했다. 설치 흐름은 크게 보면 MySQL Community Server와 MySQL Workbench를 준비하는 방식이었다.
MySQL Workbench는 macOS에서 DMG 파일 형태로 배포되고, 다운로드한 DMG를 열어서 Applications 폴더로 드래그하는 방식으로 설치한다. 공식 문서에서도 macOS용 Workbench는 DMG 파일을 다운로드한 뒤, 설치 창에서 MySQL Workbench 아이콘을 Applications 아이콘으로 드래그해 설치한다고 설명하고 있다.
Mac에서 MySQL 설치 흐름
1. MySQL Community Server 설치
2. MySQL Workbench 설치
3. MySQL 서버 실행 확인
4. Workbench에서 Local Instance 연결
5. SQL 실습 준비
여기서 헷갈릴 수 있는 부분은 MySQL Server와 MySQL Workbench가 같은 게 아니라는 점이다. MySQL Server는 실제로 데이터베이스를 운영하는 쪽이고, Workbench는 그 서버에 접속해서 DB를 만들고, 테이블을 보고, SQL을 실행하는 GUI 도구에 가깝다. MySQL 공식 다운로드 페이지에서도 Workbench는 DB 설계/모델링, SQL 개발, DB 관리, 마이그레이션을 위한 통합 도구라고 설명하고 있다.
처음에는 “MySQL을 깐다”라고 하면 하나만 설치하면 되는 줄 알기 쉬운데, 실제로는 서버를 설치하는 것과 그 서버를 편하게 다루는 도구를 설치하는 것이 나뉘어 있었다.
2. DB는 데이터를 모아둔 집합
DB는 Database의 줄임말이고, 말 그대로 데이터들을 모아둔 집합이라고 이해하면 된다. 예를 들어 쇼핑몰 서비스를 생각하면, 그 안에는 정말 다양한 데이터가 존재한다.
쇼핑몰 데이터 예시
- 일반 고객 데이터
- 로그인 정보
- 회원 정보
- 배송지 정보
- 주문 내역
- 상품 관련 데이터
- 상품명
- 가격
- 재고
- 카테고리
- 실시간 주문 현황
- 운영/기획/경영 데이터
- 매출
- 인기 상품
- 고객 행동
- 재구매율
이렇게 보면 DB는 단순히 “파일 하나”가 아니라, 서비스가 돌아가기 위해 필요한 여러 데이터를 체계적으로 모아둔 공간에 가깝다.
특히 중요한 건 DB에는 여러 사람이 접근한다는 점이다. 고객도 서비스를 통해 접근하고, 운영팀도 보고, 기획팀도 분석하고, 개발 시스템도 계속 데이터를 읽고 쓴다. 그래서 그냥 데이터를 쌓아두는 것만으로는 부족하고, 누가 언제 어떤 방식으로 접근해도 안정적으로 관리할 수 있는 구조가 필요하다.
3. DB와 DBMS는 구분해야 한다
이번에 확실히 구분해야 했던 개념이 DB와 DBMS였다.
DB(Database)
= 저장되어 있는 데이터 자체
DBMS(Database Management System)
= DB를 운영하고 관리하는 시스템/프로그램
엄밀하게 말하면 DB는 저장된 정보의 집합이고, DBMS는 그 DB를 관리하는 소프트웨어다. 하지만 실제 대화에서는 사람들이 DBMS까지 포함해서 그냥 “DB”라고 부르는 경우가 많다.
예를 들어 누군가 “우리 DB 뭐 써요?”라고 물으면, 문맥에 따라 두 가지 의미가 될 수 있다.
1. 저장된 데이터 구조를 묻는 경우
→ 회원 DB, 상품 DB, 주문 DB
2. 사용하는 DBMS를 묻는 경우
→ MySQL, PostgreSQL, Oracle, MariaDB
그래서 앞으로는 누가 “DB”라고 말했을 때, 이 사람이 데이터 자체를 말하는 건지, 아니면 관리 시스템을 말하는 건지 문맥상 구분해서 들어야겠다고 느꼈다.
4. RDBMS는 관계를 중심으로 데이터를 관리한다
DBMS 중에서도 이번에 배우는 건 RDBMS다. RDBMS는 Relational Database Management System의 줄임말이고, 말 그대로 관계형 데이터베이스 관리 시스템이다.
여기서 핵심은 “관계”였다.
RDBMS의 핵심
- 데이터를 Table 단위로 저장한다.
- 하나의 Table은 row와 column으로 구성된다.
- 여러 Table 사이의 관계를 중심으로 데이터를 관리한다.
예를 들어 쇼핑몰을 하나의 큰 표로만 만들면 너무 복잡해진다. 회원 정보, 상품 정보, 주문 정보, 배송 정보가 전부 한 테이블에 있으면 중복도 많고 관리도 어려워진다.
그래서 보통은 여러 테이블로 나눈다.
회원 테이블
- 회원ID
- 이름
- 이메일
- 주소
상품 테이블
- 상품ID
- 상품명
- 가격
- 재고
주문 테이블
- 주문ID
- 회원ID
- 상품ID
- 주문수량
- 주문일자
이때 주문 테이블에는 회원ID와 상품ID가 들어가고, 이 값을 통해 회원 테이블과 상품 테이블을 연결할 수 있다. 즉, RDBMS에서는 데이터를 그냥 따로따로 저장하는 게 아니라, 테이블 간의 관계를 통해 전체 데이터를 이해하는 방식이 중요하다.
여기서 “관계”라는 말이 처음에는 추상적으로 느껴졌는데, 예시로 보니까 훨씬 명확했다. 회원이 주문을 하고, 주문에는 상품이 연결되고, 상품에는 재고가 연결된다. 이런 식으로 현실의 관계를 테이블 간의 연결로 표현하는 구조가 RDBMS였다.
5. SQL은 DB에게 명령하는 언어
SQL은 DB에 명령을 내리기 위한 언어다. Python이 일반적인 프로그래밍 언어라면, SQL은 데이터베이스에 특화된 언어에 가깝다.
SQL을 쓰면 이런 작업을 할 수 있다.
- 데이터베이스 만들기
- 테이블 만들기
- 데이터 추가하기
- 데이터 조회하기
- 데이터 수정하기
- 데이터 삭제하기
- 여러 테이블 연결해서 보기
이번에 정리한 SQL 문법은 크게 두 가지로 나뉘었다.
DDL: 데이터 정의 언어
DML: 데이터 조작 언어
이 구분이 꽤 중요했다. SQL 문법을 무작정 외우기보다, 이 명령이 구조를 바꾸는 명령인지, 데이터 내용을 다루는 명령인지를 먼저 구분하면 이해가 더 쉬웠다.
6. DDL: 데이터 구조를 정의하는 언어
DDL은 Data Definition Language의 줄임말로, 데이터베이스나 테이블 같은 구조 자체를 정의하는 명령어다.
DDL 대표 명령어
CREATE
ALTER
DROP
TRUNCATE
CREATE는 DB나 Table을 새로 만들 때 사용한다.
CREATE DATABASE shop_db;
CREATE TABLE users (
user_id INT,
name VARCHAR(50),
email VARCHAR(100)
);
ALTER는 이미 만들어진 테이블 구조를 수정할 때 사용한다. 예를 들어 컬럼을 추가하거나, 컬럼 타입을 바꾸는 경우다.
ALTER TABLE users ADD COLUMN phone VARCHAR(20);
DROP은 DB나 Table 자체를 제거하는 명령어다. 이건 구조 자체를 날리는 것이기 때문에 조심해야 한다.
DROP TABLE users;
TRUNCATE는 테이블의 틀은 남겨두고 안에 있는 데이터만 비우는 명령어다.
TRUNCATE TABLE users;
여기서 DROP과 TRUNCATE의 차이가 중요했다. DROP은 테이블 자체를 없애는 느낌이고, TRUNCATE는 테이블 구조는 유지한 채 내부 데이터만 비우는 느낌이다.
7. DML: 데이터를 조작하는 언어
DML은 Data Manipulation Language의 줄임말로, 실제 테이블 안에 있는 데이터를 조회하거나 추가하거나 수정하거나 삭제하는 명령어다.
DML 대표 명령어
SELECT
INSERT
UPDATE
DELETE
SELECT는 데이터를 조회할 때 사용한다. Python으로 치면 값을 출력하거나 확인하는 것과 비슷하게 느껴졌다.
SELECT * FROM users;
INSERT는 데이터를 추가할 때 사용한다. 예를 들어 회원가입을 하면 회원 테이블에 새로운 데이터가 추가되는 구조라고 이해할 수 있다.
INSERT INTO users (user_id, name, email)
VALUES (1, 'Kim', 'kim@example.com');
UPDATE는 기존 데이터를 수정할 때 사용한다. 예를 들어 사용자가 휴대폰 번호나 주소를 변경하는 경우다.
UPDATE users
SET email = 'new_kim@example.com'
WHERE user_id = 1;
DELETE는 데이터를 삭제할 때 사용한다. 예를 들어 회원 탈퇴 같은 상황을 생각할 수 있다.
DELETE FROM users
WHERE user_id = 1;
여기서 중요한 건 UPDATE와 DELETE는 조건 없이 쓰면 위험하다는 점이다. WHERE 조건을 제대로 걸지 않으면 원하지 않는 데이터까지 한 번에 수정하거나 삭제할 수 있다.
8. JOIN은 여러 테이블의 정보를 함께 보는 것
RDBMS에서는 정보가 여러 테이블에 나뉘어 저장된다. 그래서 실제로 원하는 정보를 보려면 여러 테이블을 연결해서 봐야 하는 경우가 많다. 이때 필요한 것이 JOIN이다.
예를 들어 주문 테이블에는 회원ID, 상품ID만 있고, 실제 회원 이름이나 상품명은 다른 테이블에 있을 수 있다. 이 경우 주문 테이블만 보면 정보가 부족하다.
주문 테이블
- 주문ID
- 회원ID
- 상품ID
- 주문수량
회원 테이블
- 회원ID
- 회원명
상품 테이블
- 상품ID
- 상품명
- 가격
이럴 때 JOIN을 사용하면 주문 정보와 회원 정보, 상품 정보를 연결해서 볼 수 있다.
SELECT
orders.order_id,
users.name,
products.product_name,
orders.quantity
FROM orders
JOIN users
ON orders.user_id = users.user_id
JOIN products
ON orders.product_id = products.product_id;
아직 JOIN을 깊게 다룬 건 아니지만, RDBMS에서 JOIN이 중요한 이유는 확실히 느꼈다. 데이터가 여러 테이블에 흩어져 있으니까, 결국 실무에서는 여러 테이블 사이의 관계를 파악하고 필요한 정보를 조합하는 능력이 중요해질 것 같다.
9. 이번에 헷갈렸던 부분
가장 헷갈렸던 건 DB와 DBMS를 구분하는 부분이었다. 평소에는 그냥 “DB 깐다”, “DB 연결한다”, “DB 본다”처럼 말해서 전부 같은 의미처럼 느껴졌는데, 실제로는 구분이 필요했다.
DB = 데이터 자체
DBMS = DB를 관리하는 프로그램
SQL = DBMS에게 명령하는 언어
Workbench = DBMS에 접속해서 SQL을 실행하고 관리하는 도구
이렇게 정리하니까 조금 더 명확해졌다.
또 하나는 RDBMS의 “관계”라는 말이었다. 처음에는 관계라는 말이 추상적으로 느껴졌는데, 회원 테이블, 상품 테이블, 주문 테이블 예시로 보니까 훨씬 이해가 됐다. 현실의 서비스 데이터는 한 표에 전부 들어가는 게 아니라, 여러 표로 나뉘고 그 표들이 key를 통해 연결되는 구조였다.
마무리
14일차는 SQL 문법을 깊게 들어가기 전, DB 세계에 들어가기 위한 기본 개념을 잡은 날이었다. Mac에 MySQL을 설치하면서 실습 환경을 만들고, DB와 DBMS, RDBMS, SQL의 역할을 구분했다.
이번에 가장 크게 남은 건 DB는 데이터를 저장하는 곳이고, DBMS는 그 데이터를 관리하는 시스템이며, SQL은 그 시스템과 대화하는 언어라는 점이었다. 그리고 관계형 데이터베이스에서는 데이터를 테이블 단위로 나누고, 여러 테이블 사이의 관계를 이해하는 것이 핵심이라는 점도 알게 됐다.
앞으로 SQL을 배울 때는 단순히 SELECT, INSERT 같은 문법만 외우기보다, 이 명령이 데이터 구조를 만드는 명령인지, 데이터 내용을 다루는 명령인지, 그리고 어떤 테이블 관계 속에서 쓰이는지를 같이 생각해야겠다.
'[SK플래닛] ASAC 빅데이터전문가 11기 > 학습기록' 카테고리의 다른 글
| [SK플래닛] ASAC 빅데이터전문가 11기 | 16일차 (0) | 2026.05.08 |
|---|---|
| [SK플래닛] ASAC 빅데이터전문가 11기 | 15일차 (0) | 2026.05.07 |
| [SK플래닛] ASAC 빅데이터전문가 11기 | 13일차 (1) | 2026.04.30 |
| [SK플래닛] ASAC 빅데이터전문가 11기 | 12일차 (0) | 2026.04.29 |
| [SK플래닛] ASAC 빅데이터전문가 11기 | 11일차 (0) | 2026.04.28 |
