MySQL
MySQL은 관계형 데이터베이스에서 가장 많이 사용되는 무료 DBMS이다.
MySQL에는 대표적으로 두 가지 버전이 있는데 하나는 8.x 버전과 또 다른 하나로 5.x가 있다.
InnoDB | MyISAM |
서버를 여러 개 두어서 클러스터를 구성할 수 있다. | 클러스터를 구성할 수 없다. |
MyISAM보다 느리다. | InnoDB보다 간단하고 빠르다. |
ACID 모델을 따르며 트랜잭션을 지원한다. | 트랜잭션을 지원하지 않는다. |
데이터의 변화가 많은 서비스에 작합하다. | 읽기 전용 또는 읽기 위주의 작업에 적합하다. |
8.x 버전은 InnoDB, 5.x 버전은 MyISAM이라는 엔진을 가지고 있는데 두 버전의 차이점은 위의 표와 같다.
엔진마다 차이점이 있기 때문에 상황에 따라서 사용하면 된다.
MySQL 5.5 버전 이상부터 InnoDB가 기본 스토리지 엔진이기 때문에 앞으로 설명할 MySQL 버전은 8.x로 진행하였다.
MySQL 설치 과정 및 초기 설정
MySQL 설치는 리눅스 가상 머신으로 CentOS 8 버전에서 설치를 진행하였다.
먼저 MySQL을 설치하기 위해서는 IP 설정을 먼저 해줘야 한다. 앞서 리눅스를 공부하면서 IP 설정하는 방법을 정리했으니 참고하면서 설정하면 될 것 같다.
IP 설정을 마친 후 MySQL 서버를 설치해준다.
yum install -y mysql-server ## MySQL 서버 설치
서버를 설치하고 실행을 한 후에 서버가 잘 켜져 있는지 확인한다.
systemctl start mysqld ## MySQL 서버 실행
systemctl status mysqld ## MySQL 서버 실행 상태를 확인
포트 번호를 확인하면 LISTEN으로 되어 있는 것을 알 수 있다. 포트 번호가 열려있는 상태로 방화벽을 풀어주면 접속이 가능하다. (같은 대역폭에 있다는 가정)
여기서 중요한 것은 mysqld를 실행했다는 것이다.
MySQL도 클라이언트 프로그램과 서버 프로그램으로 나뉜다.
mysql은 클라이언트 프로그램으로 기본적인 쿼리문을 작성하게 되고 mysqld는 서버 프로그램으로 데이터를 안전하게 테이블 형태로 CRUD할 수 있는 서비스를 클라이언트에 제공해준다.
netstat -anlp | grep :3306 ## 포트 번호 확인
포트 번호까지 확인하고 난 후에 MySQL 초기 설정을 해줘야 된다.
mysql_secure_installation ## MySQL 초기 설정
# MySQL 초기 설정 내용
- root 사용자의 비밀번호 생성하기
- 사용자 계정 없이 접속할 수 있는 익명 사용자를 삭제하시겠습니까? [Y|N]
- 원격으로 root 로그인을 허용하지 않으시겠습니까? [Y|N]
- 기본적으로 제공되는 데이터베이스를 삭제하시겠습니까? [Y|N]
- 지금까지의 모든 변경 사항을 적용하고 다시 로드하시겠습니까? [Y|N]
초기 설정까지 완료하면 MySQL의 Workbench를 통해서 접속할 수 있다.
스키마
스키마(Schema)란 DB의 구조(개체, 속성, 관계)에 대한 정의 및 제약 조건 등을 기술한 것이다.
데이터 전체의 구조를 정의하는 개념 스키마, 실제로 이용자가 취급하는 데이터 구조를 정의하는 외부 스키마 및 데이터 구조의 형식을 구체적으로 정의하는 내부 스키마가 있다.
MySQL에서 DB를 스키마와 동일하다고 생각할 수 있다.
데이터베이스 설계
서비스를 개발하는 데 있어서 중요한 부분이다.
현실 세계의 데이터 구조를 컴퓨터 세계의 데이터 구조로 기술하는 논리적 구조로 현실 세계의 다양한 데이터를 DB에 표현하기 위한 중간 과정이다.
DB 설계를 어떻게 했는지에 따라서 개발 및 유지보수가 편리해진다.
설계에는 총 5단계가 있는데 1. 요구사항 분석 --> 2. 개념적 설계 --> 3. 논리적 설계 --> 4. 물리적 설계 --> 5. 구현 순서이다.
처음에 요구사항 명세서를 작성하게 되는데 해당 명세서에 기능적 요구사항과 비기능적 요구사항을 작성하게 된다.
기능적 요구사항
- 시스템에 주어지는 특정 입력에 대한 시스템이 산출하는 출력을 통해 정의된다.
- 반드시 구현되어야 할 필수적인 작업과 동작 등을 정의함으로써 어떤 기능이 구현되어야 하는지를 설명한다.
Ex) 로그인을 한다, 회원 가입을 한다
비기능적 요구사항
- 소프트웨어 기능들에 대한 조건(시스템의 속성)과 제약사항에 관한 요구사항
- 특정 기능보다는 전체 시스템의 동작을 평가하는 척도를 정의한다.
Ex) 로그인 시 1초 이내로 접속이 가능해야 한다, 상품을 클릭했을 때 해당 제품의 사진이 1초 이내로 로드되어야 한다.
개념 설계
개념 설계 단계에서는 앞서 작성한 요구 사항 명세서를 바탕으로 ERD를 작성하게 된다.
엔티티(개체)와 릴레이션(관계)으로 개체 간의 관계도를 그려보고 여러 속성을 유추해 볼 수 있다.
ERD의 구성요소에는 여러 가지가 있다.
위의 그림과 같이 여러 가지 속성들을 이용해서 ERD를 그려줄 수 있다.
관계를 총 3가지로 나눌 수 있는데 1:1, 1:N, N:M 관계로 나눌 수 있다. 또한 해당 관계가 필수적으로 형성되는 것인지 혹은 선택적으로 형성되는 것인지를 표현해 줄 수 있다.
관계형 데이터베이스에서 가장 중요한 것은 키인데 해당 키를 통해서 테이블 간 관계를 맺어주게 된다.
어떻게 맺어주는가에 따라서 성능이 달라질 수 있기 때문에 DB 설계를 잘해야 되는 이유이다.
논리 설계 단계
이제 개념 설계가 끝나고 ER 다이어그램이 만들어졌다면 그것을 바탕으로 직접 테이블을 만들어주는 단계이다.
위의 사진과 같이 테이블을 만들면서 각종 데이터 타입을 지정해 주게 된다.
정규화란 작업도 논리 설계에서 진행하게 된다.
물리 설계 단계
논리 설계가 끝나면 이제는 물리 설계를 시작한다. DB 서버는 몇 대를 사용할 것인지, 어떻게 구성하고 데이터를 저장할 것인지 정하게 된다.
나중에 서버 이중화를 학습할 예정으로 따로 정리글을 올릴 예정이다.
MySQL 자료형 타입
MySQL에서는 여러 가지 데이터 타입을 제공한다.
숫자 타입
데이터 타입 | 최소 | 최대 |
BigInt | -263 | 263-1 |
int | -231 | 231-1 |
smallint | 0 | 215-1 |
tinyint | 0 | 28-1 |
bit | 0 | 1 |
decimal | -1038+1 | 1038-1 |
numeric | -1038+1 | 1038-1 |
실수 타입 | 최소 | 최대 |
float | -1.79E + 308 | 1.79E + 38 |
문자 타입
데이터 형식 | 설명 |
char | 최대 길이를 8000자까지 설정할 수 있는 고정 길이 문자열 |
varchar | 최대 길이를 8000자까지 설정할 수 있는 가변 길이 문자열 |
varchar(max) | 최대 길이가 231자인 가변 길이 문자열 |
text | 최대 20억 길이를 가지는 문자열 |
날짜 타입
데이터 형식 | 설명 |
DATE | 레코드에 날짜 데이터를 저장하는데 사용 |
TIME | 레코드에 시간 데이터를 저장하는데 사용 |
DATETIME | 레코드에 데이터, 날짜 및 시간을 모두 저장하는데 사용 |
이 외에 여러 가지 타입이 존재한다.
참고 자료
'DB' 카테고리의 다른 글
MySQL - SELECT (1) | 2023.11.09 |
---|---|
MySQL - SQL (0) | 2023.11.09 |
데이터베이스 - 트랜잭션과 무결성 (2) | 2023.10.28 |
데이터베이스 - ERD와 정규화 (0) | 2023.10.28 |
데이터베이스 (0) | 2023.10.26 |