1. 데이터베이스란?
데이터를 저장하는 저장 공간
필요한 데이터 -> 수집 -> 데이터베이스
# 테이블이란?
- 수집한 데이터를 특정한 형태로 정리하여 관리하는 목록
- 보통 2차원 형태로 표현(행, 열)
# 스키마랑?
- 데이터베이스, 테이블에 대한 구조와 정보
- 자료의 구조, 자료의 표현 방법, 자료 간의 관계를 형식 언어로 정의한 구조
# 데이터베이스 도입
- 서비스에 기능에 필요한 데이터의 등록, 수정, 삭제, 조회
# 데이터베이스 설치 및 운영
- 온프레미스: 직접 물리 장비, 시스템, 데이터베이스 설치 및 운영
- IDC
- 클라우드: 외부 사업자가 제공하는 데이터베이스와 시스템 사용
- AWS, Azure, Google Cloud
# 데이터베이스 종류
- 관계형 데이터베이스 (범용적, 기본)
- NoSQL 데이터베이스
# 데이터베이스 관리자(DBMS)
- DBMS(DataBase Management System)
- 데이터베이스를 관리하기 위한 시스템
- 정렬, 검색
- 데이터 정합성 검사
- 백업
- 복구
- 보안
2. 관계형 데이터베이스
2차원 형태의 행과 열로 데이터를 저장(테이블)
각 테이블 간의 상호 관계의 논리적 구조
- MySQL
- MariaDB
- Oracle
- PostgreSQL
- MS SQL Server
# 관계형 데이터베이스의 특징
- 강점
- 흔하고 많이 사용된 - 범용적
- 단순한 데이터 저장 구조 - 테이블, 행, 열
- 데이터의 타입 기반 - 숫자, 문자, 날짜
- 기본적인 서비스 성능
- 트랜잭션
- 약점
- 대용량
- 고속 처리
# NoSQL 데이터베이스의 종류
NoSQL = Not Only SQL
관계형 데이터베이스 이외의 특수 목적이나 특성
형태
- 키:값(Key:Value): Memcached
- 문서(Document): MongoDB, Couchbase
- 컬럼(Wide Column): HBase, Cassandra
- 그래프(Graph): Neo4j, Amazon Neptune
# NoSQL 데이터베이스 특징
강점
- 고속
- 비정형 데이터
- 분산 처리
- 많은 양의 데이터
약점
- 관계형 결합의 미지원
- 일관성이나 정합성이 약하다
- 트랜잭션 미지원 또는 어려움
1. 일반적이라면 "관계형 데이터베이스" 시작
2. 관계형으로 풀 수 없는 문제는 NoSQL: 서비스 운영 중에 고속의 캐시가 필요하다던지, 메세징 아키텍처를 도입한다던지, 비정형 데이터를 적재한다던지
4. SQL (Structured Query Language)
# SQL의 정의
데이터베이스 관리 및 조작을 위한 프로그래밍 언어의 한 종류
- 구조화 질의어 Structured Query Language
- 데이터베이스를 관리하고 조작하기 위한 언어
- 데이터베이스 종류별로 다를 수 있다.
- SQL 표준은 ANSI에서 제정
# SQL 명령어의 종류
- DML(Data Mainpulation Language) - 데이터 조작어
- INSERT, UPDATE
- DQL(Data Query Language) - 데이터 조회어
- SELECT
- DDL(Data Definition Language) - 데이터 정의어
- CREATE
- DCL(Data Control Language) - 데이터 제어어
- GRANT
- TCL(Transaction Control Language) - 트랜잭션 제어어
- ROLLBACK
# SQL 기본 명령어
SQL도 언어이기 때문에 기본 문법이 존재. 문장 끝에는 세미콜론(;) 필수.
- 데이터베이스 관리
- 테이블 관리
- 레코드 관리
- 검색
- 데이터 등록, 수정, 삭제
- 데이터 정렬
- 데이터 합계 및 평균
- 그룹화
- 테이블 결합
5. 트랜잭션(Transaction)
여러 건의 SQL 실행을 하나의 덩어리, 꾸러미로 묶어서 처리하는 개념
중간에 문제가 생기면 최초 상태로 돌아간다.
트랜잭션 예시
- 철수가 영희에게 10만원 송금 실행
- 영희의 계좌에 10만원이 증가
- 철수의 계좌에 10만원이 감소
- 송금 이력을 기록한다.
All-or-Nothing Effect
# 트랜잭션 - 커밋(Commit)
처리가 성공했을 때 데이터베이스에 반영한다.
실행 도중에는 데이터베이스에 미반영
# 트랜잭션 - 롤백(Rollback)
처리가 중간에 실패했을 때
트랜잭션 실행 이전으로 되돌아간다.
아무것도 변경된 것이 없음으로
데이터베이스 변경이 없다.
6. 인덱스(Index)
책의 뒤편에 있는 색인과 유사하다.
데이터베이스는 양이 많아짐
-> 처리에 시간이 걸린다.
검색 조건과 정렬에 인덱스 생성
-> 검색과 정렬의 속도 개선
# 인덱스에 적합한 컬럼
- 컬럼값의 종류가 많을 때
- 데이터 양이 많을 때 조건의 데이터 한정적
- 자주 정렬이나 검색 필터에 사용
# 인덱스의 약점
- 삽입, 수정, 삭제시 속도가 떨어진다. (인덱스 관리)
- 수정이 빈번한 테이블은 조심해야 함.
- 인덱스 관리 영역만큼 데이터베이스 용량 더 필요
CREATE INDEX [인덱스명] ON [테이블명] ([컬럼], [컬럼]);