- 데이터베이스?
데이터베이스는 개인이나 조직이 조작이 가능한 저장된 데이터의 모임 또는 집합을 의미한다
일반적으로 영구적인 데이터의 모임을 말한다
- 데이터베이스가 왜 필요한가
모든 IT 서비스는 데이터를 만들어내고, 이를 저장하는 시스템이 필요하다
예를 들어, 로그인 경우에 데이터의 저장, 조회 등의 기능이 없다면 IT 서비스를 구현할 수 없다
어디에 저장할 것인가
프로덕션 관계형 데이터베이스(RDBMS, OLTP, OnLine Transaction Processing)
IT 서비스의 운영에 필요한 데이터를 저장하는 곳
빠른 처리속도가 중요하다
데이터를 구조화된 테이블의 집합으로 구성하여 저장하고 관리하는 시스템이다
백엔드/프론트 개발자 모두 잘 알아야하는 기본기다
SQL이라고 한다데이터 웨어하우스 관계형 데이터베이스(OLAP, OnLine Analytical Processing)
주로 회사 관련 데이터를 저장하고 분석함으로써 의사결정과 서비스 최적화에 사용한다
처리속도보다 구조화된 큰 데이터를 처리할 수 있는가
데이터 직군이라면 SQL을 반드시 알아야함
보통 RDBMS를 복사해서 데이터 웨어하우스에 저장
데이터 순환구조
사이트 방문 트랙픽과 외부 데이터(이메일, 마케팅 등)가 생성된다
기업에서 데이터를 이용해서 비즈니스 인사이트를 도출하거나 개인화 등을 통한 제품 서비스 개선에 노력한다
비관계형 데이터베이스
- 백엔드 시스템 구성도 예제보기
프론트엔드와 백엔드
초기에는 웹/앱 서비스를 프론트엔드와 백엔드로 구성했다
프론트엔드
백엔드
다른 직군의 등장
데브옵스(DevOps)
풀스택(FullStack)
데이터 직군
데이터 엔지니어
데이터분석가
데이터과학자
시스템 구성의 변화 (2 tier)
클라이언트와 서버, 두 개의 티어로 구성
주로 데스크탑 응용프로그램에서 사용하는 아키텍쳐

시스템 구성의 변화 (3 tier)

관계형 데이터베이스(RDBMS)의 중요성
- 관계형 데이터베이스 소개
RDBMS(1)
구조화된 데이터를 저장하고 질의할 수 있도록 해주는 스토리지
엑셀 스프레드 시트 형태의 테이블로 데이터를 정의 및 저장함

RDBMS(2)
RDBMS를 조작하는 프로그래밍 언어가 SQL
DDL(Data Definition Language)
DML(Data Manipulation Language)
테이블 안의 데이터 조작/질의를 위한 언어
테이블에 레코드를 추가, 수정, 삭제, 조회 등을 위해 사용하는 언어
RDBMS의 구조
RDBMS는 2단계로 구성
가장 밑단에는 테이블들이 존재
테이블들은 데이터베이스(혹은 스키마)라는 폴더 밑으로 구성

테이블의 구조
- SQL 소개
Structured Query Language
RDBMS에서 데이터/테이블을 질의하거나 조작해주는 언어
1970년대 초반에 IBM에서 개발
SQL 단점
구조화된 데이터를 다루는데 최적화 되어있어서 비구조화 데이터에 대해 한계가 있음
RDBMS마다 SQL문법이 조금씩 다름
Star schema
프로덕션 관계형 데이터베이스에서 보통 스타 스키마를 사용해서 데이터를 저장한다
데이터를 논리적 단위로 나눠 저장하고, 필요할 때 조인
스토리지 낭비가 덜하고, 업데이트가 쉽다
Denormalized schema
NoSQL이나 데이터 웨어하우스에서 사용하는 방식
스토리지 낭비가 좀 있지만, 조인이 없기에 빠른 계산이 가능하다

DDL
CREATE TABLE을 통해 primary key 속성을 지정할 수 있음
성능 향상을 위해 인덱스를 지정할 수 있음
CREATE TABLE raw_data.user_session_channel(
user_id int,
session_id varchar(32) primary key,
channel varchar(32)
);
DROP TABLE과 DELETE * FROM의 차이는 명령이후에 테이블이 존재하지 않느냐 있느냐 차이다
DROP TABLE 테이블이름; /*테이블은 존재X*/
DROP TABLE IF EXISTS 테이블이름;
DELETE * FROM 테이블이름; /*테이블은 존재*/ALTER TABLE
/*새로운 컬럼 추가*/
ALTER TABLE 테이블이름 ADD COLUMN 필드이름 필드 타입;
/*기존 컬럼 이름 변경*/
ALTER TABLE 테이블이름 RENAME 현재 필드이름 TO 새 필드 이름;
/*기존 컬럼 삭제*/
ALTER TABLE 테이블이름 DROP COLUMN 필드이름;
/*테이블 이름 변경*/
ALTER TABLE 테이블이름 RENAME TO 새 테이블 이름;
DML(향후 추가)
SELECT
UPDATE FROM
DELETE FROM은
조건기반으로 삭제가능
TRUNCATE은 조건 제시 없이 삭제하는 명령어
둘다 테이블을 삭제하지 않음
INSERT INTO