영권's
20210810 - TIL (데이터베이스) 본문
MySQL 소개
- 1995년 스웨덴 회사였던 MySQL AB에 의해 개발된 관계형 데이터베이스
- 오픈소스로 시작됨
- My는 개발자 중 한 사람의 딸의 이름이었음
- 2008년 썬 마이크로시스템이 MySQL AB를 $1B를 주고 인수
- 2009년 오라클이 썬을 인수하면서 MySQL이 유료화 여부가 쟁점이 됨.
- 2010년 MySQL의 처음 개발자였던 Monty가 MySQL과 호환이 되는 MariaDB라는 오픈소스 개발
MySQL 특징
- 한동안 웹개발 표준 기술 스택 중의 하나였음
- LAMP : Linux, Apache, MySQL, PHP
- 지금도 PostgreSQL와 함께 가장 널리 쓰이는 프로덕션용 관계형 데이터베이스
- 용량 증대(Scaling) 방식
- Scale-Up : 서버에 CPU와 Memory 추가
- Scale-Out : Master-Slave 구성
- 일반적으로 클러스터 구성을 이야기하나 MySQL은 이를 지원하지 못함
MySQL에서 지원하는 Scale-Out 방식
만약 MySQL 한대에 대한 읽기 자원을 초과 한다면 Master의 데이터를 읽기전용 Slave로 복사하여 백엔드 or 프론트엔드 시스템에서 읽을 일이 있으면 Slave에서 읽을 수 있다. (읽기 용량에 대해서 추가적으로 지원 가능)
클라우드 / 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
- 노는 리소스 제거로 비용 감소
- 글로벌 확장 용이
- 소프트웨어 개발 시간 단축
- Managerd Service(SaaS) 이용
AWS 소개
- 가장 큰 클라우드 컴퓨팅 서비스 업체
- 2002년 아마존의 상품데이터를 API로 제공하면서 시작
- 현재 100여개의 서비스를 전세계 15개의 지역에서 제공
- 대부분의 서비스들이 오픈소스 프로젝트들을 기반으로 함,
- 최근 들어 ML/AL 관련 서비스들도 내놓기 시작
- 사용 고객
- 다수의 상장업체들과 많은 국내 업체들도 사용시작(서울 리전)
- 다양한 종류의 소프트웨어/플랫폼 서비스를 제공
- AWS의 서비스만으로 쉽게 온라인 서비스 생성
- 뒤에서 일부 서비스를 따로 설명
EC2 - Elastic Cloud Compute
- AWS의 서버 호스팅 서비스
- 리눅스 혹은 윈도우 서버를 론치하고 로그인 가능(구글앱엔진과의 가장 큰 차이점)
- 가상 서버들이라 전용서버에 비해 성능이 떨어짐
- Bare-metal 서버도 제공하기 시작
- 다양한 종류의 서버 타입 제공
S3 - Simple Storage Service
- http://aws.amazon.com/s3/
- 아마존이 제공하는 대용량 클라우드 스토리지 서비스
- S3는 데이터 저장관리를 위해 계층적 구조를 제공
- 글로벌 네임스페이스를 제공하기 때문에 톱레벨 디렉토리 이름 선정에 주의
- S3에서는 디렉토리를 버킷(Bucket)이라고 부름
- 버킷이나 파일별로 엑세스 컨트롤 가능
Database Services
- RDS(Relational Database Service)
- MySQL/MariaDB, PostgreSQL, Aurora
- Oracle, MSSQL, Server
- DynamoDB
- Redshift
- ElastiCache
- Neptune(Graph database)
- ElasticSearch
- MongoDB
Docker란?
- 예를 들어 MySQL을 다른 OS에서 설치하려면 다양한 변수가 존재
- 즉 설치 과정이 OS와 OS의 버전에 따라 달라지게 됨
- 다양한 다수의 다른 소프트웨어들의 설치가 동반되는 것이 일반적임
- Docker는 특정 프로그램과(그 프로그램을 실행하는데) 필요한 기타 소프트웨어들을 하나의 패키지로 만듬으로써 해당 프로그램의 개발과 사용을 도와주는 오픈소스 플랫폼
- 이 패키지를 먼저 파일 시스템 형태로 만드는데 이를 Docker Image라고 함
- 이 Image는 다른 이들과 공유가능
- Docker Image 공유소를 Docker Regisrty(Docker Hub)이라고 부름
- Docker Image를 실행시킨 것을 Docker Container라고 부르며 응용프로그램에 해당
- 이 패키지를 먼저 파일 시스템 형태로 만드는데 이를 Docker Image라고 함
Docker 구조
Virtualization vs Containerization
- 호스트 운영체제 위에서 돌아가는 것은 Docker Engine을 실행하고 그 위에 Docker에서 Docker Container를 실행
- 그래서 호스트 운영체제 위에 있는 다른 소프트웨어와는 충돌이 나지 않는다.
관계형 데이터베이스 예제 - 웹서비스 사용자/세션 정보
- 사용자 ID : 보통 웹서비스에서는 등록된 사용자마다 부여하는 유일한 ID
- 세션 ID : 세션마다 부여되는 ID
- 세션 : 사용자의 방문을 논리적인 단위로 나눈 것
- 사용자가 외부 링크(보통 광고)를 타고 오거나 직접 방문해서 올 경우 세션을 생성
- 사용자가 방문 후 30분간 interaction이 없다가 뭔가를 하는 경우 새로 세션을 생성
- 즉 하나의 사용자는 여러 개의 세션을 가질 수 있음
- 보통 세션의 경우 세션을 만들어낸 접점(경유지)를 채널이란 이름으로 기록해둠
- 마케팅 관련 기여도 분석을 위함
- 또한 세션이 생긴 시간도 기록
- 세션 : 사용자의 방문을 논리적인 단위로 나눈 것
- 이 정보를 기반으로 다양한 데이터 분석과 지표 설정이 가능
- 마케팅 관련, 사용자 트래픽 관련
- DAU, MAU, WAU 등의 일주월별 Active User 차트
- Marketing Channel Attribution 분석 가능
- 어느 채널에 광고를 하는 것이 가장 효과적인가?
테이블 필드의 중요 속성
- primary key
- 테이블에서 레코드의 유일성을 정의하는 필드 : 그것이 primary key가 되어야함
- 예를 들면 사용자 테이블에서 주민등록번호 혹은 "이메일"
- Composite primary key : primary key가 두개 혹은 그 이상의 필드로 정의되는 경우
- Primary key로 지정된 필드가 있는 경우 데이터베이스단에서 중복된 값을 갖는 레코드가 생기는 것을 방지함: primary key uniqueness constraint
- 테이블에서 레코드의 유일성을 정의하는 필드 : 그것이 primary key가 되어야함
- Foreign key
- 테이블의 특정 필드가 다른 테이블의 필드에서 오는 값을 갖는 경우
- NOT NULL
- 필드의 값이 항상 존재해야하는 경우
- Default value
- 필드에 값이 주어지지 않은 경우 기본값을 정의해줌
- timestamp 타입 : CURRENT_TIMESTAMP를 사용하면 현재 시간으로 설정됨
'데브코스 웹 백엔드' 카테고리의 다른 글
디자인 패턴(Behavioral) - Mediator (0) | 2021.08.17 |
---|---|
백엔드 데브코스 10일 동안의 회고 및 다짐 (0) | 2021.08.10 |
객체지향과 디자인 패턴 (0) | 2021.08.03 |
JAVA - 과제 (Object 클래스, String, StringBuilder, StringBuffer) (0) | 2021.08.03 |
Comments