마트철수
[TIL_1] 데이터 베이스 활용 & 모델링 본문

안녕하세요,
'Today I Learned' 1주차에서는
데이터베이스 활용 그리고 모델링에 대해
작성해보고자 합니다.
1일 기록으로 작성한 포스팅은
가장 하단에 타임라인으로 따로 정리해두었으니
이 부분도 참고해주시면 감사하겠습니다.
목차
- 데이터와 데이터베이스의 개념
- 관계형 데이터베이스란?
- 관계형 데이터베이스의 특징
- MySQL 개요
- 데이터 모델링
- MySQL 설치 및 환경 구축
- 예시 코드
- MySQL 교육 타임라인 정리
현재 KB IT's Your Life에서는 한빛미디어 '이것이 MySQL이다'를 교재로 사용하고 있습니다.
해당 교재의 흐름과 내용을 참고하여 작성하였으며, 하단엔 '~다' 체를 사용하였습니다.
1. 데이터와 데이터베이스의 개념
데이터
- 데이터는 수, 단어 등의 형태로 이루어진 의미의 단위
데이터베이스
- 데이터베이스는 '데이터의 집합'
DBMS(DataBase Management Stsyem)
- 데이터의 집합인 데이터베이스를 관리, 운영하는 역할
- DBMS 분류: 계층형/망형/관계형/객체지향형/객체관계형 DBMS
- 관계형 DBMS가 가장 많은 부분을 차지한다.
대표적인 예시로 MySQL. Oracle 등이 있다.
이 SQL을 사용해서 우리가 DBMS를 통해 중요한 정보들을 입력/관리/추출한다.
🥸 KB 부트캠프에서는 MySQL를 다룹니다.
2. 관계형 데이터베이스란?
개념:
RBMS(Relational DataBase Management Stsyem)
- 상호 관계형 데이터베이스
- "데이터베이스는 테이블이라 불리는 최소 단위로 구성되어 있고,
이 테이블은 하나 이상의 열로 구성되어 있다" 라는 개념을 기반으로 한다.
관계형 테이터의 관계 유형
- 1:1 관계
예시: 하나의 사용자와 하나의 프로필이 연결될 때
-- 예시 테이블
CREATE TABLE User (
user_id INT PRIMARY KEY,
username VARCHAR(100)
);
CREATE TABLE Profile (
profile_id INT PRIMARY KEY,
user_id INT,
bio TEXT,
FOREIGN KEY (user_id) REFERENCES User(user_id)
);
- 1:N 관계
하나의 A 테이블이 여러 개의 B 테이블 로우와 연결될 때
예시: 하나의 사용자가 여러 개의 주문을 할 때
-- 예시 테이블
CREATE TABLE User (
user_id INT PRIMARY KEY,
username VARCHAR(100)
);
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
user_id INT,
order_date DATE,
FOREIGN KEY (user_id) REFERENCES User(user_id)
);
- N:N
여러개의 A 테이블이 여러 개의 B 테이블 로우와 연결될 때
예시: 여러 사용자가 여러 개의 강좌를 수강할 때
각 테이블의 데이터가 독립적으로 존재해야 다른 테이블의 데이터에 서로 영향을 주지 않는다.
-- 예시 테이블
CREATE TABLE User (
user_id INT PRIMARY KEY,
username VARCHAR(100)
);
CREATE TABLE Course (
course_id INT PRIMARY KEY,
course_name VARCHAR(100)
);
CREATE TABLE User_Course (
user_id INT,
course_id INT,
PRIMARY KEY (user_id, course_id),
FOREIGN KEY (user_id) REFERENCES User(user_id),
FOREIGN KEY (course_id) REFERENCES Course(course_id)
);

3. 관계형 데이터베이스의 특징
장점
- 변화에 쉽게 순응할 수 있는 구조.
- 유지보수 측면에서 편리함.
단점
- 시스템 자원을 많이 차지해서 시스템이 느려질 수 있음.
- 하지만 최근 하드웨어의 발전으로 해당 단점은 많이 보완됨.
4. 데이터 모델링
데이터 모델링의 개념
- 데이터베이스 설계를 위한 과정으로, 데이터의 구조를 시각적으로 표현.
데이터베이스 생명주기
- 요구사항 수집 및 분석: 사용자 요구사항을 듣고 데이터베이스 구축의 범위 설정.
- 설계: 개념적, 논리적, 물리적 모델링.
- 구현: 설계된 스키마를 실제 DBMS에 적용.
- 운영: 구현된 데이터베이스를 기반으로 소프트웨어 구축 및 서비스 제공.
- 감시 및 개선: 데이터베이스의 문제점을 파악하여 개선.

데이터 모델링 단계
- 개념적 데이터 모델링
- 비즈니스 요구사항을 반영한 데이터 모델
- 주요 객체와 관계를 정의
- ER 다이어그램 작성
- 논리적 데이터 모델링
- 개념적 모델을 구체화하여 테이블 구조를 정의
- 속성과 관계를 상세히 기술
- 정규화 수행
- 물리적 데이터 모델링
- 논리적 모델을 실제 데이터베이스에 구현하기 위한 모델
- 데이터 타입, 인덱스, 제약조건 등을 정의
- 성능 최적화를 고려한 저장 구조 설계
🥸 해당 내용은 정보처리기사 필기/실기에 자주 나오는 개념입니다. → '개논물' 이라고 외우면 편합니다.
ER모델 (ER Model)
- 현실 세계의 개체와 관계를 도출하여 ER 다이어그램으로 표현

- 개체 (Entity): 독립적인 의미를 지닌 유무형의 사람 또는 사물
개체 타입(Entity Type), 개체 집합(Entity Set)
-- 개체 예시
CREATE TABLE Book (
book_id INT PRIMARY KEY,
book_title VARCHAR(100),
author VARCHAR(100)
);
- 속성 (Attribute): 개체의 특성을 나타내는 요소
기본적으로 타원으로 표현
유일 식별 가능 속성은 밑줄로 표시
-- 속성 예시
CREATE TABLE Customer (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE
);
- 관계 (Relationship): 개체 간의 연관성을 나타냄
관계 타입(Relationship Type), 관계 집합(Relationship Set)
관계 대응수(Cardinality)
-- 관계 예시
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES Customer(customer_id)
);
IE 표기법
- ER 다이어그램을 축약하여 표현.
- 비식별자적 관계는 점선, 식별자적 관계는 실선.
- 최소 참여는 'o', 필수 참여는 '|'.
-- IE 표기법 예시
CREATE TABLE Department (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE Employee (
emp_id INT PRIMARY KEY,
emp_name VARCHAR(100),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES Department(dept_id)
);

5. MySQL 개요 및 환경 구축
MySQL
- Oracle 사에서 제작한 오픈 소스 DBMS 소프트웨어.
- 오픈 소스란 소스를 공개한 소프트웨어로 누구나 무료로 다운로드할 수 있음.

MySQL 설치
- MySQL 공식 사이트에서 MySQL Community Server 다운로드.
- 설치 마법사에 따라 설치 진행.
- MySQL Workbench 설치 (옵션).
MySQL 환경 설정
- MySQL 서버 실행.
- MySQL Workbench에서 서버에 연결.
- 기본 데이터베이스와 테이블 생성.
- Oracle 사에서 제작한 DBMS 소프트웨어로 오픈 소스로 제공된다
(오픈 소스란? 소스를 공개한 소프트웨어로 누구나 무료로 다운로드할 수 있음)
- MySQL 설치 방법은 영상으로 잘 설명되어 있어서,
이 영상을 따라 설치하는 것을 추천한다.
(유튜브 창에 한빛미디어 이것이 MySQL이다 검색 후, 첫 번째 영상 참고을 참고해주세요!)
TMI
MySQL에 대한 조금의 TMI를 적어보자면,
1) 상징 동물은 돌고래입니다.
2) OracleDB 다음으로 2번째의 RDBMS 자리를 차지하고 있습니다.
# 실습에 들어가기 전 TMI를 적어보았습니다 ㅎㅎ
7. 예시 코드
- 데이터베이스를 사용하기 위해선 직접 코드를 작성해보고 실행되는 과정을 보는 것이 중요하다고 생각한다.
- 이러한 이유로 교재를 기반으로 기본적으로 외워야할 예시 코드를 모아두었다.
데이터베이스 및 테이블 생성
-- 데이터베이스 생성
CREATE DATABASE my_database;
-- 데이터베이스 사용
USE my_database;
-- 사용자 테이블 생성
CREATE TABLE User (
user_id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 프로필 테이블 생성 (1:1 관계)
CREATE TABLE Profile (
profile_id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
bio TEXT,
FOREIGN KEY (user_id) REFERENCES User(user_id)
);
-- 주문 테이블 생성 (1:N 관계)
CREATE TABLE Orders (
order_id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
order_date DATE,
FOREIGN KEY (user_id) REFERENCES User(user_id)
);
-- 강좌 테이블 생성
CREATE TABLE Course (
course_id INT PRIMARY KEY AUTO_INCREMENT,
course_name VARCHAR(100) NOT NULL
);
-- 사용자-강좌 관계 테이블 생성 (N:N 관계)
CREATE TABLE User_Course (
user_id INT NOT NULL,
course_id INT NOT NULL,
PRIMARY KEY (user_id, course_id),
FOREIGN KEY (user_id) REFERENCES User(user_id),
FOREIGN KEY (course_id) REFERENCES Course(course_id)
);
데이터 삽입 및 조회
-- 사용자 데이터 삽입
INSERT INTO User (username, email) VALUES ('JohnDoe', 'john@example.com');
INSERT INTO User (username, email) VALUES ('JaneDoe', 'jane@example.com');
-- 프로필 데이터 삽입
INSERT INTO Profile (user_id, bio) VALUES (1, 'Hello, I am John!');
INSERT INTO Profile (user_id, bio) VALUES (2, 'Hello, I am Jane!');
-- 주문 데이터 삽입
INSERT INTO Orders (user_id, order_date) VALUES (1, '2023-07-01');
INSERT INTO Orders (user_id, order_date) VALUES (1, '2023-07-15');
INSERT INTO Orders (user_id, order_date) VALUES (2, '2023-07-20');
-- 강좌 데이터 삽입
INSERT INTO Course (course_name) VALUES ('Database Basics');
INSERT INTO Course (course_name) VALUES ('Advanced SQL');
-- 사용자-강좌 관계 데이터 삽입
INSERT INTO User_Course (user_id, course_id) VALUES (1, 1);
INSERT INTO User_Course (user_id, course_id) VALUES (1, 2);
INSERT INTO User_Course (user_id, course_id) VALUES (2, 1);
-- 사용자 데이터 조회
SELECT * FROM User;
-- 특정 사용자의 프로필 조회 (1:1 관계)
SELECT User.username, Profile.bio
FROM User
JOIN Profile ON User.user_id = Profile.user_id
WHERE User.user_id = 1;
-- 특정 사용자의 주문 조회 (1:N 관계)
SELECT User.username, Orders.order_date
FROM User
JOIN Orders ON User.user_id = Orders.user_id
WHERE User.user_id = 1;
-- 특정 강좌를 수강하는 사용자 조회 (N:N 관계)
SELECT Course.course_name, User.username
FROM Course
JOIN User_Course ON Course.course_id = User_Course.course_id
JOIN User ON User_Course.user_id = User.user_id
WHERE Course.course_id = 1;
8. MySQL 교육 타임라인 정리
이번 TIL에서는 데이터 베이스 활용과 모델링에 대한
핵심 내용만을 축약해 보았습니다.
그 외 관련된 내용은 아래 타임라인에
더 자세히 요약해두었니 참고해주세요!
👩💻타임라인
1일차. 데이터베이스 기본 및 MySQL 환경 구축
2024.07.09 - [KB IT's Your Life/교육] - [043] 데이터베이스 활용 및 MySQL 환경 구축
2일차.SQL 기초 / SQL 고급
2024.07.10 - [KB IT's Your Life/교육] - [044] SQL 기초 / SQL 고급
3일차. SQL 고급 / 테이블과 뷰
2024.07.11 - [KB IT's Your Life/교육] - [045] SQL 고급 / 테이블과 뷰
4일차. 트랜잭션, JDBC 프로그래밍
2024.07.15 - [KB IT's Your Life/교육] - [047] 트랜잭션, JDBC 프로그래밍
5일차. 뷰&정규화 과정 (+JDBC 프로그래밍 중요코드)
2024.07.16 - [KB IT's Your Life/교육] - [048] 뷰&정규화 과정 (+JDBC 프로그래밍 중요코드)
6일차. 인덱스 (+ScoularTodo 제작)
2024.07.17 - [KB IT's Your Life/교육] - [049] MySQL: 인덱스 (+ScoularTodo 제작)
7일차. 페이지네이션 + TodoApp 구현하기
2024.07.18 - [KB IT's Your Life/교육] - [050] 페이지네이션 + TodoApp 구현하기
KB IT's Your Life 부트캠프에서는
7~8일동안 MySQL에 대해 자세히 배웁니다.
MySQL은 데이터베이스 관리 시스템으로,
대량의 데이터를 효율적으로 저장, 검색, 분석할 수 있게 해줍니다!
안정적이고 빠른 데이터 처리를 위해서 필수적인 MySQL을 배우며,
다양한 웹 애플리케이션 및 서비스에 활용할 수 있을 것이라 생각합니다.
📒TIL을 마무리하며..
1주차 TIL을 작성하며,
일주일동안 내용을 다시 한 번 복습할 수 있었습니다.
틀린 부분이나 지식 공유는 언제나 환영이니,
댓글에 남겨주시면 감사하겠습니다.
감사합니다!

'KB IT's Your Life > KB 기자단' 카테고리의 다른 글
| [TIL_5] KB 부트캠프: Spring과 Vue로 연동하기 (6) | 2024.09.01 |
|---|---|
| [TIL_4] KB 부트캠프: JWT (0) | 2024.08.26 |
| [TIL_3] KB 부트캠프: REST API (5) | 2024.08.18 |
| [TIL_2] KB 부트캠프: 컴포넌트 백엔드 (0) | 2024.08.04 |
| [TIL] Today I Learned 기자단에 참여하며 .. (2) | 2024.07.27 |