관계형 데이터베이스단점스키마Star schemaDenormalized schemaDDLCREATE TABLEDROP TABLEALTER TABLEDMLSELECT관계형 데이터베이스의 구조프로덕션 관계형 데이터베이스(RDBMS)데이터 웨어하우스데이터 순환 구조비관계형 데이터베이스백엔드시스템 구성도2 tier3-tier
관계형 데이터베이스
- 관계형 데이터베이스를 조작하는 프로그래밍 언어가 SQL
- 테이블 정의를 위한 DDL (Data Definition Language)
- 앞서 보여준 테이블의 포맷을 정의해주는 언어
- 테이블 데이터 조작/질의를 위한 DML (Data Manipulation Language)
- DDL로 정의된 테이블에 레코드를 추가, 수정, 삭제 혹은 읽어 들이기 위해 사용하는 언어
단점
- 이미지, 비디오, 텍스트 데이터와 같은 비구조화된 데이터는 관계형 데이터베이스를 사용하기에는 제약이 있음
- 플랫한 구조만 지원함(no nested like JSON)
- 구글 빅쿼리는 nested structure를 지원함
- 비구조화된 데이터를 다루는데 Spark, Hadoop과 같은 분산 컴퓨팅 환경이 필요해짐
- SQL 만으로는 비 구조화 데이터를 처리하지 못함
스키마
Star schema
- Production DB용 관계형 데이터베이스에서는 보통 스타 스키마를 사용해 데이터를 저장
- 데이터를 논리적 단위로 나눠 저장하고 필요 시 조인
- 스토리지의 낭비가 덜하고(데이터 반복 안하기 때문에) 업데이트가 쉬움

Denormalized schema
- NoSQL이나 데이터 웨어하우스에서 사용하는 방식
- 단위 테이블로 나눠 저장하지 않음으로 별도의 조인이 필요 없는 형태를 말함
- 이는 스토리지를 더 사용하지만 조인이 필요 없기에 빠른 계산이 가능함
- 스토리지 낭비가 심해지고, 바꾸려고 하면 일일이 다 바꾸어 줘야 함

DDL
CREATE TABLE
- Primary key 속성을 지정할 수 있음(Primary key uniqueness : 유일키 보장)
- 성능 향상을 위해 인덱스를 지정할 수 있음

- 데이터베이스나, 스키마를
raw_data.
으로 명시해서 테이블 생성도 가능함
DROP TABLE
DROP TABLE table_name; DROP TABLE IF EXISTS table_name; -- DELETE FROM 은 테이블을 없애지 않고 조건에 맞는 레코드를 지우는 명령임
ALTER TABLE
- 새로운 컬럼 추가 -
ALTER TABLE 테이블이름 ADD COLUMN 필드이름 필드타입;
- 기존 컬럼 이름 변경 -
ALTER TABLE 테이블이름 RENAME 현재필드이름 to 새필드이름
- 기존 컬럼 제거 -
ALTER TABLE 테이블이름 DROP COLUMN 필드이름;
- 테이블 이름 변경 -
ALTER TABLE 현재테이블이름 RENAME TO 새테이블이름;
DML
SELECT
- WHERE를 사용해서 레코드 선택 조건을 지정
- GROUP BY를 통해 정보를 그룹 레벨에서 뽑는데 사용하기도 함
- ORDER BY를 사용해서 레코드 순서를 결정하기도 함
INSERT INTO
UPDATE FROM
DELETE FROM
vsTRUNCATE
- TRUNCATE는 조건 제시 못하고 모든 레코드를 삭제
관계형 데이터베이스의 구조
- 2단계로 구성됨
- 테이블들은 데이터베이스(혹은 스키마)라는 폴더 밑으로 구성
- 가장 밑 단에는 테이블들이 존재
프로덕션 관계형 데이터베이스(RDBMS)
- 데이터를 구조화된 테이블들의 집합으로 구성하여 저장하고 관리
- 빠른 처리 속도가 중요함(웹 서비스나 앱이 속도가 느려질 때 보통 관계형 데이터베이스와 관계가 있을 가능성이 높음) vs. 데이터 웨어하우스 관계형 데이터베이스(얼마나 큰 데이터를 처리할 수 있느냐에 초점 - 구글 클라우드에 빅쿼리, SnowFlake, aws RedShift, Spark)
데이터 웨어하우스
- 회사 내부 직원들을 위한 데이터베이스
- 회사 관련 데이터를 저장하고 분석함으로써 의사결정과 서비스 최적화에 사용
- BigQuery, Snowflake, Redshift, Hive, ...
- 처리속도 보다는 구조화된 큰 데이터를 처리하는 것이 중요. 데이터 분석 혹은 모델 빌딩들을 위한 데이터 저장(보통 프로덕션 데이터베이스의 복사본을 데이터 웨어하우스에 저장)
- 데이터 직군이라면 반드시 알아야 함. Data-driven decision 등을 할 때 이용
- 데이터 엔지니어, 데이터 분석가, 데이터 과학자
데이터 순환 구조

- 서비스에 가까운건 프로덕션 관계형 데이터베이스
- 데이터 엔지니어링 팀(1)은 서비스에서 얻은 데이터들을 데이터 웨어하우스로 추출해 오는 것, 데이터 웨어하우스를 관리함
- 데이터 분석가가 하는 일이 2번. 데이터 웨어 하우스에 저장된 데이터를 기반으로 회사에 중요한 지표를 시각화 함으로써 인사이트를 발굴 하는 것. 회사의 도메인에 대해 잘 알고 있어야 함
- 데이터 과학자 - ML, AI를 통해 사용자 경험 개선. 수집된 과거 데이터를 기반으로 미래를 예측하는 모델링 혹은 개인화 작업으로 서비스의 만족도를 높이고 프로세스의 최적화를 수행
비관계형 데이터베이스
- 데이터가 깔끔하게 구조화되지 않은 비 구조화 데이터를 다루는 데 적합함
- 프로덕션용 관계형 데이터베이스를 보완하기 위한 용도로 많이 사용됨
- 크게 2종류가 존재
- Key/Value Storage : Redis, Memcache, ...
- Document Store : MongoDB,
- Wide Column Storage : Cassandra, HBase, DynamoDB
- Search Engine: ElasticSearch
백엔드시스템 구성도
2 tier

- 클라이언트와 서버 두 개의 티어로 구성
- 클라이언트는 사용자가 사용하는 UI가 됨(front-end)
- 비즈니스 로직은 보통 클라이언트에 위치
- 서버단이 데이터베이스가 됨(back-end)
- 2tier는 프론트엔드가 db를 바로 조작
3-tier
- 웹 서비스에서 많이 사용되는 아키텍처
- 로직을 백엔드 쪽으로 옮기게 됨
- 프리젠테이션 티어 : 프런트엔드
- 애플리케이션 티어 : 백엔드
- 데이터 티어(Data Tier) : 백엔드
