
데이터베이스란
DBMS
SQL (Structed Query Language)
docker 설치 (윈도우, 맥-인텔, 맥-M?시리즈)
brew install --cask dockerMySQL 설치
docker-compose.yml파일 생성 후 입력services:
mysqldb:
image: mysql:8.0
container_name: mysql_server
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: mysql
MYSQL_USER: user
MYSQL_PASSWORD: root
volumes:
- ./mysql_data:/var/lib/mysql
Create ()
show databases;Create Database 이름;Use 생성한 DB 이름;Create Table 테이블 이름
(
컬럼명1 자료형,
컬럼명2 자료형,
컬럼명3 자료형,
...
);Select, Insert (데이터 조회, 삽입)
Select 컬럼명 From 테이블명;
//전체 조회 시 컬럼명에 (*) 사용Insert 컬럼명1, 컬럼명2, .... Into 테이블명 Values(컴럼1, 데이터, 컬럼2, 데이터,...);Select 컬럼명 From 테이블명 Where 조건;Update, Delete (데이터 수정, 삭제)
Update 테이블명 Set 컬럼명 = 수정할 값 Where 조건;
//(Where 절을 제외하면 테이블 전체 데이터 삭제 가능)Delete From 테이블명 Where 조건;mysqldb.js) mysql2 드라이버를 사용하여 외부 MySQL 서버와의 연결 통로를 정의const mysqldb = require('mysql2');
const conn = mysqldb.createConnection({
host: 'localhost',
port: 3306,
user: 'root', // MySQL 사용자 계정
password: '1234',
database: 'db' // 생성한 데이터베이스 이름
});
module.exports = conn;
requestHandler.js - order)main.html에서 특정 상품의 주문 버튼을 클릭하면, 브라우저는 /order?productId=1과 같은 경로로 서버에 요청을 보냄server.js에서 url.parse(request.url, true)를 통해 파싱된 queryData 객체에서 사용자가 넘긴 상품 ID(productId)를 꺼냄new Date())를 SQL INSERT 문에 삽입하여 orderlists 테이블에 저장mysqldb.query 함수가 실행되는 동안 서버는 멈추지 않고 다음 로직을 처리하여 사용자에게 즉각적인 응답을 보냄function order(response, queryData) {
let productId = queryData.productId;
// 데이터베이스에 주문 내역 저장 (비동기 처리)
mysqldb.query("INSERT INTO orderlists VALUES (" + productId + ", '" + new Date().toLocaleDateString() + "');", function(err, rows) {
if(err) console.error("DB 저장 에러:", err);
console.log("저장 결과:", rows);
});
response.writeHead(200, {'Content-Type' : 'text/html; charset=utf-8'});
response.write('주문이 완료되었습니다! <br> 주문 내역 페이지에서 확인하세요.');
response.end();
}
requestHandler.js - orderlist)<table>) 형식으로 렌더링SELECT * FROM orderlists 쿼리를 실행하여 DB에 저장된 모든 행(rows) 데이터를 가져옴orderlist.html 뼈대 코드 뒤에, rows.forEach 반복문을 사용하여 각 주문 데이터(상품 ID, 주문 날짜)를 <tr><td> 태그로 변환해 붙여넣음</table>), 비동기 콜백 함수 내부에서 response.end()를 호출하여 브라우저에 화면을 출력함function orderlist(response) {
console.log('orderlist');
response.writeHead(200, {'Content-Type' : 'text/html'});
// DB에서 모든 주문 내역을 조회합니다.
mysqldb.query("SELECT * FROM orderlists", function(err, rows) {
// 1. HTML의 기본 틀(헤더 등)을 먼저 보냅니다.
response.write(orderlist_view);
// 2. DB에서 가져온 행 데이터를 반복문을 통해 표의 행(tr)으로 변환합니다.
rows.forEach(element => {
response.write("<tr>"
+ "<td>"+element.product_id+"</td>"
+ "<td>"+element.order_date+"</td>"
+ "</tr>");
});
// 3. 테이블을 닫고 최종적으로 응답을 종료합니다.
response.write("</table>");
response.end();
})
}

