데이터베이스(Database)란?
데이터베이스의 기초
- 컴퓨터 시스템에 저장된 정보 또는 데이터(data)의 집합을 의미
- 데이터베이스는 보통 데이터베이스 관리시스템(DBMS)으로 제어함
- 이렇게 데이터와 DBMS는 연관된 어플리케이션과 함께 '데이터베이스 시스템'으로 일컬어지며, 더 짧게는 '데이터베이스'라고 통칭되기도 함
- Application에서는 데이터가 메모리 상에 존재하는데, 메모리에 존재하는 데이터는 장기 보존이 되지 않으므로 app이 종료되면 해당 메모리에 있던 데이트를 다시 읽어들일 수 없다.
- 따라서 데이터를 오랜기간 저장 및 보존하기 위해서 데이터베이스를 사용하는 것이다.
데이터베이스의 종류
관계형 데이터베이스 (RDBMS, Relational Database Management System)
-
대표적인 RDBMS : Oracle, MySQL, PostgreSQL 등
SQL이란 ?
(Structured Query Language)
데이터베이스를 조회하거나,생성,관리하기 위해 나온 하나의 언어.
-
관계형 데이터란 데이터를 서로 상호관련성을 가진 형태로 표현한 데이터를 의미.
-
모든 데이터들은 2차원 테이블로 표현할 수 있음.
-
각각의 테이블은 칼럼(column)과 로우(row)로 구성됨.
컬럼: 테이블의 각 항목을 의미 (열의 기준이 되는 항목 이름)
로우: 각 항목들의 실제 값을 의미
각 로우는 저만의 고유 키(Primary key)를 가짐. 주로 이 primary key를 통해 해당 로우를 찾거나 인용(reference)하게 됨.
-
각각의 테이블들은 서로 상호관련성을 가지고 서로 연결될 수 있음.
- 일대일(one to one): 테이블 A의 로우와 테이블 B의 로우가 정확히 일대일 매칭이 되는 관계
- user_profile 테이블에서 users 테이블의 id를 참조하고있다.
- 내 기준에서 외래키(Foreign key)내가 가지고 있지 않은, 다른 테이블이 가지고있는 기본값을 내가 사용할 때 외래키라고 함)가 저쪽 테이블(내가 참조하려는 테이블)의 기본키(Primary key)를 사용한다.
- 일대다(one to many): 테이블 A의 로우가 테이블 B의 여러 로우와 연결이 되는 관계
- 다대다(many to many): 테이블 A의 여러 로우가 테이블 B의 여러 로우와 연결이 되는 관계
- 일대일/일대다의 혼합
- 데이터베이스를 쓰면서 제일 중요한 것: 중복의 배제
- 테이블들을 연결하는 이유?
- 하나의 테이블에 모든 정보를 다 넣으면 동일한 정보들이 불필요하게 중복 저장됨.
- 이 경우 더 많은 디스크를 사용하면서 잘못된 데이터가 저장될 가능성이 높아짐.
- 따라서 테이블을 연결하면 중복된 데이터를 저장하지 않음으로 디스크를 더 효율적으로 쓰게되고,
- 서로 같은 데이터이지만 부분적으로만 내용이 다른 데이터가 생기는 문제가 사라지는데, 이것을 정규화(normalization)라고 함.
비관계형 데이터베이스 (Non-relational Database Management System)
- 대표적인 Non-RDBMS : MongoDB, Redis, Cassandra 등
- NoSQL: 처음에는 SQL문이 사용되지 않는다는 의미에서 NoSQL이었지만 현재는 SQL이 지원되기 시작하여 Not Only SQL이라는 의미의 NoSQL로 사용되고 있다.
- 비관계형 타입의 데이터를 저장할 때 주로 사용되는 DBMS
- 관계형 데이터베이스와 다르게 비관계형이므로 데이터들을 저장하기 전 정의할 필요가 없음
ACID
트랜잭션이란? (Transaction)
일련의 작업들을 한번에 하나의 unit으로 실행하는 것
Atomicity (원자성)
트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력
Consistency (일관성)
트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성있는 데이터베이스 상태로 유지하는 것
Isolation (고립성)
트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것
Durability (지속성)
성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미