본문 바로가기

WINK-(Web & App)/Express.js (Node.js) 스터디

[2024 Node.js 스터디] 장민우 #5주차 "인생이란"

반응형

6장 익스프레스 웹 서버 만들기

6.1 익스프레스 프로젝트 시작하기

4장, 5장 제대로 공부하셨다면 package.json을 제일 먼저 생성해주셔야 하는 것 다들 아실 겁니다!

 

npm init으로 콘솔에서 단계적으로 내용물을 입력해도 되고

npm init -y를 입력해 파일을 만든 뒤 내용을 수정해도 됩니다.

사실 저는 npm init 하고 마음에 안 들어서  package.json 들어가서 재작성했어요 ㅎ...

 

아 그리고 "scripts": {

                     "start" : "nodemon app" 

까먹지 말고 작성해주셔야 합니다!!

 

nodemon app을 하면 app.js를 nodemon으로 실행한다는 뜻입니다.

 

const express = require('express');

const app = express();
app.set('port', process.env.PORT || 3000);

app.get('/', (req, res) => {
  res.send('Hello, Express');
});

app.listen(app.get('port'), () => {
  console.log(app.get('port'), '번 포트에서 대기 중');
});

 

Express 모듈을 실행해 app 변수에 할당합니다.

익스프레스 내부에 http 모듈이 내장되어 있으므로 서버의 역할을 할 수 있습니다.

 

npm start 해주면 ~

이렇게 접속화면이 뜹니다!

 

단순한 이런 문자열 대신에 HTML로 응답하고 싶으면, res.sendFile 메서드를 사용하면 됩니다.

단 파일의 경로를 path 모듈을 사용해서 지정해야 합니다. 저는 따로 안 했습니다..

 

6.2 자주 사용하는 미들웨어

미들웨어는 익스프레스의 핵심입니다.

요청과 응답의 중간(middle)에 위치하기 때문에 미들웨어(middleware)라고 부르는 것입니다.

미들웨어는 요청과 응답을 조작해 기능을 추가하기도 하고, 나쁜 요청을 걸러내기도 합니다.

 

app.js 중간에

app.use((err, req, res, next) => {
  console.error(err);
  res.status(500).send(err.message);
});

가 있는데 app.use 매개변수가 req, res, next인 함수를 넣으면 됩니다.

미들웨어 위에서부터 아래로 순서대로 실행되면서 요청과 응답 사이에 특별한 기능을 추가할 수 있습니다.

주소를 첫 번째 인수로 넣어주지 않는다면 미들웨어는 모든 요청에서 실행되고, 주소를 넣는다면 해당하는 요청에서만 실행된다고 보면 됩니다.

 

에러 처리 미들웨어는 매개변수가 err, req, res, next로 네 개입니다. 모든 매개변수를 사용하지 않더라도 매개변수가 반드시 네 개여야 합니다. 첫 번째 매개변수 err에는 에러에 관한 정보가 담겨 있습니다. res.status 메서드로 HTTP 상태 코드를 지정할 수 있으며, 기본값은 200(성공)입니다. 에러 처리 미들웨어를 직접 연결하지 않아도 기본적으로 익스프레스가 에러를 처리하긴 합니다. 하지만 실무에서는 직접 에러 처리 미들웨어를 연결해 주는 것이 좋습니다. 에러 처리 미들웨어는 특별한 경우가 아니면 가장 아래에 위치하도록 합니다.

 

미들웨어를 통해 요청과 응답에 다양한 기능을 추가할 수 있습니다.

사실 이미 많은 사람이 유용한 기능들을 패키지로 만들어뒀습니다. 실무에 자주 사용하는 패키지들을 설치해 봅시다.

dotenv를 제외한 다른 패키지는 미들웨어입니다. dotenv는process.env를 관리하기 위해 설치했습니다.

 

const express = require('express');
const morgan = require('morgan');
const cookieParser = require('cookie-parser');
const session = require('express-session');
const dotenv = require('dotenv');
const path = require('path');

dotenv.config();
const app = express();
app.set('port', process.env.PORT || 3000);

app.use(morgan('dev'));
app.use('/', express.static(path.join(__dirname, 'public')));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser(process.env.COOKIE_SECRET));
app.use(session({
  resave: false,
  saveUninitialized: false,
  secret: process.env.COOKIE_SECRET,
  cookie: {
    httpOnly: true,
    secure: false,
  },
  name: 'session-cookie',
}));

app.use((req, res, next) => {
  console.log('모든 요청에 다 실행됩니다.');
  next();
});

app.js 파일을 이걸로 바꾸어주고,. env 파일도 하나 생성할 겁니다.

설치했던 패키지들을 불러온 뒤 app.use에 연결합니다. req, res, next 같은 것들이 보이지 않아 당황스러울 수도 있는데, 미들웨어 내부에 들어 있습니다. next도 내부적으로 호출하기에 다음 미들웨어로 넘어갈 수 있습니다.

 

6.2.1 morgan

morgan은 Node.js 애플리케이션에서 HTTP 요청 로깅을 도와주는 미들웨어입니다. Express와 같은 웹 프레임워크와 함께 사용되며, 애플리케이션으로 들어오는 요청에 대한 로그를 생성하여 개발 및 디버깅을 용이하게 합니다.

 

morgan 연결 후 다시 접속해 보면 기존 로그 외에 추가적인 로그를 볼 수 있습니다.

요렇게...

 

morgan 미들웨어는 app.use 부분에

app.use(morgan('dev')); 이렇게 사용합니다.

인수로 dev 외에 combined, common, short, tiny 등을 넣을 수 있습니다.

당연히 인수를 바꾸면 로그가 달라지겠죠??

dev 모드 기준으로 GET / 500 7.409 ms - 50은 각각 [HTTP 메서드] [주소] [HTTP 상태 코드] [응답 속도] - [응답 바이트]를 의미합니다. 이는 요청과 응답을 한눈에 볼 수 있어 편리합니다.

 

  • HTTP 요청 로깅: 각 HTTP 요청에 대한 정보를 로그 파일이나 콘솔에 출력합니다.
  • 로그 포맷 지정: 여러 가지 미리 정의된 포맷을 사용하거나 사용자 정의 포맷을 만들어 로그의 형식을 지정할 수 있습니다.
  • 스트림 지정: 로그를 콘솔 외에 파일이나 다른 스트림으로 출력할 수 있습니다.
  • 로깅 수준 조절: 요청의 상태 코드나 응답 시간에 따라 로깅의 수준을 조절할 수 있습니다.

6.2.2 static

static 미들웨어는 정적인 파일들을 제공하는 라우터 역할을 합니다.

app.use('요청 경로', express.static('실제 경로'));
app.use('/', express.static(path.join(__dirname, 'public')));

6.2.3 body-parser

요청의 본문에 있는 데이터를 해석해서 req.body 객체로 만들어주는 미들웨어입니다.

보통 폼 데이터나 AJAX 요청의 데이터를 처리합니다. 단, 멀티파트(이미지, 동영상, 파일) 데이터는 처리하지 못합니다.

body-parser 미들웨어는 다음과 같이 사용합니다.

app.use(express.json());
app.use(express.urlencoded({ extended: false }));

6.2.4 cookie-parser

cookie-parser는 요청에 동봉된 쿠키를 해석해 req.cookies 객체로 만듭니다.

cookie-parser 미들웨어는 다음과 같이 사용합니다.

해석된 쿠키들은 req.cookies 객체에 들어갑니다. 예를 들어 name=zerocho 쿠키를 보냈다면 req.cookies는 { name: 'zerocho' }가 됩니다. 4장이었나 5장에서 cookie 기간을 5분으로 지정했었는데, 5분이 지난, 즉 유효기간이 지난 쿠키는 알아서 걸러냅니다.

 

6.2.5 express-session

세션 관리용 미들웨어입니다. 로그인 등의 이유로 세션을 구현하거나 특정 사용자를 위한 데이터를 임시적으로 저장해 둘 때 매우 유용합니다. 세션은 사용자별로 req.session 객체 안에 유지됩니다.

app.use(session({
  resave: false,
  saveUninitialized: false,
  secret: process.env.COOKIE_SECRET,
  cookie: {
    httpOnly: true,
    secure: false,
  },
  name: 'session-cookie',
}));

 

6.3 Router 객체로 라우팅 분리하기

app.js에서 app.get 같은 메서드가 라우터 부분입니다.

라우터를 많이 연결하면 app.js 코드가 매우 길어지므로 익스프레스에서는 라우터를 분리할 수 있는 방법을 제공합니다. routes 폴더를 만들고 그 안에 index.js와 user.js를 작성합니다.

routes/index.js
routes/user.js

이렇게 만들어진 index.js와 user.js를 app.use를 통해 app.js에 연결합니다. 또한, 에러 처리 미들웨어 위에 404 상태 코드를 응답하는 미들웨어를 하나 추가합니다.

const path = require('path');

dotenv.config();
const indexRouter = require('./routes');
const userRouter = require('./routes/user');
...
  name: 'session-cookie',
}));

app.use('/', indexRouter);
app.use('/user', userRouter);

app.use((req, res, next) => {
  res.status(404).send('Not Found');
});

app.use((err, req, res, next) => {

서버를 실행한 뒤  localhost:3000과 localhost:3000/user로 접속하면 각각에 해당하는 응답을 받을 수 있습니다.

 

 req.app: req 객체를 통해 app 객체에 접근할 수 있습니다. req.app.get('port')와 같은 식으로 사용할 수 있습니다.\

 req.body: body-parser 미들웨어가 만드는 요청의 본문을 해석한 객체입니다.

 req.cookies: cookie-parser 미들웨어가 만드는 요청의 쿠키를 해석한 객체입니다.

 req.ip: 요청의 ip 주소가 담겨 있습니다.

 req.params: 라우트 매개변수에 대한 정보가 담긴 객체입니다.

 req.query: 쿼리스트링에 대한 정보가 담긴 객체입니다.

 req.signedCookies: 서명된 쿠키들은 req.cookies 대신 여기에 담겨 있습니다.

 req.get(헤더 이름): 헤더의 값을 가져오고 싶을 때 사용하는 메서드입니다.

 

res 객체도 살펴보면

 

 res.app: req.app처럼 res 객체를 통해 app 객체에 접근할 수 있습니다.

 res.cookie(키, 값, 옵션): 쿠키를 설정하는 메서드입니다.

 res.clearCookie(키, 값, 옵션): 쿠키를 제거하는 메서드입니다.

 res.end(): 데이터 없이 응답을 보냅니다.

 res.json(JSON): JSON 형식의 응답을 보냅니다.

 res.locals: 하나의 요청 안에서 미들웨어 간에 데이터를 전달하고 싶을 때 사용하는 객체입니다.

 res.redirect(주소): 리다이렉트 할 주소와 함께 응답을 보냅니다.

 res.render(뷰, 데이터): 다음 절에서 다룰 템플릿 엔진을 렌더링 해서 응답할 때 사용하는 메서드입니다.

 res.send(데이터): 데이터와 함께 응답을 보냅니다. 데이터는 문자열일 수도, HTML일 수도, 버퍼일 수도, 객체나 배열일 수도 있습니다.

 res.sendFile(경로): 경로에 위치한 파일을 응답합니다.

 res.set(헤더, 값): 응답의 헤더를 설정합니다.

 res.status(코드): 응답 시의 HTTP 상태 코드를 지정합니다.

 

req res 객체의 메서드는 다음과 같이 메서드 체이닝(method chaining)을 지원하는 경우가 많습니다. 메서드 체이닝을 활용하면 코드 양을 줄일 수 있습니다.

res
  .status(201)
  .cookie('test', 'test')
  .redirect('/admin');

7장. MySQL

7.1 데이터베이스란?

데이터베이스는 관련성을 가지며 중복이 없는 데이터들의 집합입니다. 이러한 데이터베이스를 관리하는 시스템을 DBMS(DataBase Management System)(데이터베이스 관리 시스템)라고 합니다.

보통 서버의 하드 디스크나 SSD 등의 저장 매체에 데이터를 저장합니다. 저장 매체가 고장 나거나 사용자가 직접 데이터를 지우지 않는 이상 계속 데이터가 보존되므로 서버 종료 여부와 상관없이 데이터를 계속 사용할 수 있습니다.

 

사실 저는 지금 데이터베이스 선이수해서 듣고 있습니다 ㅎㅎ...

7.2 MySQL 설치하기

7.2.1 Windows

 

저는 윈도우라 윈도우만 기술하겠습니다..

MySQL의 공식 사이트 - https://dev.mysql.com/downloads/installer/  에서 Download 버튼을 눌러 인스톨러 내려받습니다.

 

용량이 적은 mysql-installer-web-community를 내려받습니다. 로그인할 필요 없이 No thanks, just start my download. 를 클릭하면 다운로드가 시작됩니다.

내려받은 파일을 실행하면 MySQL Installer가 화면에 나타납니다. 설치 진행 중에 Choosing a Setup Type 부분에서 Custom을 선택한 후 Next 버튼을 누릅니다.

 

ySQL Installer가 기본적으로 설치하는 제품이 전부 필요한 것은 아니므로 MySQL Server와 MySQL Workbench만 선택해 설치합니다. Available Products:에서 X86과 X64 중 현재 자신의 운영체제에 맞는 MySQL Server와 MySQL Workbench를 골라 Products/Features To Be Installed:로 옮긴 후 Next 버튼을 누릅니다.

 

여기서 중요!!

Available Products:에서 X86과 X64 중 현재 자신의 운영체재에 맞는 것을 고를 텐데

현재 거의 모든 사람들은 대부분 64비트 체제이겠죠? 64비트는 X64를 해주셔야 합니다!

Execute 버튼을 눌러 워크벤치를 내려받습니다.

설치 완료 후 Next 버튼을 눌러 넘어갑니다. 설치에 필요한 파일들을 Execute 버튼을 눌러 설치합니다.

설치 완료 화면입니다.

설치를 다 완료하셨으면 MySQL 기본 설정을 해보겠습니다.

 

Type and Networking 메뉴에서는 별도 클릭 없이 Next 버튼을 눌러 넘어갑니다. Authentication Method 메뉴에서는 Use Legacy Authentication Method를 선택합니다.

 

비밀번호 설정 화면이 나오면 비밀번호를 설정합니다. 이 비밀번호를 기억하고 있어야 나중에 MySQL에 접속할 수 있습니다. 혹시 Next 버튼이 보이지 않는다면 Alt+N 단축키로 다음 화면으로 넘어갈 수 있습니다. 비밀번호를 설정한 후에는 계속 Next 버튼을 눌러 기본 설정 그대로 사용하면 됩니다.

Windows Service 메뉴는 Next 버튼을 눌러 넘어갑니다. 마지막으로, 다음과 같은 설정 적용 화면이 나옵니다. Execute 버튼을 눌러 모든 설정을 적용하면 됩니다.

넘기고 Finish 버튼 눌러주면 설정 완료...

 

Note : Starting Server에서 막힌다면?

Apply Configuration을 진행하는 도중 Starting Server에서 넘어가지 못하고 에러가 발생한다면 MySQL 설치 경로나 사용자 계정 이름, 컴퓨터 이름 등에 한글이 포함되어 있는 것은 아닌지 살펴봐야 합니다. 한글이 있다면 해당 부분을 영어로 바꾸고 다시 해보기!

 

이제 MySQL에 접속해 보겠습니다.

MySQL이 설치된 폴더로 이동한 후, 명령 프 롬프트를 통해 MySQL에 접속합니다. 설치된 폴더 경로는 사용자마다 다를 수 있습니다. 이 책의 경우에는 C:\Program Files\MySQL\MySQL Server 8.0/bin입니다.

 

프롬프트가 mysql>로 바뀌었다면 성공입니다.

 

7.4.1 데이터베이스 생성하기

프롬프트로 MySQL에 들어가서

이렇게 작성해 줍시다.

CREATE SCHEMA 뒤에 DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci를 붙여 한글과 이모티콘을 사용할 수 있게 만듭니다. utf8mb4여야 데이터베이스에서 한글과 이모티콘을 사용할 수 있고, COLLATE는 해당 CHARACTER SET을 어떤 형식으로 정렬할 것인지를 의미합니다. 

 

CREATE SCHEMA와 같이 MySQL이 기본적으로 알고 있는 구문은 예약어라고 합니다. 예약어는 소문자로 써도 되지만, 가급적 대문자로 쓰는 것이 좋습니다. nodejs와 같은 사용자가 직접 만든 이름과 구분하기 위해서입니다.

 

사실 저는 귀찮아서 공부할 때 소문자로 자주 작성하는데, 이걸 공부하고 나서 다시 대문자로 작성하는 버릇을 들여보겠습니다..

 

7.4.2 테이블 생성하기

MySQL 프롬프트에 다음과 같이 입력합니다(오타가 나지 않도록 주의해야 합니다).

한 줄로 적어도 되지만, 보기 불편하므로 Enter를 누른 후 줄을 바꿔서 입력하는 것이 좋습니다.

세미콜론(;)을 입력하기 전까지는 실행되지 않습니다.

 

명령어를 살펴봅시다.

CREATE TABLE [데이터베이스명.테이블명]은 테이블을 생성하는 명령어입니다. CREATE TABLE nodejs.users를 입력했으므로 nodejs 데이터베이스 내에 users 테이블을 생성하는 것입니다. 아까 use nodejs; 명령어를 실행했으니 CREATE TABLE users처럼 데이터베이스명은 생략해도 됩니다.

 

각각의 컬럼 이름 옆에는 INT, VARCHAR, TINYINT 등이 적혀 있습니다. 이는 컬럼의 자료형을 뜻합니다.

 

 INT는 정수를 의미합니다. 소수까지 저장하고 싶다면 FLOAT이나 DOUBLE 자료형을 사용하면 됩니다.

 VARCHAR(자릿수) 외에도 CHAR(자릿수)라는 자료형도 있습니다. CHAR는 고정 길이이고, VARCHAR는 가변 길이입니다. 예를 들어 CHAR(10)이면 반드시 길이가 10인 문자열만 넣어야 하고, VARCHAR(10)일 경우에는 길이가 0~10인 문자열을 넣을 수 있습니다. CHAR에 주어진 길이보다 짧은 문자열을 넣는다면 부족한 자릿수만큼 스페이스가 채워집니다.

 TEXT는 긴 글을 저장할 때 사용하며, VARCHAR와 헷갈릴 수 있습니다. 수백 자 이내의 문자열은 보통 VARCHAR로 많이 처리하고, 그보다 길면 TEXT로 처리하곤 합니다.

 TINYINT는 -128부터 127까지의 정수를 저장할 때 사용합니다. 1 또는 0만 저장한다면 불 값(Boolean)과 같은 역할을 할 수 있습니다.

 DATETIME은 날짜와 시간에 대한 정보를 담고 있습니다. 날짜 정보만 담는 DATE와 시간 정보만 담는 TIME 자료형도 있습니다. 이외에도 많은 자료형이 있으나 이 정도가 자주 쓰입니다.

 

자료형 뒤에도 NOT NULL, NULL 등 옵션이 붙어있습니다.

 

 NULL NOT NULL은 빈칸을 허용할지 여부를 묻는 옵션입니다. comment 컬럼만 NULL이고, 나머지는 모두 NOT NULL입니다. 자기소개를 제외한 나머지 컬럼은 반드시 로우를 생성할 때 데이터를 입력해야 합니다.

 id 컬럼에는 추가로 AUTO_INCREMENT가 붙어 있습니다. 숫자를 저절로 올리겠다는 뜻입니다. 예를 들어 처음에 Zero라는 사람의 데이터를 넣으면 MySQL은 알아서 id로 1번을 부여합니다. 다음에 Nero라는 사람의 데이터를 넣으면 자동으로 id 2번을 부여합니다. 이를 가능하게 하는 옵션이 AUTO_INCREMENT입니다.

 UNSIGNED는 숫자 자료형에 적용되는 옵션입니다. 숫자 자료형은 기본적으로 음수 범위를 지원합니다. 예를 들어 INT는 -2147483648~2147483647까지의 숫자를 저장할 수 있습니다. 만약 UNSIGNED가 적용되어 있다면 음수는 무시되고 0~4294967295까지 저장할 수 있습니다. FLOAT DOUBLE에는 UNSIGNED 적용이 불가능합니다. 나이처럼 음수가 나올 수 없는 컬럼은 체크해 두는 것이 좋습니다.

 ZEROFILL은 숫자의 자릿수가 고정되어 있을 때 사용할 수 있습니다. 가끔 자료형으로 INT 대신 INT(자릿수)처럼 표현하는 경우가 있습니다. 이때 ZEROFILL을 설정해 둔다면 비어 있는 자리에 모두 0을 넣습니다. 예를 들어 INT(4)인데 숫자 1을 넣었다면 0001이 되는 식입니다. 실습 예제에서는 age 컬럼에 UNSIGNED 옵션만 주었습니다.

 

만들어진 테이블을 확인하는 명령어는 DESC 테이블명입니다.

테이블을 잘못 만들었을 경우 DROP TABLE [테이블명] 명령어를 입력하면 제거되고, 제거 후 다시 테이블을 생성하면 됩니다.

7.5 CRUD 작업하기

CRUD는 Create, Read, Update, Delete의 첫 글자를 모은 두문자어로, 데이터베이스에서 많이 수행하는 네 가지 작업을 일컫습니다. 그 방법만 익혀도 웬만한 프로그램은 다 만들 수 있을 정 도로 CRUD 작업은 많이 사용됩니다. SQL문 위주로 진행하지만, SQL에 익숙하지 않다면 워크벤치로 진행해도 됩니다.

7.5.1 Create(생성)

Create(생성)는 데이터를 생성해서 데이터베이스에 넣는 작업입니다. users 테이블에 데이터를 몇 개 넣어보겠습니다. use nodejs; 명령어를 사용했다면 테이블명으로 nodejs.users 대신 users만 사용해도 됩니다.

comments 테이블에도 데이터를 넣어보겠습니다.

 

7.5.2 Read(조회)

Read(조회)는 데이터베이스에 있는 데이터를 조회하는 작업입니다.

이 구문이 users 테이블의 모든 데이터를 조회하는 SQL문이며 SELECT * FROM [테이블명] 형식입니다.

comments 테이블도 확인해 주고~

 

특정 컬럼만 조회할 수도 있습니다. 조회를 원하는 컬럼을 SELECT 다음에 넣으면 됩니다.

이름과 결혼 여부만 조회하고 싶다면 

이렇게 작성해 주시면 됩니다.

 

WHERE 절을 사용하면 특정 조건을 가진 데이터만 조회할 수도 있습니다. 다음은 결혼을 했고 나이가 30세 이상인 사용자를 조회하는 SQL문입니다. AND로 여러 조건을 묶어줄 수도 있습니다.

AND가 조건들을 모두 만족하는 데이터를 찾는다면, OR는 조건들 중 어느 하나라도 만족하는 데이터를 찾습니다.

7.5.3 Udate (수정)

Update(수정)는 데이터베이스에 있는 데이터를 수정하는 작업입니다. 일부 데이터를 수정해 보겠습니다.

수정 명령어는 UPDATE [테이블명] SET [컬럼명=바꿀 값] WHERE [조건]입니다. 위의 명령어처럼 WHERE id = 2 id 2인 로우(nero)의 컬럼을 수정할 수 있습니다. users 테이블에서 id 2인 로우의 comment를 주어진 내용으로 바꾸라는 뜻입니다. 조건도 AND OR로 여러 개를 동시에 사용할 수 있습니다.

7.5.4 Delete(삭제)

Delete(삭제)는 데이터베이스에 있는 데이터를 삭제하는 작업입니다. 직접 로우를 제거해 보겠습니다.

삭제 명령어는 DELETE FROM [테이블명] WHERE [조건]입니다. 조건이 WHERE id = 2인데, 이는 users 테이블에서 id 2인 로우(nero)를 제거하라는 뜻입니다. 삭제 조건 역시 AND OR로 여러 개를 동시에 사용할 수 있습니다.

7.6 시퀄라이즈 사용하기

시퀄라이즈 실습을 위한 새 프로젝트를 생성하겠습니다. learn-sequelize 폴더 안에 생성합니다.

이제 다 아시죠? npm init

sequelize-cli는 시퀄라이즈 명령어를 실행하기 위한 패키지이고, mysql2는 MySQL과 시퀄라이즈를 이어주는 드라이버입니다. mysql2 자체는 데이터베이스 프로그램이 아니므로 오해하면 안 됩니다.

설치 완료 후 sequelize init 명령어를 호출하면 됩니다. 전역 설치 없이 명령어로 사용하려면 앞에 npx를 붙이면 됩니다.

7.6.1 MySQL 연결하기

이제 시퀄라이즈를 통해 익스프레스 앱과 MySQL을 연결해야 합니다. app.js를 생성하고 익스프레스와 시퀄라이즈 연결 코드를 작성해 봅시다.

MySQL과 연동할 때는 config 폴더 안의 config.json 정보가 사용됩니다. 다음과 같이 수정합니다. 자동으로 생성한 config.json에 operatorAliases 속성이 들어 있다면 삭제합니다.

 

development.password development.database를 현재 MySQL 커넥션과 일치하게 수정하면 됩니다. test production 쪽은 각각 테스트 용도와 배포 용도로 접속하기 위해 사용되는 것이므로 여기서는 설정하지 않습니다.

password 속성에는 여러분의 MySQL 비밀번호를 입력하고, database 속성에는 nodejs를 입력하세요.

 

npm start로 서버를 실행하면 3001번 포트에서 서버가 돌아갑니다. 라우터를 만들지 않았기에 실제로 접속할 수는 없지만 다음과 같은 로그가 뜹니다.

마지막 두 로그가 뜨면 연결이 성공한 것입니다. 연결에 실패한 경우 에러 메시지가 로깅됩니다. 에러는 주로 MySQL 데이터베이스를 실행하지 않았거나(Error: connect ECONNREFUSED 127.0.0.1:3306), 비밀번호가 틀렸거나(Error: Access denied for user 'root'@'localhost' (using password: YES)), 존재하지 않는 데이터베이스를 적었을 때(Error: Unknown database) 발생합니다.

 

반응형