Written by
Poogle
on
on
2021.08.09 TIL
새롭게 배운 것 Done
운동
독서
알고리즘
코딩
데이터베이스
관계형 데이터베이스 - 구조화된 데이터
- 프로덕션 관계형 데이터베이스(RDBMS)
- MySQL, PostgreSQL
- 어떤 서비스 운영에 필요한 데이터를 저장
- 빠른 처리 속도 중요
- 데이터를 구조화된 테이블들의 집합으로 구성하여 저장하고 관리
- 데이터 웨어하우스 관계형 데이터베이스
- 속도보다는 구조화된 큰 데이터를 다룰 수 있는지가 중요
- scalability
- 회사 내부 직원을 위한 데이터라고 생각
비관계형 데이터베이스 - 비구조화 데이터도 다룸
- NoSQL 데이터베이스
- 프로덕션 관계형 데이터베이스를 보완하기 위한 용도로 많이 사용
- Key/Value Storage: Redis, Memcache, …
- Document Store: MongoDB
- Wide Column Storage: Cassandra, HBase, DynamoDB
- Search Engine: ElasticSearch
백엔드 시스템 구성
2 tier
- 클라이언트 + 서버 = 2개의 티어
- 클라이언트
- 사용자가 사용하는 UI
- 비즈니스 로직은 보통 클라이언트에 위치
- 서버
- 데이터베이스
3 tier
- 데이터베이스
- 클라이언트
- Presentation Tier: FE
- Application Tier: BE
- Data Tier: BE
관계형 데이터베이스
- 구조화된 데이터를 저장하고 질의할 수 있도록 해주는 스토리지
- SQL: 관계형 데이터베이스를 조장하는 프로그래밍 언어
- DDL(Data Definition Language): 테이블의 포맷 정의
- DML(Data Manipulation Langauage): DDL로 정의된 테이블에 레코드 추가, 수정 삭제
SQL
- 단점
- 구조화된 데이터를 다루는데 최적화 -> 비구조화된 데이터는 처리 X
- 많은 관계형 데이터베이스들이 플랫한 구조만 지원(no nested like JSON)
- 비구조화된 데이터를 다루는데 Spark, Hadoop과 같은 분산 컴퓨팅 환경이 필요해짐
Star Schema
- 프로덕션 관계형 DB에서 주로 스타 스키마를 사용
- 데이터를 논리적 단위로 나눠서 저장, 필요 시 조인
- 스트리지 낭비가 덜하고 업데이트가 쉬움
Denormalized Schema
- NoSQL이나 데이터 웨어하우스에서 사용하는 방식
- 단위 테이블로 나눠 저장하지 않아서 별도의 조인이 필요 없음
- 스토리지를 더 사용하지만 조인을 안 해서 빠른 계산 가능
SQL 기본
; -- ; 기준 분리
-- 주석
/* 여러 줄 주석 */
- 팀 단위 규칙: 테이블 단/복수명
DDL - 테이블 구조 정의 언어
CREATE TABLE raw_data.user_session_channel (
userid int,
sessionid varchar(32) primary key,
channel varchar(32)
)
CREATE TABLE
로 테이블 생성- Primary Key uniqueness
DROP TABLE
로 테이블 지우기- 없는 테이블을 지우려고 하는 경우 에러
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
SELECT FROM
,WHERE
,GROUP BY
,ORDER BY
- 레코드 추가/삭제/수정 언어:
- 테이블에 레코드 추가:
INSERT INTO
- 테이블 레코드 필드 값 수정:
UPDATE FROM
- 테이블 레코드 삭제:
DELETE FROM
TRUNCATE
: 조건 없이 모든 레코드 삭제
- 테이블에 레코드 추가:
깨달은 점 FEELING
- 오랜만에 DB와 마주했다. 통계 전공 수업 때 들었던 내용(데이터 웨어하우스)도 생각나 반가웠다. 같이 윅백 스터디 하는 친구가 예전에 DynamoDB를 써서 토이 플젝을 했던 걸로 기억하는데 나는 항상 MySQL과 같은 RDBMS만 써봐서 궁금했다. 구글링을 조금 해보니 또 DynamoDB와 MongoDB를 비교하며 중 뭘 써야 하냐는 질문이 올라온 글들을 보고 더 궁금해졌다. 한 번 직접 써보는 것도 배움에 큰 도움이 될 것 같다.
- 우리 팀에서 CS 스터디를 진행하기로 해서 여러 그라운드룰을 정하고 있다. 다들 의욕도 넘치고 서로에게 긍정적인 영향을 줄 수 있을 것 같다. 함께 면접 질문도 준비하는 방향으로 보고 있어서 장기적으로 이어졌으면 좋겠다. 특히 낮에 스터디 관련 특강을 듣고 나니 좋은 스터디를 꾸준히 유지하는게 얼마나 큰 자산이 될 지 기대가 된다. 실제로 윅백 스터디 멤버들과 꾸준히 백엔드 관련 지식들을 나누고 있는데 이런 동료가 곁에 있는게 함께 성장하는데 큰 도움이 되고 있다.