마트철수

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

KB IT's Your Life/KB 기자단

[TIL_1] 데이터 베이스 활용 & 모델링

마트스 2024. 7. 28. 16:43

 

KB IT's Your Life 5기 / 부트캠프 국비지원 풀스택

 

안녕하세요,

 

'Today I Learned' 1주차에서는

데이터베이스 활용 그리고 모델링에 대해

작성해보고자 합니다.

 

1일 기록으로 작성한 포스팅은

가장 하단에 타임라인으로 따로 정리해두었으니

이 부분도 참고해주시면 감사하겠습니다.

 


목차

  1. 데이터와 데이터베이스의 개념
  2. 관계형 데이터베이스란?
  3. 관계형 데이터베이스의 특징
  4. MySQL 개요
  5. 데이터 모델링
  6. MySQL 설치 및 환경 구축
  7. 예시 코드
  8. 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. 데이터 모델링

데이터 모델링의 개념

  • 데이터베이스 설계를 위한 과정으로, 데이터의 구조를 시각적으로 표현.

데이터베이스 생명주기

  1. 요구사항 수집 및 분석: 사용자 요구사항을 듣고 데이터베이스 구축의 범위 설정.
  2. 설계: 개념적, 논리적, 물리적 모델링.
  3. 구현: 설계된 스키마를 실제 DBMS에 적용.
  4. 운영: 구현된 데이터베이스를 기반으로 소프트웨어 구축 및 서비스 제공.
  5. 감시 및 개선: 데이터베이스의 문제점을 파악하여 개선.

 

데이터베이스 생명주기

 

데이터 모델링 단계

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

 

ER모델 (ER Model)

  • 현실 세계의 개체와 관계를 도출하여 ER 다이어그램으로 표현

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)
);

 

 

Peter Chen 표기법과 IE표기법의 비교

 

5. MySQL 개요 및 환경 구축

 

MySQL

  • Oracle 사에서 제작한 오픈 소스 DBMS 소프트웨어.
  • 오픈 소스란 소스를 공개한 소프트웨어로 누구나 무료로 다운로드할 수 있음.

출처: MySQL

MySQL 설치

  1. MySQL 공식 사이트에서 MySQL Community Server 다운로드.
  2. 설치 마법사에 따라 설치 진행.
  3. MySQL Workbench 설치 (옵션).

 

MySQL 환경 설정

  1. MySQL 서버 실행.
  2. MySQL Workbench에서 서버에 연결.
  3. 기본 데이터베이스와 테이블 생성.
  • 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 부트캠프 채용우대교육 기자단