Database란?
- 컴퓨터 파일 시스템에서 관련 있는 데이터들끼리 모아놓은 것
- 통상적으로 DBMS(Database Management System)를 Database라고 일컫는다.
- DBMS: 데이터를 더 효과적으로 관리할 수 있는 시스템(DB관리 엔진)
- 많이 쓰이는 DBMS: Oracle, MySQL, DynamoDB, PostgreSQL, mongoDB
- 특징
- 데이터를 저장하고 읽어오는 데 최적화됨.
- 복잡한 데이터를 다룰 수 있음.
- 안전하게 동시다발적으로 접근할 수 있음.
- 보안이 뛰어나다.
- 파일 시스템에 비해 복잡하다.
- DBMS의 두가지 종류
- SQL(Structured Query Language)
- 관계형(Relational) DBMS임.
- 관련 있는 데이터들을 table로 만들어 두고 이들의 관계를 정의할 수 있다.
- NoSQL
- SQL이 아닌 모든 것을 가리킴.
- 관계가 없는 데이터베이스를 말함.
- Key-Value, Document, Wide-column, Graph 등 여러가지 데이터베이스 타입이 존재함.
- SQL과 NoSQL의 장단점 및 차이점을 알아서 어떤 것을 사용하면 좋을지 잘 판단해야함.
SQL Database
- Excel에서 흔히 데이터를 저장하는 방식과 비슷함.
- 행과 열로 이뤄진 table사용, 여러가지 종류의 table존재
- 행마다 특정 data type을 지정해야 한다.
- 모든 요소가 다 정의된 한 줄의 데이터를 record라고 한다.
- Schema를 정의함으로서 data integrity를 지킬 수 있다.
- primary key: table에서 정말 중요한 식별자가 id 정보를 담음.
- primary key를 바탕으로 검색의 최적화가 이루어짐.
- foreign key: 두 개의 서로 다른 key의 관계를 정의해줌.
SQL Query의 기본 구조
- 세 가지 주요 명령어: SELECT, FROM, WHERE
- SELECT: table에서 어떤 행을 선택할 건지 결정
- ex) SELECT *: 유저가 가진 모든 행에 대한 데이터를 가져옴.
- FROM: 어떤 table에서 데이터를 가져올 건지 결정
- ex) SELECT Name FROM User: User테이블의 Name에 대한 데이터를 가져옴.
- WHERE: 조건을 걸 때 사용
- 예시
SELECT *FROM Users WHERE name LIKE '%Bob%';
[Users]
id | name | email | age |
---|
1 | Yoon | yoon@song.com | 18 |
2 | Bob | bob@example.com | 45 |
3 | Ashley | ashley@air.io | 23 |
Users라는 table의 모든 행을 선택하되 이름이 Bob인 행을 찾아달라는 의미이다.
- 유명한 SQL Database: Oracle, SQLite(핸드폰이나 임베디드 시스템에서 자주 사용), SQLServer, MySQL(보편적), PostgreSQL(최근 but 약간 복잡)
NoSQL
- Why NoSQL?
- 특징
- Schema가 없다.
- 관계형이 아니다. 데이터들이 서로 관계가 없으므로 고립된 형태로 분산해서 여러 서버에 나눠 관리할 수 있다.
- 특수 문제 해결을 위해 사용됨.
- Key-Value, Document, Wide-Column, Graph 등의 type이 존재.
- Web상에서 가장 많이 사용되는 mongoDB
- document database(document로 데이터 관리->json형태로)
- collection을 사용해 데이터가 정리됨. collection들은 개별적으로 관리(서로 다른 서버에 보관)하는 것이 가능하다.
- 데이터 간의 관계를 설정하지 x. 차라리 중복해서 사용함.
- 데이터베이스에서는 어떤 정보가 정확한 지 알 수 없으므로 개발자가 스스로 컬렉션을 잘 관리해야 함.
- 유명한 NoSQL Database: cassandra(Wide Column), Cloud Bigtable(Wide Column), neo4j(Graph), Redis(Key-Value), mongoDB(Document), DynamoDB(Key-Value)
ORM과 ODM
- ORM(Object Relational Mapping)
- 원래는 코드 내의 Object들을 어떻게 데이터베이스의 Table로 변환할 건지, 어떻게 Schema를 만들건지 등을 직접 고민해야함.
- ORM이란, 위 작업들을 자동으로 해주는 엔진 라이브러리. (DB추상화 도구)
- 사용방법
- 코드 상으로 schema정의 후 프로그램 실행
- 자동으로 table생성해줌.
- 자동으로 data를 table에 기록해줌.
- 장점
- DB query에 신경쓰지 않고 어플리케이션의 business logic에 집중할 수 있다.
- boilerplate code를 줄일 수 있다.
- 추상화 level이 추가됨.
- Schema가 변경된다면 자동으로 처리해주는 migration 지원.
- 단점
- ORM API만으로는 복잡한 query를 할 수 없음.
- 느림. 메모리 최적화 x.
- 자주 사용되는 ORM: TYPEORM, Sequelize, Prisma
- ODM(Object Document Mapper)
- mongoose, mongoDB 등이 존재
- 추상화 단계 추가됨.
SQL vs. NoSQL
| SQL | NoSQL |
---|
시작 barrier | 보통 | 쉬움 |
데이터 구조 | 고정됨(정적) | 유연함(동적) |
데이터 찾기 | 쉬움 | 쉬움 |
연관된 데이터 연결 | 쉬움 | 어려움 |
확장성 | 어려움 | 쉬움 |
클라우드 운영 비용 | 비쌈 | 저렴 |
- 확장성
- 수직 확장: SQL은 서로 다른 table이 연관되었기 때문에 하나의 table을 다른 table에서 불러다 써야 하는 경우가 다수 존재함. 따라서 이 table들을 다른 server에 저장해 두는 것이 없음. 따라서 server를 수직적(CPU, RAM, DISC추가 등)으로 확장해야함.
- 수평 확장: NoSQL은 table간의 관계성이 없으므로 여러 server에 데이터를 나눠서 저장할 수 있음. 따라서 여러 대의 server를 사용해 수평적으로 확장할 수 있음.
- SQL vs. NoSQL 무엇을 사용할지에 대한 판단 기준
- 어떤 data type을 저장할 것인가?
- 얼마나 많은 사용자를 예상하는가?(데이터양)
- **3. 데이터들이 서로 관계가 있는가?
- 그치만 많은 기업들이 hybrid 형식을 사용(상황에 따라 SQL과 NoSQL 혼합 사용)
MySQL 실습
-
table 만들기
-
foreign key 만들기