home강의 홈으로
Section 5. MySQL 활용 웹사이트 만들기
Lesson 1. 첫 삽부터 목록 보기까지

Web Application 만들기


I. 사전 준비

1. Node.js 설치 (14버전 이상)


2. VS Code 설치


3. Git 설치





II. 프로젝트 시작하기

1. 프로젝트 생성

mysql-web-practice 폴더 생성 후 VS Code에서 열기

Ctrl + `로 터미널 열기


Express generator 설치 (맥의 경우 필요시 앞에 sudo 추가)

npm install -g express-generator

Express 웹 어플리케이션 시작 (Handlebars 템플릿)

express --view=hbs .

필요 모듈 설치

npm install

2. nodemon - 저장시 자동 재실행 모듈

nodemon 설치 (맥의 경우 필요시 앞에 sudo 추가)

npm install -g nodemon

package.json > scripts에 추가

"start-w": "nodemon ./bin/www"

프로젝트 실행해보기

npm run-script start-w

🔗 localhost:3000 접속


3. 기본 사이트 구성

views/layout.hbs

<!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel='stylesheet' href='/stylesheets/style.css' /> <title>{{title}}</title> </head> <body> {{{body}}} </body> </html>

🔗 /public/stylesheets/style.css


views/sections.hbs

<h1>{{ title }}</h1> <ul> <li> <a href="biz-simple?section="> <span>🌎</span> 전체 </a> </li> {{#each sections}} <li> <a href="biz-simple?section={{ section_id }}"> <span>{{ icon }}</span> {{ section_name }} </a> </li> {{/each}} </ul>

/routes/index.js

router.get('/', function(req, res, next) { res.render('sections', { title: '섹션 목록' }); });

🔗 localhost:3000 접속





III. MySQL 사용

MySQL2 모듈 설치

npm install --save mysql2

/database/sql.js

const mysql = require('mysql2'); const pool = mysql.createPool( process.env.JAWSDB_URL ?? { host: 'localhost', user: 'root', database: 'mydatabase', password: '12345678', waitForConnections: true, connectionLimit: 10, queueLimit: 0 } ); const promisePool = pool.promise(); const sql = { getSections : async () => { const [rows] = await promisePool.query(` SELECT * FROM sections `) return rows }, } module.exports = sql

/routes/index.js

var sql = require('../database/sql') const sectionIcons = [ '🍚', '🍿', '🍜', '🍣', '🥩', '☕', '🍰' ] router.get('/', async function(req, res, next) { const sections = await sql.getSections() sections.map((item) => { item.icon = sectionIcons[item.section_id - 1] }) res.render('sections', { title: '섹션 목록', sections }); });

🔗 localhost:3000 접속

🤔얄코에게 질문하기질문은 반.드.시 이리로 보내주세요! ( 강의사이트 질문기능 ✖ )

강의에서 이해가 안 되거나 실습상 문제가 있는 부분,
설명이 잘못되었거나 미흡한 부분을 메일로 알려주세요!

답변드린 뒤 필요할 경우 본 페이지에
관련 내용을 추가/수정하도록 하겠습니다.

이메일 주소
yalco@yalco.kr
메일 제목 (반드시 아래 제목을 붙여넣어주세요!)
[질문] 조금 더 깊은 MySQL 5-1

🛑질문 전 필독!!

  • 구글링을 먼저 해 주세요. 들어오는 질문의 절반 이상은 구글에 검색해 보면 1분 이내로 답을 찾을 수 있는 내용들입니다.
  • 오류 메시지가 있을 경우 이를 구글에 복붙해서 검색해보면 대부분 짧은 시간 내 해결방법을 찾을 수 있습니다.
  • 강의 페이지에 추가사항 등 놓친 부분이 없는지 확인해주세요. 자주 들어오는 질문은 페이지에 추가사항으로 업데이트됩니다.
  • "유료파트의 강의페이지는 어디 있나요?" - 각 영상의 시작부분 검은 화면마다 해당 챕터의 강의페이지 링크가 있습니다.
  • 질문을 보내주실 때는 문제가 어떻게 발생했고 어떤 상황인지 등을 구체적으로 적어주세요. 스크린샷을 첨부해주시면 더욱 좋습니다.
🌏 Why not change the world?