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
- Select
Customers table 모두 보기 SELECT * FROM Customers;
CustomerName만 가져오기 SELECT CustomerName,City FROM Customers;
중복되지 않는 나라만 가져오기 SELECT DISTINCT Country FROM Customers;
- 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;
- Insert Into
원하는 정보 맨밑에저장된다. INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country) VALUES (‘Cardinal’,‘Tom B. Erichsen’,‘Skagen 21’,‘Stavanger’,‘4006’,‘Norway’);
- 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;
- 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 까지
- 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의 줄임말로써 명령어를 사용해 데이터베이스 작업을 할 수 있는 툴입니다.
- Model : 테이블을 생성
- Migration : 코드에 적혀져 있는 데이터베이스 테이블에 대해 실제 데이터베이스에 테이블을 생성하는 개념
- Seed : 생성된 테이블에 데이터를 추가