W2D2- 실리콘밸리에서 날아온 데이터베이스 🎁

Sangwon Na·2021년 8월 10일
0

MySQL 소개

  • 1955년 스웨덴 회사였던 MySQL AB에 의해 개발된 관계형 데이터베이스
    * 오픈소스로 시작됨(무료)
    • My는 개발자 중 한 사람의 딸의 이름이었음.
  • 2008년 썬 마이크로시스템가 MySQL AB를 $1B을 주고 인수
  • 2009년 오라클이 썬을 인수하면서 MySQL이 유료화 여부가 쟁점이 됨
  • 2010년 MySQL의 처음 개발자였던 Monty가 MySQL과 호환이 되는 MariaDB라는 오픈소스 개발

MySQL 종류와 버전

  • MariaDB
    * 오픈소스로 무료, MySQL 5.5에 기반해서 개발됨, MySQL과 인터페이스는 동일하나 성능은 더 좋음
  • MySQL
    • 두 가지 종류가 존재
      * MySQL Community Server: 오픈소스로 무료. 우리가 사용해볼 버전
      • MySQL Enterprise Server: 유료 버전으로 다양한 플러그인 제공

MySQL 특징

  • 한동안 웹개발 표준 기술 스택 중 하나
    * LAMP: Linux, Apache, MySQL, PHP

  • Postgres와 함께 가장 널리 쓰이는 프로덕션용 관계형 데이터베이스

  • 용량 증대(Scaling) 방식 1
    * Scale-Up: 서버에 CPU와 Memory 추가

  • 용량 증대 (Scaling) 방식 2
    * Scale-Out: Master-Slave 구성

    • 읽기 작업만 Master를 통해 Slave에서 읽어옴. 따라서 읽기에 대해선 용량 증대 효과를 얻을 수 있음.
    • 쓰기작업은 Master에만 할 수 있음.

    • 일반적으로 Scale-Out은 클러스터 구성을 이야기 하나 MySQL은 이를 지원하지 못함.

    클라우드

1. 클라우드의 정의

  • 컴퓨팅 자원(하드웨어, 소프트웨어 등등)을 네트웍을 통해 서비스 형태로 제공
  • 키워드
    "No Provisioning" 프로비저닝은 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것을 말한다.
    "Pay As You Go" 사용한 만큼 지불하고 사용하는 것을 말한다.
  • 자원을 필요한 만큼 실시간으로 할당하여 사용한 만큼 지불
    • 탄력적으로 필요한 만큼의 자원을 유지하는 것이 중요

2. 클라우드 컴퓨팅이 없다면?

  • 서버/네트웍/스토리지 구매와 설정 등을 직접 수행
  • 데이터센터 공간을 직접 확보
  • 서버를 직접 구매하고 설치(네트웍 설정)
    • 보통 서버를 구매하는 경우 두세달은 걸림
    • 확장이 필요한 경우, 서버보단 공간을 먼저 확보해야함.
  • Peak time을 기준으로 Capacity planning을 해야합니다.
    * 놀고 있는 자원들이 존재

3. 클라우드 컴퓨팅의 장점

  • 초기 투자 비용이 크게 줄어듬
    • CAPEX(Capital Expenditure) vs OPEX(Operating Expense)
    • 예산이 적어서 재무팀이랑 싸울 일이 없다.
  • 리소스 준비를 위한 대기시간 대폭 감소
  • 노는 리소스 제거로 비용 감소
  • 글로벌 확장 용이(리전이 전세계 곳곳에 있음)
  • 소프트웨어 개발 시간 단축
    • Managed Service (SaaS) 이용

3.1 AWS 소개

  • 가장 큰 클라우드 컴퓨팅 서비스 업체

다양한 종류의 서버 구매옵션 제공

  • On-Demand: 시간당 비용을 지불하며 가장 흔히 사용하는 옵션
  • Reserved: 1년이나 3년간 사용을 보장하고 1/3 정도에서 40% 디스카운트를 받는 옵션
  • Spot Instance: 일종의 경매방식으로 놀고 있는 리소스들을 보다 싼 비용으로 사용 할 수 있는 옵션

EC2 - Elastic Cloud Compute

  • AWS의 서버 호스팅 서비스
  • 리눅스 혹은 윈도우 서버를 론치하고 로그인 가능
  • 가상 서버들이라 전용서버에 비해 성능이 떨어짐
  • Bare-metal 서버도 제공하기 시작

S3 - Simple Storage Service

  • 아마존이 제공하는 대용량 클라우드 스토리지 서비스
  • S3는 데이터 저장관리를 위해 계층적 구조를 제공
  • 글로벌 네임스페이스를 제공하기 때문에 탑레벨 디렉토리 이름 선정에 유의
  • S3에서는 디렉토리를 버킷(Bucket)이라고 부름
  • 버킷이나 파일별로 액세스 컨트롤 가능

4. Database Services

  • RDS(Relational Database Service)

    • MySQL/MariaDB, PostgreSQL, Aurora
    • AWS에서 제공하는 Redshfit
  • AI & ML Services

    • SageMaker
    • Lex
    • Polly
    • Rekognition
  • 기타 중요 서비스

    • Amazon Alexa(아마존 보이스 봇), Amazon Connect(콜센터 구현)
    • Lambda

5. Docker란 무엇인가?

도커는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트이다. 도커 웹 페이지의 기능을 인용하면 다음과 같다: 도커 컨테이너는 일종의 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 감싼다.
MySQL를 다른 OS에서 설치하려면 다양한 변수가 존재

Virtualization vs Containerization

  • Docker Engine으로 컨테이너화 시켜서 패키지 프로그램등을 가상화로 돌릴 수 있습니다.

5.1 Docker 다운로드 및 설치

docker engine 다운로드

⚠ 설치 후 에러 발생시


Windows Subsystem for Linux Update Setup
wsl_update_x64 다운로드

wsl_update_x64 설치 하시면 대부분 에러가 해결 되시겠지만,
안되는 분들은 이미 VMware나 Virtual Box의 가상 하이퍼바이저가 Docker와 충돌하였기에, Hyper-V를 체크해제 하시고 docker engine을 실행하시면 됩니다.

🍖 MySQL docker image 다운로드
docker pull mysql/mysql-server:8.0  

🍖 Docker container 실행 
docker run --name= mysql_container --restart on-failure -d mysql/mysql-server:8.0 

🍖 MySQL root 계정의 패스워드 찾기
docker logs mysql_container 2>&1 | grep GENERATED

🍖 MySQL shell 실행하기
docker exec -it mysql_container mysql -uroot -p


6. DDL과 데이터 소개

  1. 관계형 데이터베이스 예제 - 웹서비스 사용자/세션 정보
  • 사용자 ID: 웹서비스에서는 등록된 사용자마자 부여하는 유일한 ID
  • 세션 ID: 세션마다 부여되는 ID
    • 세션: 사용자의 방문을 논리적인 단위로 나눈 것
      • 사용자가 외부링크를 타고 오거나 직접 방문해서 올 경우 세션을 생성
      • 사용자가 방문 후 30분간 상호작용이 없다가 뭔가를 하는 경우 새로 세션을 생성
    • 하나의 사용자는 여러 개의 세션을 가질 수 있음.
    • 보통 세션의 경우 세션을 만들어낸 터치포인트=접점(경유지)를 채널이란 이름으로 기록해둠.
      • 마케팅 관련 기여도 분석을 위함.
  1. 관계형 데이터베이스 예제: 우리가 저장하고 싶은 데이터

prod 데이터베이스


1. session 테이블

컬럼타입부가설명
idint세션 ID101 (기본키)
user_idint사용자 ID201
createdtimestamp세션 생성시간2021-05-01 11:32:59
channel_idint채널 ID1 (Foreign Key)

2. channel 테이블

컬럼타입설명
idintsession 테이블 channel_id의 Primary Key
channelvarchar(32)외부키

테이블 필드의 중요 속성

  • PRIMARY KEY
    • 테이블에서 레코드의 유일성을 정의하는 필드: 그것이 primary key(예: 이메일, 주민번호)
    • Composite(합성) primary key: primary key가 두개 혹은 그 이상의 필드로 정의되는 경우
    • Primary key로 지정된 필드가 있는 경우 데이터베이스단에서 중복된 값을 갖는 레코드가 생기는 것을 방지함: primary key uniqueness constraint(제약)
  • Foreign key
    • 테이블의 특정 필드가 다른 테이블의 필드에서 오는 값을 갖는 경우
  • NOT NULL
    • 필드의 값이 항상 존재해야하는 경우 (비어있는 값에 null로 초기화되는데 이걸 not null로 선언하면 null이 아니라 값을 무조건 저장하게끔)
  • DEFAULT value
    • 필드에 값이 주어지지 않은 경우 기본값을 정의해줌
    • timestamp 타입: CURRENT_TIMESTAMP를 사용하면 현재 시간으로 설정됨.
  • 관계형 데이터베이스 예제: channel table DDL
CREATE TABKE channel (
	id int not null auto_increment primary key,
    	channel varchar(32) not null
);

// primary key는 뒤로 빼서 입력하는게 범용적
CREATE TABLE channel ( 
	id int not null auto_increment,
    	channel varchar(32) not null,
        primary key(id)
);

CREATE TABLE session (
	id int not null auto_increment primary key,
    	user_id int not null,
    	created timestamp not null default current_timestamp,
    	channel_id int not null,
    	foreign key(channel_id) references channel(id)
);
// [테이블channel]의 id값을 [테이블session]의 channel_id를 참조하여 foreign key로 설정 

profile
나상원의 LOG

0개의 댓글