Flat-File Database 파일에 데이터를 저장하는 방식 : 단점이 많음 -> 해결을 위해 DBMS 사용
DBMS : Database Mangaement System 데이터베이스를 관리해 주는 엔진
DBMS 종류
1974년 SQL [Structured Query Language] (RDBMS) : 구조적인 질의응답을 할 수 있는 언어
1998년 NoSQL : BigData, json 형태 데이터를 관계형으로 정리하기 어려워짐
RDBMS(RelationDBMS) 관계형
스키마(SCHEMA)를 이용해서 데이터 정리, 타입 정의 가능, 관계 맺을 수 있음 관계를 읽고 쓸때 SQL을 사용함
Data integrity를 보장함 -> 데이터가 틀리지 않는다.
PK : 고유 식별자, FK : 관계를 정의해 줌
SQL : select 무엇을 선택할지 from 어떤 테이블에서 가져올지 where 조건
종류 : MySQL(가장 기본), PostgresSQL(가장 최근, MySQL에 비해 조금 복잡 + 쿼리가 미묘하게 다름), SQLite(가장 심플)
NoSQL No schema
왜? : object를 그냥 저장 할 수 있지 않을까?
schema-less, Non-relation, 용도에 따라 저장 형태가 다름
key-value(Redis), document(MongoDB), wide-Column(Cloud Bigtable), Graph(neo4j) 형태가 있음
몽고DB : document 형태, document를 묶는 collections가 존재, 유저 collections, 상품 collections로 관계없이 저장
관계가 없어서 데이터를 중복해서 저장. 정보의 일관성은 코드에서 해결 -> 개별적으로 데이터 저장
ORM / ODM
ORM (Object Relational Mapping)
코드 와 DB 사이의 연결의 번거로움을 해결해주는 프로그램 -> 코드에서 스키마를 정의하면 ORM이 자동으로 DB에 테이블을 만들고 DB에 저장해줌 (추상화해줌)
장 : 비즈니스로직에 집중가능, 반복되는 쿼리를 줄여줌, DB가 달라져도 적용됨, 마이그레이션 도움
단 : ORM만으로는 상세한 쿼리 불가-> 복잡한 내용은 직접 쿼리를 사용, 최적화에는 맞지 않음
종류 : TypeORM, Sequelize, Prisma
ODM (Object Document Mapper)
object를 document로 매핑해줌
그럼 SQL과 NoSQL 선택은?
1. 어떤 데이터 타입을 저장 할지
2. 사용자와 데이터 량
3. 서로 관계가 필요한지
하이브리드 approach - 같은 소프트웨어라도 부분적으로 SQL,NoSQL을 섞어서 사용