데이터베이스
MySQL, OracleDB, PostgreSQL => 관계형 데이터베이스(RDBMS)
- 한계점 :
- 데이터 스키마가 고정적이다. 스키마 : 데이터베이스에 어떤 형식의 데이터를 넣을지에 대한 정보
- 확장성 RDBMS는 저장하고 처리해야 할 데이터양이 늘어나면, 여러 컴퓨터에 분산시킬수 없고, 해당 데이터베이스 서버의 성능을 업그레이드 하는 방식으로 확장해야한다.
MongoDB => 문서 지향적 NoSQL 데이터베이스
"유동적인 스키마"
- 종류가같은 데이터, 새로등록해야 할 데이터 형식이 바뀌어도 기존 데이터까지 수정 할 필요가 없다.
- 서버의 데이터양이 늘어나도, 한 컴퓨터에서만 처리하는 것이 아니라 여러 컴퓨터로 분산하여 처리할 수 있도록 확장하기 쉽게 설계 되어있다.
각자 장단점이 있다.
RDBMS의 장점 : 까다로운 조건으로 데이터를 필터링 해야 하거나, ACID특성을 지켜야 할 때 MongoDB의 장점 : 데이터의 구조가 자주 바뀔 때
ACID : 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability). 데이터베이스 트랜잭션이 안전하게 처리되는 것을 보장하기 위한 성질
스키마와 모델
스키마는 컬렉션에 들어가는 문서 내부의 각 필드가 어떤 형식으로 되어 있는지 정의하는 객체
모델은 스키마를 사용하여 만드는 인스턴스, 데이터베이스에서 실제 작업을 처리할 수 있는 함수들을 지니고 있는 객체이다.
SQL
Structured Query Language 데이터베이스용 프로그래밍언어 데이터베이스에 query를 보내 원하는 데이터만을 뽑아올 수 있다.
query?
질의문, ex) 검색창의 검색어 === "query" => 저장되어있는 정보를 필터 하기 위한 질문
데이터베이스가 왜 필요한가?
- In-memory 데이터베이스가 없으면, 컴퓨터는 In-memory이기 때문에 프로그램을 끄면 데이터가 없어짐
- File I/O 원하는 데이터만 가져올 수 없고, 항상 모든 데이터를 가져온 뒤 서버에서 필터링 필요 , 데이터가 복잡할 수록 작업이 힘듬. 해결책 :
- 관계형 데이터베이스 : 테이블로 저장 가능. 한번에 여러개의 테이블을 가질 수 있기 때문에, 데이터 불러오기 쉬움
- Database 필터링 외에도 File I/O로 구현이 힘든 관리를 위한 여러 기능들을 가지고 있는 데이터에 특화된 "서버"
ORM => Javascript로 할 수 있는 데이터베이스언어
- No SQL: 데이터의 구조가 고정되어 있지 않은 데이터베이스 관계형 프로그래밍과 다르다 : 테이블을 사용하지 않고 데이터를 다른 형태로 저장한다. , 데이터의 구조가 고정 되어 있어야 한다. -> MongoDB와 같은 문서 지향 데이터베이스
트랜잭션
데이터베이스의 상태를 변환시키는 논리적 기능을 수행하기 위해 행해지는 하나 이상의 쿼리를 모아 놓은 하나의 작업 단위 ex)계좌이체
ACID
데이터베이스 트랜젝션이 발생할 때 , 그 안정성을 보장할 수 있는 성질
Atomicity : 오류나는 상황에서 전단계로 돌아간다.(롤백) 하나의 트랜젝션 내에서는 모든 연산이 "모두성공"하거나 "모두실패"해야 한다. Consistency: 하나의 트랜젝션 전후에 데이터베이스의 일관된 상태가 유지되어야 한다. Isolation:각각의 트랜젝션은 독립적, 서로의 연산을 확인 받거나 영향을 줄 수 없다. Durability:하나의 성공된 트랜젝션에 대한 로그가 기록되고 영구적으로 남는다.
스키마
데이터베이스에서 데이터가 구성되는 방식과 서로 다른 엔티티 간의 관계 : 데이터베이스의 청사진
PWA
progressive Web Application