Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

ddodoi 님의 블로그

2주차-파트06: 데이터 베이스 본문

웹풀스택 일일정리

2주차-파트06: 데이터 베이스

ddodoi 2024. 8. 27. 14:55
const mariadb = require('./database/connect/mariadb');   
mariadb.connect()​
npm install mysql --save

Chapter1. 데이터베이스란?

데이터가 통합하여 효율적으로 관리하기 위한 데이터 집합체를 데이터베이스(DataBase: DB)라고 한다. 데이터를 구조화하여 관리함으로써 데이터 중복을 막고, 효율적이고 빠른 데이터 연산을 가능하게 한다.

 

 

 

 

 

우리는 데이터 베이스를 운영하고 관리하기 위한 DBMS(DataBase Management System)를 통해 데이터 베이스를 사용한다.

DBMS와 데이터 베이스

 

 

 

 

 

 

다음은 다양한 DBMS들이다. 운영회사는 다르지만, 데이터베이스에 연산을 요청하기 위해 사용 되는 주요 명령어는 동일하다.

오라클, MySQL, MariaDB

 

 

 

 

 

 

 

 


 

 

 

SQL(Structured Query Language)

SQL은 데이터베이스에 연산을 요청하기 위해 사용 되는 언어로 데이터를 생성, 조회, 수정, 삭제 등과 같은 기능을 수행할 수 있다. 대표적은 SQL은 다음과 같다.

 

  • 데이터 삽입: INSERT
  • 데이터 조회: SELECT
  • 데이터 수정: UPDATE
  • 데이터 삭제: DELETE

 

 

 

Chapter2. Docker 개요와 설치 , mariaDB설치

Docker와 MariaDB설치는 강의 자료를 보고 하면 된다. 그런데 Docker를 설치 후 실행 할 때마다 자꾸 다음과 같은 오류가 발생하였다.

오류발생

 

 

 

이 경우 재부팅 후 바이오스에 진입해 가상화 설정을 켜주니 해결 되었다. 바이오스가 이 블로그 사람의 것과 같아 참고하여 해결하였다.

https://joonyon.tistory.com/m/entry/MSI-%EB%A9%94%EC%9D%B8%EB%B3%B4%EB%93%9C-AMD-VSVM-%EA%B0%80%EC%83%81%ED%99%94-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0featvmware

 

MSI 메인보드 AMD-V(SVM) 가상화 설정하기(feat.vmware)

안녕하세요. Windows 데스크탑에서 Ubuntu를 사용해야하는 일이 생겼습니다. 회사 일에 대한 테스트 겸 개인 스터디 용도인데, 듀얼 부팅으로 구성을 할까 고민해봤지만 일단 비효율적인 것 같아서

joonyon.tistory.com

 

그리고 강의에서 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은 아직 방에 들어가기 전의 상태라는 것을 의미한다.

처음 cmd창 모습

 

 

 

 

이제 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

 

 

 

mysql모듈이 설치되면서 필요한 파일들이 자동으로 다운받아졌다

 

 

 

 

우리는 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문과 비슷한 역할을 해주는 함수로 여기서는 배열로 넘어오는 행 값들을 코드가 알아서 각 행으로 나누도록 하게 한다.

 

forEach함수 설명

 

 

사이트 참

https://codingeverybody.kr/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-foreach-%ED%95%A8%EC%88%98/

 

자바스크립트 forEach() 함수 – 개념 정리 및 사용 예제 - 코딩에브리바디

자바스크립트의 forEach() 함수는 배열을 순회해서 각 요소를 콜백 함수로 처리하기 위한 함수입니다. 배열의 각 요소에 대해 주어진 콜백 함수를 적용해서 순서대로 한 번씩 실행합니다.

codingeverybody.kr