- MySQL 소개
MySQL 역사
1995년 스웨덴 회사 MySQL AB에 의해 개발된 관계형 데이터베이스
My는 개발자 중 한 사람의 딸임자바를 개발한 썬마이크로시스템에서 인수
오라클이 썬마이크로시스템을 인수하면서 MySQL 유료화 여부가 쟁점이 됨
2010년에 MySQL의 초기 개발자였던 Monty가 MySQL과 호환되는 MariaDB라는 오픈소스 개발
MariaDB는 5.5에 기반해서 만들었고, 성능은 더 좋다
MySQL 특징
한때 웹 개발 표준 기술 스택 중의 하나였음
지금도 Postgres와 함께 가장 널리 쓰이는 프로덕션용 관계형 데이터베이스
MySQL 용량 증대(Scaling) 방식
Scale-Up
Scale-Out

- 클라우드와 AWS
클라우드 컴퓨팅 소개
컴퓨팅 자원(SW, HW 등)을 네트워크를 통해 실시간으로 할당하여 서비스 형태로 제공해서 사용한만큼 지불
IaaS, PaaS, SaaS
클라우드 컴퓨팅이 없다면?
서버/네트워크/스토리지를 직접 구매
데이터센터 공간을 직접 확보
Peak time을 기준으로 Capacity Planning을 수행
클라우드 컴퓨팅 장점
초기 투자 비용이 크게 줄어듬
리소스 준비를 위한 대기시간 감소
여유 리소스 제거로 비용감소
글로벌 확장 용이
SW 개발 시간 단축
AWS 소개
세상에서 가장 큰 클라우드 컴퓨팅 서비스 업체
2002년 아마존의 상품데이터를 API로 제공하면서 시작
EC2(Elastic Cloud Compute)
AWS의 서버 호스팅 서비스
구매옵션
On-Demand : 시간당 비용지불
Reserved : 1년이나 3년 사용을 보장하고 1/3 정도 시점에서 40% 할인을 받는 옵션
Spot Instance : 일종의 경매방식으로 놀고있는 리소스를 싼 가격으로 사용하는 방법
S3
AWS에서 제공하는 대용량 클라우드 스토리지 서비스
데이터 저장관리를 위해 계층적 구조
글로벌 네임스페이스를 제공하기 때문에 디렉토리 이름 선정 시 주의해야함
S3에서 디렉토리를 버킷(Bucket)이라고 부름
버킷이나 파일별로 접근 통제가 가능
- MySQL 설치와 Docker
Docker란?
Docker는 특정 프로그램과 (그 프로그램을 실행하는데) 필요한 다양한 SW들을 하나의 패키지로 만듦으로서 해당 프로그램의 개발과 사용을 도와주는 오픈소스 플랫폼
Docker Image : 패키지를 파일 시스템 형태로 만든 것, 타인과 공유가능
Docker Registry(Hub) : Docker Image 공유소
Docker Container : Docker Image를 실행시킨 것, 응용프로그램에 해당한다
예를 들어, MySQL을 다른 OS에서 설치하려면 다양한 변수가 존재한다. 이를 해결하기 위한 방법이 Docker
Docker 구조

설치 방법
사전 작업(링크)
WSL2 커널 업데이트
WSL2를 기본 버전으로 사용하도록 설정 : 시작 우클릭 > Windows PowerShell(관리자)
wsl --set-default-version 2Ubuntu 설치 : Microsoft Store > "Ubuntu" 검색 > Ubuntu > 설치
Ubuntu 계정 설정 및 업데이트 : Ubuntu 실행 > ID/PW 설정 > 업데이트
sudo apt update -yUbuntu WSL 버전 확인
wsl -l -v
docker 데스크탑 설치
터미널 실행
mysql 8.0버젼 이미지를 도커에 설치
docker pull mysql/mysql-server:8.0다운로드받은 이미지를 도커 컨테이너에 실행
docker run --name=mysql_container -- restart on-failure -d mysql/mysql-server:8.0mysql 루트계정 패스워드 찾기
docker logs mysql_container 2>&1 || grep GENERATED
docker에서 mysql 쉘 실행하기
docker exec -it mysql_container mysql -uroot -p처음에 mysql을 사용하면 번호를 바꿔야한다
alter user 'root'@'localhost' identified with mysql_native_password by '1234';
- MySQL 설치와 AWS의 RDS
AWS RDS란?
AWS가 제공해주는 다양한 관계형 데이터베이스 서비스
이후 실습은 여기서 만든 AWS RDS를 사용할 예정이고, 공용 계정을 사용할거니깐 계정 정보는 내일 준다
돈낭비 하지말라는 것 같음
- DDL과 RDBMS 예제 데이터 소개
웹 서비스 사용자/세션 정보 1
사용자 ID
세션 ID (Session ID)
세션마다 부여되는 ID
사용자의 웹 사이트 방문을 논리적인 단위로 나눈 것을 세션(Session)이라고 한다
사용자가 외부 링크를 타고 들어오가나 직접 방문하면 세션이 생성
웹 서비스 사용자/세션 정보 2
한 명의 사용자가 여러 세션을 만들 수 있고, 세션은 생성 시간도 기록한다
세션에 대한 정보를 기반으로 다양한 데이터 분석과 지표 설정 가능
웹 서비스 사용자/세션 정보 3
100이 총 3개의 세션을 갖는 예시 (사진 수정하자)
관계형 데이터베이스(RDB) 예제
초기 설정 (세션 정보)
| 컬럼 | 타입 | 부가설명 | 예시 |
|---|---|---|---|
| id | int | 세션 ID | 101 |
| user_id | int | 사용자 ID | 202 |
| created | timestamp | 세션 생성시간 | 2021-08-10 17:01:28 |
| channel | varchar(64) | 채널(접점) 이름 |
테이블 두 개로 나누기
prod 데이터베이스의 session 테이블
| 컬럼 | 타입 |
|---|---|
| id | int |
| user_id | int |
| created | timestamp |
| channel_id | int |
prod 데이터베이스의 channel 테이블
| 컬럼 | 타입 |
|---|---|
| id | int |
| channel | varchar(32) |
테이블 필드의 중요 속성 1
Primary Key
Foreign Key
구현
CREATE TABLE Session (
id int,
user_id int,
created timestamp,
channel_id int,
PRIMARY KEY(id)
FOREIGN KEY(channel_id) REFERENCES Channel(channel)
);
CREATE TABLE Channel (
id int,
channel varchar(30),
PRIMARY KEY(id)
);
테이블 필드의 중요 속성 2
NOT NULL
비어있으면 안 된다는 속성
필드값이 항상 존재해야하는 경우 사용한다
DEFAULT value
CURRENT_TIMESTAMP를 사용하면 현재 시간으로 설정됨구현
CREATE TABLE Session (
id int NOT NULL,
user_id int,
created timestamp,
channel_id int,
PRIMARY KEY(id)
FOREIGN KEY(channel_id) REFERENCES Channel(channel)
);
CREATE TABLE Channel (
id int NOT NULL,
channel varchar(30),
PRIMARY KEY(id)
);
최종 table Channel DDL
CREATE TABLE Channel(
id int not null auto_increment primary key,
channel varchar(32) not null
);
/*두 코드의 성능과 결과는 같음*/
/*차이하면 후자는 Composite Primary Key를 만드는데 유리하다*/
CREATE TABLE Channel(
id int not null auto_increment,
channel varchar(32) not null,
primary key(id)
);
최종 table Session DDL
CREATE TABLE Session(
id int not null auto_increment,
user_id int not null,
created timestamp not null default CURRENT_TIMESTAMP,
channel_id int not null,
primary key(id),
foreign key(channel_id) references Channel(channel)
);