이머시브코스 TIL 7주차 모음
0405.월
해당 블로깅으로 대체.. https://velog.io/@semin/React-about-redux
0406.화
sprint - Cmarket redux
0407.수
Database
- SQL(Structured Query Language) : 구조화된 쿼리 언어(데이터베이스용 프로그래밍 언어)
- query : 저장되어 있는 정보를 필터하기 위한 질문
- in-memory : 끄면 데이터 없어짐
File I/O : 원하는 데이터만 가져올 수 없고 항상 모든 데이터를 가져온 뒤 서버에서 렌더링 필요
- 데이터베이스 : 데이터에 특화된 서버
- primary key(기본키) : 고유한 값
- foreign key(외래키) : 참조할 수 있는 값
SELECT 특성_1, 특성_2 FROM 테이블_이름
SELECT * FROM 테이블_이름
SELECT 특성_1, 특성_2 FROM 테이블_이름 WHERE 특성_2 <> '특정 값';
SELECT 특성_1, 특성_2 FROM 테이블_이름 WHERE 특성_2 LIKE '%특정 문자열%'
SELECT * FROM 테이블_이름 ORDER BY 특성_1
SELECT * FROM 테이블_이름 LIMIT 200
SELECT DISTINCT 특성_1,특성_2,특성_3 FROM 테이블_이름
SELECT *
FROM 테이블_1
JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B
SELECT * FROM 테이블_이름 GROUO BY 특성_1
SELECT CustomerId, AVG(Total) FROM invoices
GROUP BY CustomerId HAVING AVG(Total) > 6.00
ACID
- Atomicity : 하나의 트랜젝션 내에서는 모든 연산이 성공하거나 모두 실패해야 한다
Consistency : 하나의 트랜젝션 전후에 데이터베이스의 일관된 상태가 유지되어야 한다
Isolation : 각각의 트랜젝션은 독립적. 서로의 연산을 확인받거나 영향을 줄 수 없다
Durability : 하나의 성공된 트랜젝션에 대한 로그가 기록되고 영구적으로 남는다
- 각 단어는 데이터베이스 내에서 일어나는 하나의 트랜잭션(transaction)의 안정성을 보장하기 위해 필요한 성질
- 트랜잭션 : 여러 개의 작업들을 하나의 실행 유닛으로 묶어준 것. 하나의 특정 작업으로 시작을 해 묶여있는 모든 작업들을 다 완료해야 끝나고, 만약 한 개의 작업이라도 실패한다면 전부 실패를 하게 됨
SQL vs NoSQL
- 데이터베이스는 관계형 데이터베이스와 비관계형 데이터베이스로 나뉨
- 관계형 데이터베이스는 SQL을 기반으로 하고, 비관계형 데이터베이스는 NoSQL로 데이터를 다룸
- 대표적인 관계형 데이터베이스 : MySQL, Oracle, MariaDB, SQLite, PostgresSQL
NoSQL
- 데이터가 고정되어 있지 않은 데이터베이스 형태들을 가리킴
- Key-Value 타입 : 데이터를 key-value의 쌍을 속성으로 하는 배열 형태로 저장
- 문서형(Document) 데이터베이스 : 데이터를 테이블이 아닌 문서처럼 저장하는 데이터베이스
- Wide-Column 데이터베이스 : 열(colum)에 대한 데이터 관리를 집중하는 데이터베이스
- 그래프(Graph) 데이터베이스 : 그래프와 비슷한 형식으로 데이터 간의 관계를 구성
SQL과 NoSQL의 차이점
- 데이터 저장(Storage)
- 관계형 데이터베이스는 SQL을 이용해 미리 작성된 스키마를 기반으로 정해진 형식에 맞게 데이터를 저장
- NoSQL은 위와같이 key-value, document, graph 형식 등의 방식으로 저장할 수 있음
- 스키마(Schema)
- SQL을 사용하려면 형식이 고정된 스키마가 필요
- NoSQL은 스키마의 형태가 동적임 행을 추가할 때 즉시 열을 함께 추가할 수 있고, 개별 속성에 대해서 모든 열에 대한 데이터를 반드시 입력하지 않아도 됨
- 쿼리(Querying)
- 관계형 데이터베이스는 테이블의 형식과 테이블간의 관계를 맞춰서 데이터를 요청. 그래서 SQL과 같은 구조화된 쿼리 언어를 정보 요청에 사용
- 비관계형 데이터베이스의 쿼리는 데이터 그룹 자체를 조회하는 것에 초점을 두어 구조화되지 않은 쿼리 언어로도 데이터 요청이 가능(UnStructured Query Language)라고도 함
- 확장성(Scalability)
- SQL 기반의 관계형 데이터베이스는 보통 수직적으로 확장
- NoSQL로 구성된 데이터베이스는 수평적으로 확장
SQL 기반의 관계형 데이터베이스를 사용하는 케이스
- 데이터베이스의 ACID 성질을 준수해야 하는 경우
- 소프트웨어에 사용되는 데이터가 구조적이고 일관적인 경우
NoSQL 기반의 비관계형 데이터베이스를 사용하는 케이스
- 데이터의 구조가 거의 또는 전혀 없는 대용량의 데이터를 저장하는 경우
- 클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우
- 빠르게 서비스를 구축하고 데이터 구조를 자주 업데이트 하는 경우
Schema&Query Design
- 스키마 : 데이터베이스에서 데이터가 구성되는 방식과 서로 다른 엔티티 간의 관계에 대한 설명
- 필드(column) : 테이블의 열을 가리킴
- 레코드(tuple) : 테이블의 한 행의 저장된 정보
- 키 : 테이블의 각 레코드를 구분할 수 있는 값. 각 레코드마다 고유값이어야 하며 기본키(primary key)와 외래키(foreign key) 등이 있을 수 있음
관계 종류
- 1 : 1 관계 : 테이블의 레코드 하나당 다른 테이블의 한 레코드와 연결되어 있는 경우
하지만 이러한 관계는 흔치 않음. 차피 1대1이라면 같이 적는게 오히려 나을 수 있기 때문
- 1 : N 관계 : 테이블의 레코드 하나당 여러 개의 레코드와 연결되어 있는 경우
- N : N 관계 : 여러 개의 레코드가 여러 개의 레코드를 가지는 관계. 두 개의 일대다 관계라고 볼 수 있음
양 테이블에서 일대다 관계를 형성할 수 있는 새로운 테이블을 만들어서 관리(조인 테이블)
- 자기참조 관계
0408.목
Join
- LEFT JOIN : 테이블1의 모든 레코드와 테이블2에서 일치하는 레코드
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
- INNER JOIN : 두 테이블에서 일치하는 값만
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
0409.금
Node.js mysql
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
var sql = "INSERT INTO customers (name, address) VALUES ('Michelle', 'Blue Village 1')";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("1 record inserted, ID: " + result.insertId);
});
});
sprint - Cmarket Database 진행..