03. [실습] MySQL 설치와 DB 생성 (MySQL Setup)
"이론은 끝났다. 진짜 데이터베이스를 컴퓨터에 설치해보자!"
이제 눈으로만 보던 데이터베이스를 내 컴퓨터에 직접 설치하고 실행해 볼 차례입니다.
1. MySQL 설치하기 (Server)
데이터베이스의 본체인 서버(Server)를 설치합니다.
Mac 사용자 (Homebrew 권장)
가장 깔끔하게 설치하는 방법입니다. 터미널을 열고 입력하세요.
# 1. MySQL 설치
brew install mysql
# 2. 우선 서버 상태를 확인합니다 (이미 켜져 있을 수 있음)
brew services list
# 3. 만약 'stopped' 상태라면 실행합니다
brew services start mysql
# 3. 보안 설정 (비밀번호 생성 등)
mysql_secure_installation
mysql_secure_installation 설정 가이드 (실습용)
명령어를 입력하면 여러 질문이 나옵니다. 아래 순서대로 답변하세요.
- 비밀번호 복잡도 검사 (VALIDATE PASSWORD...)
- 답변: No (또는 Enter)
- 이유:
1234같은 쉬운 비밀번호를 쓰기 위함입니다.
- Root 비밀번호 설정 (New Password)
- 답변: 사용할 비밀번호 입력 (예:
1234)
- 답변: 사용할 비밀번호 입력 (예:
- 익명 사용자 삭제 (Remove anonymous users?)
- 답변: y (Yes)
- 원격 접속 제한 (Disallow root login remotely?)
- 답변: y (Yes)
- 테스트 데이터베이스 삭제 (Remove test database...?)
- 답변: y (Yes)
- 권한 테이블 재로드 (Reload privilege tables now?)
- 답변: y (Yes)
요약: 첫 번째 질문만 No, 나머지는 모두 Yes!
Windows 사용자
- MySQL Installer 다운로드 (Web Community 버전 추천)
- 'Server only' 또는 'Developer Default' 선택 후 설치.
- 설정 과정에서 Root Password를 꼭 기억해두세요.
⚠️ 주의 (Authentication Method)
설치 중 "Strong Password Encryption" 대신 "Legacy Authentication Method"를 선택하는 것이 정신건강에 좋습니다. (일부 구형 라이브러리와의 호환성 문제 방지)
2. MySQL Workbench 설치하기 (Client)
서버는 화면이 없는 '검은 창'입니다. 이를 편하게 다루기 위한 클라이언트(Client) 도구를 설치합니다.
- MySQL Workbench 다운로드
- 운영체제에 맞는 버전 설치 및 실행.
3. [Check] 서버 상태 확인 및 자동 실행
설치를 마쳤다면, 내 금고(DB)가 현재 영업 중(Running)인지 확인하고, 컴퓨터를 켤 때마다 자동으로 켜지도록 설정해야 합니다.
🍎 Mac 사용자 (Homebrew)
- 상태 확인:
- 자동 실행 설정:
🪟 Windows 사용자
- 상태 확인 및 설정:
Win + R→services.msc입력.- MySQL을 찾아 상태: 실행 중, 시작 유형: 자동인지 확인.
- 아니라면 우클릭 → 속성에서 수정.
- Workbench에서 확인:
- Workbench 왼쪽 Administration 탭 → Server Status 클릭 시
Running확인 가능.
- Workbench 왼쪽 Administration 탭 → Server Status 클릭 시
4. 서버에 접속하기 (Connection)
Workbench를 열고 내 컴퓨터에 있는 MySQL 서버에 접속해 봅시다. (MySQL도 FastAPI처럼 24시간 돌아가는 서버 프로그램입니다!)
이미 연결이 보이나요?
설치 후 Workbench를 켜면 보통 Local instance 3306이라는 박스가 이미 만들어져 있습니다.
그렇다면 굳이 새로 만들 필요 없이 그걸 더블 클릭해서 바로 입장하세요! (비밀번호 1234 입력)
만약 아무것도 없다면? 아래 순서대로 직접 만듭니다.
- MySQL Connections 옆의
(+)버튼 클릭. - Connection Name:
Local DB(아무거나 상관없음) - Hostname:
127.0.0.1(내 컴퓨터) - Port:
3306(MySQL의 전용 출입구) - Username:
root(기본 관리자 ID) - Password:
Store in Keychain클릭 후, 아까 설정한 비밀번호 입력. - [Test Connection] 버튼 클릭 →
Successfully made the MySQL connection뜨면 성공! 🎉 - [OK] 누르고 만들어진 박스를 더블 클릭하여 입장.
💡 중요 개념: 포트(Port)와 번호들 컴퓨터(Localhost)라는 '상가 건물' 안에 여러 가게가 입점해 있다고 상상해보세요. 각 서비스는 관례적으로 약속된 호수(Port Number)를 사용합니다. (물론 바꿀 수도 있습니다!)
- 3306호: MySQL 데이터베이스 (전 세계 표준 관례)
- 8000호: FastAPI 백엔드 서버 (Python 웹 서버 관례)
- 5173호: React (Vite) 프론트엔드 (Vite의 기본값)
- 80 / 443호: 일반적인 웹 사이트 (HTTP / HTTPS 표준)
이렇게 문 번호(Port)가 다르기 때문에, 한 컴퓨터 안에서 DB, 서버, 화면이 서로 섞이지 않고 동시에 실행될 수 있는 것입니다!
graph TD Client["💻 Client (Browser)"] -- "Port 80/443" --> API["👨🍳 FastAPI (8000)"] API -- "Port 3306" --> DB[("🗄️ MySQL (3306)")]
🚨 긴급 처방 (Troubleshooting)
"Can't connect to MySQL server" 에러가 뜬다면? 당황하지 말고 체크하세요.
- 금고가 닫혔나? (위 3번 과정을 통해 서버 실행 확인)
- 주소가 틀렸나? (
127.0.0.1확인) - 포트 번호가 다른가? (
3306확인) - 열쇠가 틀렸나? (비밀번호 재입력)
5. 첫 번째 데이터베이스 만들기 (Schema)
잠깐! sys라는 이상한 게 있어요!
왼쪽 목록(SCHEMAS)에 보면 sys 같은 낯선 이름이 이미 있을 수 있습니다.
이건 MySQL이 자기 자신을 관리하기 위해 만들어둔 '관리 사무소' 같은 곳입니다.
잘못 건드리면 안 되니 무시하시고, 우리는 우리 가게(Schema)를 새로 차리면 됩니다.
엑셀 파일을 새로 만드는 것처럼, 우리만의 데이터 공간(Schema)을 만듭니다.
- 상단 툴바에서 원통 모양 아이콘(Create a new schema) 클릭.
- Name:
clapcampus - Charset:
utf8mb4(이모지 😊 지원을 위해 필수!) - Collation:
utf8mb4_unicode_ci - [Apply] 버튼 클릭.
- SQL 확인하기: "Review the SQL Script" 창이 뜨면, Workbench가 짜준 SQL 코드를 눈으로 확인합니다.
"아~ 내가 버튼을 누르면 내부적으로 이런
CREATE SCHEMA...코드가 실행되는구나!"Tip: "어?
CREATE DATABASE가 아니네요?" MySQL에서는SCHEMA와DATABASE가 완전히 같은 말(동의어)입니다. Workbench는SCHEMA라는 표현을 더 좋아할 뿐이니 놀라지 마세요! 😉 - [Apply] → [Finish] 클릭.
왼쪽 Navigator 패널의 Schemas 탭을 보면 clapcampus가 생긴 것을 볼 수 있습니다!
연결 고리
자, 이제 빈 금고(clapcampus)가 준비되었습니다!
이제 여기에 우리가 02강에서 설계했던 Student, Teacher, Course라는 칸막이(Table)들을 설치할 차례입니다.
6. [심화] 보안을 위한 계정 생성 (User Privileges)
root 계정은 모든 것을 삭제할 수 있는 '신(God)'의 권한입니다.
실제 서비스에서는 보안을 위해 우리 DB(clapcampus)만 건드릴 수 있는 전용 계정을 따로 만들어야 합니다.
GUI 메뉴가 복잡하고 에러가 자주 발생하므로, SQL 코드를 직접 실행해서 한 방에 만들기를 추천합니다.
- Workbench 상단의 SQL 아이콘 (
SQL++모양)을 클릭하여 새 탭을 엽니다. -
아래 코드를 복사해서 붙여넣습니다.
-
상단의 번개 모양 아이콘 (⚡)을 클릭하여 실행합니다.
- 하단 Output 창에 초록색 체크(✅)가 뜨면 성공입니다!
SQL이 훨씬 깔끔하죠? 복잡한 메뉴를 찾아다니며 클릭하는 것보다, 명확한 의도를 가진 SQL 코드를 실행하는 것이 훨씬 빠르고 정확합니다. 앞으로 쿼리와 친해져 보세요!
새 계정(clap_admin)으로 접속 테스트하기
방금 만든 계정이 잘 동작하는지 확인해 볼까요?
1. Workbench 홈 화면(🏠)으로 돌아갑니다.
2. **MySQL Connections** 옆의 **`(+)`** 버튼을 다시 누릅니다.
3. **Connection Name:** `Clap Admin`
4. **Username:** `clap_admin`
5. **[Test Connection]**을 눌러 비밀번호(`1234`)를 입력했을 때 **Success**가 뜨면 완벽합니다!
> **⚠️ Connection Warning 경고창이 뜨나요?**
> "Incompatible/nonstandard server version..." 경고가 뜰 수 있습니다.
> Workbench 버전보다 설치된 MySQL 서버 버전이 최신이라서 뜨는 안내문입니다.
> 우리는 기본 기능만 사용하므로 **[Continue Anyway]**를 누르고 넘어가면 됩니다. 쿨하게 무시하세요! 😎
6. 이제 `root` 대신 이 연결을 사용하면, 실수로 다른 DB를 건드릴 위험이 사라집니다.
작전: 이제부터 Python 코드에서는 root 대신 clap_admin 계정을 사용하여 연결할 것입니다.
✅ 체크포인트: 인덱스와 PK의 준비 우리가 스키마를 만들고 계정을 생성한 이유는, 이제 이 안에 '똑똑한 엑셀(Table)'을 그리기 위해서입니다.
- 각 테이블에는 1강에서 배운 고유 번호표(PK)가 들어갈 자리를 만들 것이고,
- DB는 그 PK를 보고 자동으로 인덱스(찾아보기)를 생성해 줄 준비를 마쳤습니다.
7. 실전! 테이블 만들기 (Create Table)
이제 02강에서 설계했던 수강신청 시스템(Student, Teacher, Course, Enrollment) 테이블을 실제로 만들어 봅시다. 두 가지 방법을 모두 경험해 보는 것이 중요합니다.
방법 1: GUI로 만들기 (손맛 👋)
가장 기본이 되는 student 테이블 하나는 마우스를 이용해 직접 만들어 봅니다.
- 왼쪽 Navigator의
clapcampus스키마 옆 화살표(>)를 눌러 펼칩니다. - Tables에 마우스 오른쪽 클릭 → Create Table... 선택.
- Table Name:
student(보통 소문자 사용) - Column 탭에서 아래 내용을 채워넣습니다.
- id:
INT,PK(Primary Key),NN(Not Null),AI(Auto Increment - 자동 번호표) 체크 ✅ - name:
VARCHAR(45) - email:
VARCHAR(100)
- id:
- 하단의 [Apply] 버튼 클릭.
잠깐! 마법의 주문서 확인 📜
[Apply]를 누르면 창이 하나 뜨는데, 거기에 SQL이라고 적힌 코드가 보일 겁니다.
CREATE TABLE 'clapcampus'.'student' (...)
사실 GUI 버튼을 누르는 것은 Workbench가 대신 SQL 코드를 작성해서 서버에 날려주는 것뿐입니다. 이 원리를 알면 나중에는 타자 치는 게 더 편해집니다!
따옴표(')가 아니라 기울어진 점()인데요?**
저건 **백틱(Backtick,)이라고 부르는 기호입니다.
- 입력 방법: 키보드 숫자
1의 왼쪽에 있는 물결표(~) 키를 그냥 누르세요. > 잠깐! Mac에서₩(원화) 표시가 나오나요? > 한글 키보드 상태에서는 그럴 수 있습니다. 영문 모드로 바꾸고 누르거나,Option+₩키를 같이 누르면 백틱(`)이 입력됩니다! - 백틱(
`): "이건 테이블이나 컬럼의 이름이야!"라고 컴퓨터에게 알려주는 용도. - 따옴표(
'): "이건 문자 데이터야!"라고 알려주는 용도.
서로 역할이 완전히 다르니 헷갈리지 마세요! 😉
- [Apply] → [Finish] 클릭하면 생성이 완료됩니다.
방법 2: AI와 함께 만들기 (생산성 🚀)
나머지 테이블(teacher, course, enrollment)을 하나씩 클릭해서 만들면 너무 오래 걸립니다.
02강에서 만든 ERD를 이용해 SQL 코드를 생성하고, 한 방에 실행해 봅시다.
1. AI에게 요청하기
Prompt
"우리가 02강에서 만든 ERD 기억하지? 이걸 MySQL에서 실행할 수 있는 CREATE TABLE SQL 코드로 바꿔줘.
- 테이블 이름은 모두 소문자(snake_case)로 해줘.
student테이블은 이미 만들었으니까 빼고, 나머지(teacher, course, enrollment)만 만들어줘.- FK 설정도 확실하게 해줘."
2. 코드 복사 & 붙여넣기
- Workbench 상단의 SQL 아이콘 (
SQL이라고 적힌 종이 ++모양) 클릭. - AI가 짜준 코드를 중앙의 빈 화면에 붙여넣습니다.
3. 실행하기
- 상단의 번개 모양 아이콘 (⚡) 클릭.
- 하단 Output 패널에 초록색 체크(✅)가 뜨면 성공!
- 왼쪽 Navigator 패널의 Tables 옆 새로고침 버튼(
🔄)을 누르면 모든 테이블이 짠! 하고 나타납니다.
8. [실습] SQL 기초 체력 기르기 (CRUD)
테이블만 만들고 끝내면 재미없죠? 실제로 데이터를 넣고, 조회하고, 수정하고, 삭제하는 CRUD 작업을 연습해 봅시다.
방금 만든 student 테이블을 가지고 놀아볼까요? 새 쿼리 탭(SQL + +)을 열어서 따라 해보세요.
1. 데이터 넣기 (INSERT - Create)
학생 한 명을 입학시켜 봅시다.
id는 어디 갔나요?
아까 id를 AI(Auto Increment)로 설정했기 때문에, 우리가 굳이 적지 않아도 알아서 1번부터 번호를 매겨줍니다.
2. 데이터 조회하기 (SELECT - Read)
잘 들어갔는지 확인해 봐야겠죠?
-- 1. 모든 데이터(*) 조회
SELECT * FROM student;
-- 2. 특정 조건(WHERE)으로 조회
-- 이름이 '손흥민'인 학생만 찾고 싶다면?
SELECT * FROM student WHERE name = '손흥민';
-- 3. 비슷한 데이터 찾기 (LIKE)
-- '손'씨 성을 가진 학생을 모두 찾고 싶다면?
SELECT * FROM student WHERE name LIKE '손%';
3. 데이터 수정하기 (UPDATE - Update)
손흥민 선수의 이메일이 바뀌었다고 가정해 봅시다.
주의:
WHERE절을 빼먹으면 모든 학생의 이메일이 바뀌어 버립니다! (대참사 😱) 항상UPDATE나DELETE를 할 때는WHERE를 두 번 확인하세요.
4. 데이터 삭제하기 (DELETE - Delete)
학생이 자퇴를 했다면?
5. 데이터 연결하기 (JOIN - Read Advanced)
관계형 데이터베이스의 꽃, JOIN도 맛만 볼까요?
학생이 어떤 수업을 듣는지 확인하려면, student, course, enrollment를 연결해야 합니다.
먼저 테스트를 위해 강사, 수업, 수강신청 정보를 살짝 넣어봅시다. (순서가 중요합니다! 강사 -> 수업 -> 신청 순서로 넣어야 에러가 안 납니다.)
-- 1. 강사 등록
INSERT INTO teacher (name, subject) VALUES ('이수진', 'Python');
-- 2. 강의 개설 (1번 선생님이 가르침)
INSERT INTO course (title, teacher_id) VALUES ('파이썬 기초', 1);
-- 3. 수강 신청 (1번 학생이 1번 강의 신청)
-- 주의: 1번 학생(손흥민)을 아까 삭제했다면 다시 INSERT 하고 실행하세요!
INSERT INTO enrollment (student_id, course_id) VALUES (1, 1);
이제 세 테이블을 연결해서 즐겨봅시다!
SELECT student.name, course.title
FROM enrollment
JOIN student ON enrollment.student_id = student.id
JOIN course ON enrollment.course_id = course.id;
해석:
enrollment를 중심으로,student의 이름과course의 제목을 가져와서 합쳐줘!
9. 핵심 정리
| 용어 | 설명 | 비유 |
|---|---|---|
| MySQL Server | 데이터를 실제로 보관하고 처리하는 프로그램 | 은행 금고 |
| MySQL Workbench | 서버에 명령을 내리는 GUI 도구 | ATM 기계 |
| Schema (스키마) | 연관된 테이블들을 담는 하나의 데이터베이스 단위 | 통장 하나 |
준비 완료
다음 장에서는 Python(SQLAlchemy)을 이용해 이 clapcampus DB에 접속하고 테이블을 만들어 보겠습니다.