HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🛁
공부기록
/
🧑🏻‍💻
TIL
/
TIL - 5

TIL - 5

태그
DB
날짜
Mar 29, 2022
속성

MySQL 소개

MySQL 역사

  • 1995년 스웨덴 회사엿던 MySQL AB에 의해 개발된 관계형 데이터베이스
    • 오픈소스로 시작됨
  • 2008년 썬 마이크로시스템이 인수
  • 2009년 오라클이 썬을 인수하면서 MySQL이 유료화 여부가 쟁점이 되었다.
  • 2010년 MySQL의 처음 개발자였던 Monty가 MySQL과 호환이 되는 MariaDB라는 오픈소스 개발

MySQL 종류와 버전

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

MySQL 특징 1

  • 한동안 웹 개발 표준 기술 스택 중의 하나였다.
    • LAMP : Linux, Apache, MySQL, PHP
  • 지금도 Postgres와 함께 널리 쓰이는 프로덕션용 관계형 데이터베이스다.
  • 용량 증대 (Scaling) 방식 1
    • Scale-Up : 서버에 CPU와 Memory 추가

MySQL 특징 2

  • 용량 증대 방식 2
    • Scale-OUT : Master-Slave 구성(읽기에 용량만 증대시켜주는 기능)
    • 일반적으로 클러스터 구성을 이야기하나 MySQL은 이를 지원하지 못함

클라우드 / AWS 소개

클라우드 정의

  • 컴퓨팅 자원(하드웨어, 소프트웨어 등등)을 네트웍을 통해 서비스 형태로 제공
  • 키워드
    • No Provisioning
    • Pay As You Go
  • 자원을 필요한 만큼 (거의) 실시간으로 할당하여 사용한 만큼 지불
    • 탄력적으로 필요한만큼의 자원을 유지하는것이 중요

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

  • 서버/네트웍/스토리지 구매와 설정들을 직접 수행해야함
  • 데이터센터 공간을 직접 확보(Co-location)
    • 확장이 필요한 경우 공간을 먼저 더 확보해야함
  • 그 공간에 서버를 구매하여 설치하고 네트웍 설정
    • 보통 서버를 구매해서 설치하는데 두세달은 걸린다.
  • 또한 Peak time을 기준으로 Capacity planning을 해야함
    • 놀고 있는 자원들이 높게 되는 현상 발생
  • 직접 운용비용 vs 클라우드 비용
    • 기회비용!

클라우드 컴퓨팅의 장점

  • 초기 투자 비용이 크게 줄어든다
    • CAPEX (Capital Expenditure) vs OPEX (Operating Expense)
  • 리소스 준비를 위한 대기시간 대폭 감소
    • Shorter Time to Market
  • 노는 리소스 제거로 비용 감소
  • 글로벌 확장 용이
  • 소프트웨어 개발 시간 단축
    • Managed Service (Saas)이

AWS 소개

  • 가장 큰 클라우드 컴퓨팅 서비스 업체
  • 2002년 아마존 상품데이터를 API로 제공하면서 시작
    • 현재 100여개의 서비스를 전세계 15개 지역에서 제공
    • 대부분의 서비스들이 오픈소스 프로젝트들을 기반으로함
    • 최근 들어 ML/AI 관련 서비스들도 내놓기 시작
  • 사용고객
    • 다수의 상장업체들과 많은 국내 업체들도 사용 시작(서울리전)
  • 다양한 종류의 소프트웨어/플랫폼 서비스를 제공.
    • AWS의 서비스만으로 쉽게 온라인서비스 생성

EC2 - Elastic Cloud Compute (1)

  • AWS의 서버 호스팅 서비스
    • 리눅스 혹은 윈도우 서버를 론치하고 로그인 가능
    • 가상 서버들이라 전용 서버에 비해 성능이 떨어진다.
    • Bare-metal 서버도 제공하기 시작
  • 다양한 종류의 서버 타입 제공
  • 세 종류의 구매 옵션
    • On-Demand : 시간당 비용을 지물하며 가장 흔히 사용하는 옵션
    • reserved : 1년이나 3년간 사용을 보장하고 1/3 정도에서 40% 할인을 받는 옵션
    • Spot Instance : 일종의 경매방식으로 놀고 있는 리소스들을 보다 싼 비용으로 사용할 수 있는 옵션

S3 - Simple Starage Service(1)

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

DataBase Service

  • RDS
    • MySQL/MariaDB, PostgreSQL, Aurora
    • Oracle, Ms SQL Server
  • DynamoDB
  • REDshift
  • ElastiCache
  • Neputune
  • ElasticSearch
  • MongoDB

AI & ML Service

  • SageMaker
  • Lex
  • Polly
  • Rekognition

기타 중요 서비스

  • Alexa
  • Connect
  • Lambda

MySQL 설치 - Docker

Docker란 무엇인가?

  • MySQL을 다른 OS에서 설치하려면 다양한 변수가 존재한다.
    • 즉 설치 과정이 OS와 OS버전에 따라 달라지게 된다.
    • 다양한 다수의 다른 소프트웨어들의 설치가 동반되는 것이 일반적이다.
  • Docker는 특정 프로그램과 필요한 기타 소프트웨어들을 하나의 패키지로 만듬으로써 해당 프로그램의 개발과 사용을 도와주는 오픈소스 플랫폼
    • 이 패키지를 먼저 파일 시스템 형태로 만드는데 이를 Docker Image라고 한다.
      • 이 Image는 다른 이들과 공유가 가능하다.
      • Docker Image 공유소를 Docker Registry(Docker Hub)라고 부른다.
  • Docker Image를 실행시킨 것을 Docker Container라고 부르며 응용프로그램에 해당한다.

MySQL DDL과 예제 테이블 소개

관계형 데이터베이스 예제 - 웹서비스 사용자/세션 정보

  • 사용자 ID : 보통 웹서비스에서는 등록된 사용자마자 부여하는 유일한 ID
  • 세션 ID : 세션마다 부여되는 ID
    • 세션 : 사용자의 방문을 논리적인 단위로 나눈 것
      • 사용자가 외부 링크를 타고 오거나 직접 방문해서 올 경우 세션을 생성
      • 사용자가 방문 후 30분간 interaction이 없다가 뭔가를 하는 경우 새로 세션을 생성
    • 즉 하나의 사용자는 여러개의 세션을 가질 수 있음
    • 보통 세션의 경우 세션을 만들어낸 접점을 채널이란 이름으로 기록해둠
      • 마케팅 관련 기여도 분석을 위함
    • 또한 세션이 생긴 시간도 기록

정보(2)

  • 이 정보를 기반으로 다양한 데이터 분석과 지표 설정이 가능
    • 마케팅 관련, 사용자 트래픽 관련
    • DAU, WAU, MAU 등의 일주월별 Active User 차트
    • Marketing Channel Attribution 분석
      • 어느 채널에 광고를 하는 것이 가장 효과적인가?

테이블 필드의 중요 속성 (1)

PRIMARY KEY

  • 테이블에서 레코드의 유일성을 정의하는 필드 : 그것이 primary key가 되어야함
    • 예를들면 사용자 테이블에서 이메일 혹은 주민등록번호
  • Composite primary key : primary key가 두개 혹은 그 이상의 필드로 정의된 경우
  • Primary key로 지정된 필드가 있는 경우 데이터베이스단에서 중복된 값을 갖는 레코드가 생기는 것을 방지함

Foreign key

  • 테이블의 특정 필드가 다른 테이블의 필드에서 오는 값을 갖는 경우

테이블 필드의 중요 속성 (2)

  • NOT NULL
    • 필드의 값이 항상 존재해야 하는 경우
  • DEFAULT VALUE
    • 필드에 값이 주어지지 않은 경우 기본값을 정의해줌
    • timestamp : CURRENT_TIMESTAMP를 사용하면 현재 시간으로 설정됨