MySQL - 클라우드는 무엇일까?

김재현·2022년 7월 17일
0

Programmers

목록 보기
25/28

MySQL

  • 가장 인기 있는 관계형 데이터베이스.
  • 1995년 스웨덴 회사였던 MySQL AB에 의해 개발.
    • 오픈 소스(무료)로 시작됨.
    • Sun microsystems 인수 > Oracle이 sun을 인수하는 과정에서 MySQL도 Oracle의 제품이 됨.(유료화 소문이 나서 인기 좀 떨어짐.)
    • MySQL의 처음 개발자였던 Monty가 MySQL과 호환이 되는 Maria DB라는 오픈소스 개발.
  • Commynity Server : 오픈소스로 무료.
  • Emterprise Server : 유료버전으로 다양한 플러그인 제공.

MariaDB

  • 오픈 소스로 무료.
  • MySQL과 인터페이스 동일하나, 성능이 더 좋음.

MySQL의 특징.

  • 한동안 웹개발 표준 기술 스택 중의 하나였음.
    • LAMP : Linux, Apache, MySQL, PHP
  • 지금도 Postgres와 함께 가장 널리 쓰이는 프로덕션용 관계형 데이터베이스.

용량증대방식
1. Scale-Up : 서버에 CPU와 Memory추가. 메모리와 저장공간이 부족하다면, 확장해버린다.

  • 서버의 하드웨어를 증대시키면 서버 성능도 당연히 개선되지만, 한 서버에 붙일 수 있는 메모리와 저장공간에는 한계가 있다.
  • 따라서 Scale Up을 하기 전 '정말로 필요한 데이터만 데이터베이스에 있는가?' '안 쓰거나 굳이 있을 필요가 없는 데이터가 스택을 낭비하지는 않는가?'에 있지는 않은가?'에 대해 고민해보아야 한다.
  1. Scale-Out : Master-Slave 구성.
  • 일반적인 클러스터 구성.(서버를 계속 늘리는 방식)

  • MySQL은 이를 지원하지 못한다 : 기본적으로 한 개의 서버에서만 구동하는 방식이기 때문.
    때문에 Master 서버에 저장되는 데이터가 읽기 전용으로 Slave에 자동 복사되는, Master – Slave 방식을 사용한다.
    데이터를 읽을 일이 있다면 Slave를 열람하고, Slave끼리 묶어서 활용도 가능.
    적어도 읽기에 관해서는 Slave를 활용하여 더 나은 속도와 기능을 제공할 수 있다.

  • MySQL의 서버 자체가 커지는 것은 아니라는 단점이 있다.


클라우드

클라우드란?

  • 컴퓨팅 자원(하드웨어, 소프트웨어 등)을 네트웤을 통해 서비스 형태로 제공하는 것.
  • No Provisioning
    Pay As You Go
    자원(예. 서버)을 필요한 만큼 (거의) 실시간으로 할당하여 사용하고, 사용한 만큼 지불하는 시스템.
  • 탄력적으로 필요한 만큼의 자원을 유지하는 것이 중요.
    시간을 단축할 수 있다.
  • '소유'의 모델 : 초기에 시간이 많이 걸림. 필요가 사라지면 잉여 자원이 됨. 초기 투자비용이 들고, 감가상각이 된다.
  • '대여'의 모델 : 사용한 만큼 돈 지불. 시간을 절약할 수 있음. 초기 투자비용은 없거나 적지만, 장기적으로는 어떨지 모름.

클라우드 컴퓨팅 서비스가 없었다면?

  • 서버/네트웤/스토리지 구매와 설정 등을 직접 수행해야 함.
  • 데이터센터 공간을 직접 확보.
    • 데이터센터 확장이 필요한 경우 공간을 먼저 더 확보해야 함.
    • 열이 올라가면 성능이 저하되므로, 냉방도 고려해야 함.
  • 공간을 구비했다면, 서버를 구매하여 설치하고 네트웤을 설치해야 함.
    • 일반적으로 이 과정이 적어도 2~3 개월은 걸림.
  • 서버의 수용능력을 Peaktime을 기준으로 설계해야 함.
    • 놀고 있는 자원들이 높게 발생하는 현상 발생.

직접 운영비용 vs 클라우드 비용

  • 기회비용을 잘 따져서 설계를 하자.

클라우드 컴퓨팅의 장점.

  1. 초기 투자비용이 크게 감소
  • CAPEX (Capital Expenditure) vs OPEX (Operating Expense)
    CAPEX는 재무담당이 좋아한다. 초기 투자비용과 감가상각을 계산하는 것이 더 익숙하기 때문. OPEX는 초기 투자비용이 적지만, 장기적, 지속적으로 비용이 들기 때문에 예측하기 어렵다.
  1. 리소스 준비를 위한 대기시간 대폭 감소.
  2. 노는 리소스 제거로 비용 감소.
  3. 글로벌 확장 용이.
  4. 소프트웨어 개발시간 단축.

AWS

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

MySQL의 사용.

SQL기본.

  1. 다수의 SQL문을 실행한다면 세미콜론으로 분리 필요.

    SQL 문1; SQL 문2; SQL 문3;

  2. SQL 주석.

    -- : 인라인 한줄까리 주석. 자바에서 //에 해당.
    / -- / : 여러 줄에 걸쳐 사용 가능한 주석.

  3. SQL키워드는 대문자를 사용한다든지 하는 나름대로의 포맷팅 필요.
    팀 프로젝트라면 팀에서 사용하는 공통 포맷이 필요.
  4. 테이블/필드이름의 명명규칙을 정하는 것이 중요.

    단수 vs 복수. _(언더바) vs CamelCasing(대문자 사용)

MySQL의 DDL - 테이블 구조 정의 언어

Create Table

  • CREATE TABLE table_name;
  • Primary key 속성 지정 가능
  • 성능 향상을 위해 인덱스 지정 가능.

테이블 필드의 중요 속성

  • Primary key
    테이블에서 레코드의 유일성을 정의하는 필드가 primary key가 되어야 함.
    • 사용자 테이블에서 이메일, 주민등록번호 등.
    • Primary key는 뒤쪽에 넣어주는 것이 범용적이고 좋음.
  • Composite primary key : primary key가 두 개 혹은 그 이상의 필드로 정의되는 경우, primary key로 지정된 필드가 있는 경우 데이터베이스단에서 중복된 값을 갖는 레코드가 생기는 것을 방지한다 : primary key uniqueness constraint
  • Foreign key
    테이블의 특정 필드가 다른 테이블의 필드에서 오는 값을 갖는 경우.
  • NOT NULL
    필드의 값이 항상 존재해야 하는 경우.
  • DEFAULT value
    필드에 값이 주어지지 않은 경우 기본값을 정의함.
    timestamp 타입 : CURRENT_TIMESTAMP를 사용하면 현재 시간으로 설정됨.
  • AUTO_INCREMENT : 알아서 값을 배정해줌.

DROP TABLE

  • DROP TABLE table_name;
    테이블 삭제. 없는 테이블을 지우려고 하는 경우에는 에러를 출력함.
  • DROP TABLE IF EXISTS table_name;
    '테이블이 존재하는 경우' 삭제. 해당 테이블이 존재하지 않는 경우에도 오류 출력하지 않음.

ALTER TABLE

  • 새로운 컬럼 추가

    ALTER TABLE 테이블이름 ADD COLUMN 필드이름 필드타입;

  • 기존 컬럼 이름 변경

    ALTER TABLE 테이블이름 RENAME 현재필드이름 to 새필드이름;

  • 기존 컬럼 제거

    ALTER TABLE 테이블이름 DROP COLUMN 필드이름;

  • 테이블 이름 변경

    ALTER TABLE 테이블이름 RENAME to 새테이블이름;

MySQL의 DML - 테이블 데이터 조작 언어

  • SELECT : 테이블 질의 언어
    SELECT FROM : 테이블에서 레코드와 필드를 읽어오는데 사용.
    WHERE를 사용, 레코드 선택 조건을 지정.
    GROUP BY를 통해 정보를 그룹 레벨에서 뽑는데 사용.
    ORDER BY를 사용해, 레코드 순서를 결정.

  • 레코드 추가/삭제/수정 언어
    INSERT INTO : 테이블에 레코드 추가.
    UPDATE FROM : 테이블 레코드 필드 값 수정.
    DELETE FROM : 테이블에서 레코드 삭제. (조건 지정 가능. 일부만 날리는 등.)
    vs TRUNCATE : 조건 없이 테이블의 모든 레코드 삭제.

0개의 댓글