TIL_7주차(IM)

·2021년 4월 10일
0

이머시브코스 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 <> '특정 값';
// 문자열에서 특정 값과 비슷한 값을 필터할 때 LIKE와 '\%' 혹은 '*'를 사용
SELECT 특성_1, 특성_2 FROM 테이블_이름 WHERE 특성_2 LIKE '%특정 문자열%'
SELECT * FROM 테이블_이름 ORDER BY 특성_1 // 특성_1에 대한 오름차순(DESC 내림차순)
SELECT * FROM 테이블_이름 LIMIT 200 // 데이터 결과값 200개 한정
// 특성_1, 특성_2, 특성_3의 유니크한 '조합'값들을 선택
SELECT DISTINCT 특성_1,특성_2,특성_3 FROM 테이블_이름
// 서로 공통된 부분으로만 연결(INNER JOIN)
SELECT *
FROM 테이블_1
JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B
SELECT * FROM 테이블_이름 GROUO BY 특성_1 // 특정 컬럼을 그룹화
// HAVING : group by로 조회된 결과에 대한 필터
// 각 고객의 주문한 값들의 평균을 구한 뒤 그 평균이 6.00 넘는 결과들만 조회
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의 차이점

  1. 데이터 저장(Storage)
  • 관계형 데이터베이스는 SQL을 이용해 미리 작성된 스키마를 기반으로 정해진 형식에 맞게 데이터를 저장
  • NoSQL은 위와같이 key-value, document, graph 형식 등의 방식으로 저장할 수 있음
  1. 스키마(Schema)
  • SQL을 사용하려면 형식이 고정된 스키마가 필요
  • NoSQL은 스키마의 형태가 동적임 행을 추가할 때 즉시 열을 함께 추가할 수 있고, 개별 속성에 대해서 모든 열에 대한 데이터를 반드시 입력하지 않아도 됨
  1. 쿼리(Querying)
  • 관계형 데이터베이스는 테이블의 형식과 테이블간의 관계를 맞춰서 데이터를 요청. 그래서 SQL과 같은 구조화된 쿼리 언어를 정보 요청에 사용
  • 비관계형 데이터베이스의 쿼리는 데이터 그룹 자체를 조회하는 것에 초점을 두어 구조화되지 않은 쿼리 언어로도 데이터 요청이 가능(UnStructured Query Language)라고도 함
  1. 확장성(Scalability)
  • SQL 기반의 관계형 데이터베이스는 보통 수직적으로 확장
  • NoSQL로 구성된 데이터베이스는 수평적으로 확장

SQL 기반의 관계형 데이터베이스를 사용하는 케이스

  1. 데이터베이스의 ACID 성질을 준수해야 하는 경우
  2. 소프트웨어에 사용되는 데이터가 구조적이고 일관적인 경우

NoSQL 기반의 비관계형 데이터베이스를 사용하는 케이스

  1. 데이터의 구조가 거의 또는 전혀 없는 대용량의 데이터를 저장하는 경우
  2. 클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우
  3. 빠르게 서비스를 구축하고 데이터 구조를 자주 업데이트 하는 경우

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 진행..

profile
my life is free

0개의 댓글

관련 채용 정보