ddodoi 님의 블로그
2주차-파트06: 데이터 베이스 본문
const mariadb = require('./database/connect/mariadb');
mariadb.connect()
npm install mysql --save
Chapter1. 데이터베이스란?
데이터가 통합하여 효율적으로 관리하기 위한 데이터 집합체를 데이터베이스(DataBase: DB)라고 한다. 데이터를 구조화하여 관리함으로써 데이터 중복을 막고, 효율적이고 빠른 데이터 연산을 가능하게 한다.
우리는 데이터 베이스를 운영하고 관리하기 위한 DBMS(DataBase Management System)를 통해 데이터 베이스를 사용한다.
다음은 다양한 DBMS들이다. 운영회사는 다르지만, 데이터베이스에 연산을 요청하기 위해 사용 되는 주요 명령어는 동일하다.
SQL(Structured Query Language)
SQL은 데이터베이스에 연산을 요청하기 위해 사용 되는 언어로 데이터를 생성, 조회, 수정, 삭제 등과 같은 기능을 수행할 수 있다. 대표적은 SQL은 다음과 같다.
- 데이터 삽입: INSERT
- 데이터 조회: SELECT
- 데이터 수정: UPDATE
- 데이터 삭제: DELETE
Chapter2. Docker 개요와 설치 , mariaDB설치
Docker와 MariaDB설치는 강의 자료를 보고 하면 된다. 그런데 Docker를 설치 후 실행 할 때마다 자꾸 다음과 같은 오류가 발생하였다.
이 경우 재부팅 후 바이오스에 진입해 가상화 설정을 켜주니 해결 되었다. 바이오스가 이 블로그 사람의 것과 같아 참고하여 해결하였다.
그리고 강의에서 cmd창에 mysql -u root -p 입력하는 부분은 mariadb -u root -p로 입력해야 실행이 된다.
앞으로 mariadb를 실행시킬 때는 아래와 같이 실행하면 된다.(Docker 앱 켜서 mariadb가 stop되어있으면 실행시켜주기) docker exec -it mariadb /bin/bash 입력할 때 띄어쓰기 유의!!!
Chapter3. SQL: CREATE
우리는 이제 데이터베이스에 각각의 용도별로 데이터들을 모아놓는 방을 만들 것이다.
cmd창에서 다음과 같이 치면 데이터베이스를 조작할 수 있다. 여기서 DATABASE는 하나하나의 방을 의미한다.
실습을 해보자. mariaDB를 실행시킨 초기 cmd창 모습이다. MariaDb[(none)]에서 none은 아직 방에 들어가기 전의 상태라는 것을 의미한다.
이제 SHOW DATABASES; 명령어를 입력하면 미리 만들어져 있는 방들이 보인다.(ex: information_schema, mysql, performane_schema, sys)
이제 여기에 Tennis 용품들이 있는 방을 만들어주자. CREATE DATABASE Tennis; 입력후 SHOW DATABASES 명령어로 Tennis방이 생긴것을 확인할 수 있다.
이제 Tennis방에 들어가보자. USE Tennis;를 치니 none->Tennis로 바뀐 것을 확인할 수 있다.
-방 안에 저장소 만들기-
실생활에서 방에 들어가면 또 다시 구역이 나뉘는 것처럼 DB에서도 방에 들어가서 구역을 나눠 줄 수 있다.
이것은 DB에서 테이블의 형태로 표현할 수 있다.
다음의 명령어를 사용해 DB에서 table을 만들수 있다. 이 테이블의 이름은 member이며 열로 id, name, pwd를 가진다. 이 세 열의 자료형은 각각 int, varchar, varchar이다.
이제 Table을 만들어보자. 다음과 같이 명령어를 입력하면 테이블 안에 자료는 없는 상태이고 테이블 형태의 틀만 있는 상태이다.
이 테이블 안에 데이터를 삽입하고 조회하는 명령어를 알아보자.
이제 위 테이블에서 데이터 한 행을 삽입해보자. 데이터는 삽입할때 한 행씩 넣는다.
SELECT * FROM 테이블명 을 하면 일일히 칼럼명을 입력할 필요 없이 모든 컬럼의 데이터를 볼 수 있다.
이제 나머지 데이터도 다 넣고 테이블을 조회해보자.
만약 id가 'tennisking' 인 행만 출력할려면 어떻게 해야할까?
특정 데이터를 조회할려면 select문에 where조건이 붙는다.
이제 이 명령어를 이용하여 id가 'tennisking'인 데이터의 행만 조회해보자.
Chapter4. SQL: UPDATE, DELETE
이번에는 데이터를 수정, 삭제하는 작업을 배워보자.
id가 'tennisking'인 사람의 pwd를 bbbbb->zzzzz로 바꿔줬다.
만약 where절로 조건을 걸지 않으면 다음과 같이 모든 pwd가 수정된다.
이제 데이터를 삭제하는 법을 배워보자.
이름이 'park songa'인 사람의 데이터를 지워보자. 잘 지워진 걸 확인 할 수 있다.
이번에는 DELETE문에 조건 WHERE을 붙이지 말고 삭제해보자. 모든 데이터 행이 사라진 것을 확인할 수 있다.
Chapter5. node.js 에 db연동 준비, 설정파일 만들기 SELECT 테스트
어제의 백엔드 프로젝트와 db를 연동해보자.
Tennis방에 다음과 같은 product 테이블을 추가해주었다.
vscode에 my sql모듈 설치하는 과정이 필요하다. 프로젝트를 vscode에서 열고 터미널에 다음 명령어를 쳐서 설치하자(새 프로젝트를 할때마다 설치 필요).
npm install mysql --save
우리는 main페이지를 불러오면 터미널에 테이블 안 데이터를 출력하도록 할 것이다.
프로젝트 파일에 database폴더 -> connect폴더 -> mariadb.js를 생성하고 mysql모듈을 불러와 실행시켜준다.
const mariadb = require('mysql');
const conn = mariadb.createConnection(
{
host: 'localhost',
port: 3306,
user: 'root',
password: 'root',
database: 'Tennis'
}
);
module.exports = conn;
그리고 requestHandler.js파일에 mariadb를 불러오고 main함수에 mariadb.query를 추가해 테이블이 터미널창에 출력되도록 한다.
const mariadb = require('./database/connect/mariadb');
function main(response){
console.log('main');
mariadb.query("SELECT * FROM product",function(err, rows){
console.log(rows);
})
response.writeHead(200,{'Content-Type': 'text/html'});
response.write('Main page');
response.end();
}
index.js에는 다음 코드를 추가해서 데이터베이스와 연결 시켜준다.
const mariadb = require('./database/connect/mariadb');
mariadb.connect()
function orderlist(response){
console.log('orderlist');
response.writeHead(200,{'Content-Type ': 'text/html' });
mariadb.query("SELECT * FROM orderlist",function(err, rows){
response.write(orderlist_view);
rows.forEach(element => {
response.write("<tr>"
+ "<td>"+ element.product_id+"</td>"
+"<td>"+ element.order_date+"</td>"
+"</tr>");
});
response.write("</table>");
response.end();
})
}
forEach함수는 for문과 비슷한 역할을 해주는 함수로 여기서는 배열로 넘어오는 행 값들을 코드가 알아서 각 행으로 나누도록 하게 한다.
사이트 참
'웹풀스택 일일정리' 카테고리의 다른 글
3주차-파트05: HTTP method, Node.js, 라이브러리(=모듈)와 프레임워크, npm, let과 const의 차이 (1) | 2024.08.31 |
---|---|
3주차-파트04: API, URL, HTTP (0) | 2024.08.29 |
2주차-파트04: 쇼핑몰 프로젝트 (0) | 2024.08.27 |
2주차-파트03: 웹 서비스의 이해2 (0) | 2024.08.25 |
2주차-파트02: 웹 서비스의 이해1 (0) | 2024.08.22 |