__Database

SQL 이란?

데이터베이스는 웹 개발을 위해 다양한 정보를 효율적이고 안정적으로 보관하기 위해서 사용합니다. 가장 많이 사용하시게 될 mysql이 SQL database (관계형 데이터베이스, RDBMS)고, 이를 활용하기 위한 언어가 SQL(Structured Query Language)입니다. 즉, DB에 구조화된(Structured) 질문(Query)을 할 수 있는 컴퓨터 언어(Language) 입니다.

SQL vs NOSQL ?

  • SQL Database - Strict Schema, Relations

Strict Schema - 처음 스키마 설계시 필요할 것으로 예상이 되었던 데이터보다 더 많은 데이터를 다루게 되었을 때, 유연하게 스키마를 바꿀 수 없습니다. 이를 보완하기 위해서 ORM을 사용할 수 있습니다. (Sequelize CLI 등 활용) Relations - 스키마 설계 시 one-to-one, one-to-many, many-to-many를 명확히 규정을 하고 스키마를 짜야 합니다. 중복되거나 잘못 입력된 데이터가 쉽게 DB에 삽입될 수 없습니다.

  • noSQL Database (Not Only SQL!) - No Schema, Relations

No Schema - JSON data와 같은 구조를 사용하여, 자바스크립트의 객체를 다루는 것과 같은 느낌으로 데이터 조회가 가능합니다. No Relations - JOIN의 개념이 사라지고, duplicate된 데이터가 각각의 Collection에 저장됩니다. (SQL의 table과 같은 개념) JOIN을 하지 않아도 각 Collection에서 원하는 정보를 조회할 수 있습니다. 조회가 noSQL보다 비교적 빠릅니다 (because no JOIN)

  • Where to use SQL? 초기 스키마 구성을 통해서 대부분의 데이터를 처리할 수 있을 때 스키마 구조는 비교적 간단하지만 Update가 많을 때 Scale up을 해야하는 경우가 적을 때 - 서버의 성능이 향상되어야 됨

  • Where to use NoSQL? 이후에 어떤 데이터가 추가될 지 예상할 수 없을 때** Read / Write가 Update가 보다 현저히 많을 때 **Scale up을 해야하는 경우가 많을 때** - 서버의 수량만 더 추가하면 OK

MySQL vs SQL

  • MySQL : 데이터베이스(DataBase)이다.

  • SQL : 데이터를 관리하기 위해 설계된 프로그래밍 언어이다.

MYSQL 시작하기

경로 cd /usr/local/mysql/bin

비밀번호 입력 ./mysql -uroot -p

생성 mysql> CREATE DATABASE jjdb;

삭제 mysql> DROP CREATE DATABASE jjd;

확인

mysql> DATABASE;

사용 mysql> UES jjd;

Data table 만들기

Data table을 만들기 위해서는 명시적으로 Database를 선택해 줘야 함 데이터베이스가 선택되면 생성된 모든 테이블들은 그 해당 데이터베이스에서 만들어짐

Table 생성

table 탐색

mysql> DESC jjTable

table 삽입

Learn SQL

  1. Select

Customers table 모두 보기 SELECT * FROM Customers;

CustomerName만 가져오기 SELECT CustomerName,City FROM Customers;

중복되지 않는 나라만 가져오기 SELECT DISTINCT Country FROM Customers;

  1. Where

나라가 멕시코인곳만 가져오기 SELECT * FROM Customers WHERE Country='Mexico’;

3 And, Or, Not

나라는 Germany Adn Berlin SELECT * FROM Customers WHERE Country="Germany” AND City="Berlin”

나라는 Germany And Berlin OR Munchen SELECT * FROM Customers WHERE Country='Germany’ AND (City='Berlin’ OR City='München’);

나라가 Germany 와 USA 가 아닌곳 SELECT * FROM Customers WHERE NOT Country='Germany’ AND NOT Country='USA’;

4.Order By

나라 알파벳 순서대로 모든 정보들 정렬 SELECT * FROM Customers ORDER BY Country;

나라 알파벳 반대순서대로 모든 정보들 정렬 SELECT * FROM Customers ORDER BY Country DESC;

  1. Insert Into

원하는 정보 맨밑에저장된다. INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country) VALUES (‘Cardinal’,‘Tom B. Erichsen’,‘Skagen 21’,‘Stavanger’,‘4006’,‘Norway’);

  1. Null Values

Customers table 에 CustomerName, ContactName, Address 목록을 불러오는데 Adrress 에 값이 Null 인 목록을 불러와라 SELECT CustomerName, ContactName, Address FROM Customers WHERE Address IS NULL;

No result.

반대로 NULL 값이 없는 목록들을 가져와라

SELECT CustomerName, ContactName, Address FROM Customers WHERE Address IS NOT NULL;

  1. Wildcards

Customers 에 table 안에 city 안에 ber와 같은 char 들이 있는 목록들 불러오기 SELECT * FROM Customers WHERE City LIKE ‘ber%';

LIKE ‘ber%’ 처음 LIKE ‘%es%'; 중간 LIKE ‘_ondon’; 끝 LIKE ‘L_n_on’; 검색중간 LIKE ‘[bsp]%'; b,s,p 시작하는것들 LIKE ‘[!bsp]%'; b,s,p 시작하지 않는것들 NOT LIKE ‘[bsp]%'; b,s,p 시작하지 않는것들 LIKE ‘[a-c]%'; a부터 c 까지

  1. Aliases (map)같은 문법

새로운 테이블을 만든다. CustomerID 불러오고 이것의 카테고리는 ID CustomerName 불로오고 이것의 카테고리는 Customer 그것을 화면에 출력

SELECT CustomerID AS ID, CustomerName AS Customer FROM Customers;

만약 AS 의 사이에 하나만 있으면 데이터만 출력후 뒤에로 넘어간다. SELECT CustomerName, Address + ‘, ' + PostalCode + ' ' + City + ‘, ' + Country AS Address FROM Customers;

![](/tutorial/2020-01-13-sever_files/Screen Shot 2020-02-06 at 1.29.29 PM.png)

MVC design pattern

  • MVC 패턴은 애플리케이션을 Model, View, Controller 세 역할로 구분한 개발 방법론입니다. 각 요소는 애플리케이션의 작동과 관련하여 각기 다른 역할을 수행합니다.

  • Model은 데이터 처리와 관련된 역할을 수행하는 컴포넌트입니다. 컨트롤러의 명령을 받아 동작합니다.

  • View는 사용자들이 보는 화면(UI)으로서, 컨트롤러와의 소통을 통해 데이터를 입력하거나 출력합니다.

  • Controller는 데이터(Model)와 사용자 인터페이스(View)를 연결하는 역할을 합니다.

  • 구성 요소를 분리하는 이유는 무엇일까요?

    → 이해하기 쉽고 깔끔한 코드를 짤 수 있습니다. 덕분에 유지보수가 용이해지며, 확장성도 좋아집니다. 또한 기능에 따라 코드를 분류하기 때문에, 중복되는 코드를 작성하는 실수 또한 줄일 수 있습니다.

크게 3가지 패턴을 이야기 할수 있다.

  • Model은 데이터 처리와 관련된 역할을 수행하는 컴포넌트입니다. 컨트롤러의 명령을 받아 동작합니다.

  • View는 사용자들이 보는 화면(UI)으로서, 컨트롤러와의 소통을 통해 데이터를 입력하거나 출력합니다.

  • Controller는 데이터(Model)와 사용자 인터페이스(View)를 연결하는 역할을 합니다..

ORM이란?

  • 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말합니다.

  • ORM을 왜 사용할까요?

    우리가 사용하는 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용합니다. 이 때 서로의 구조 간의 불일치가 발생합니다. 따라서 ORM을 활용하여 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 이러한 불일치를 해결할 수 있습니다.

  • ORM의 장점

    익숙한 객체 지향적인 코드를 사용함으로써 직관적인 이해 및 집중에 도움이 됩니다.

    • ORM - Object Relational Mapping

    ORM을 통해 작성한 객체를 재활용할 수 있다는 측면에서 재사용 및 유지보수의 편리성이 증가합니다.

  • ORM의 단점

    잘못 구현한 경우 성능이 저하될 수 있습니다.

    복잡한 쿼리문의 경우 오히려 SQL문으로 사용하는 것이 더 직관적, 효율적일 수 있습니다.

Sequelize, Sequelize CLI

  • Node.js 기반의 ORM으로 PostgreSQL, MySQL, MariaDB, SQLite, MS-SQL을 지원합니다.

  • 프로미스 기반의 ORM이기 때문에 비동기 처리에 용이합니다.

    SELECT * FROM Users WHERE id = 4 // SQL

    user = Users.find(4) // Sequelize

CLI의 대표적인 기능으로는 Migration, Seed, Model이 있습니다.

  • Sequelize CLI?

    Sequelize command line interface의 줄임말로써 명령어를 사용해 데이터베이스 작업을 할 수 있는 툴입니다.

    1. Model : 테이블을 생성
    2. Migration : 코드에 적혀져 있는 데이터베이스 테이블에 대해 실제 데이터베이스에 테이블을 생성하는 개념
    3. Seed : 생성된 테이블에 데이터를 추가