Express 구조
express-generator, 미들웨어, 라우터
express
- 내가 만들고 싶은 웹 서비스 구현을 위해 필요한 모든 일을 틀 안에서 할 수 있음.
구조
- express-generator를 global로 설치
npm install express-generator -g
⚠️에러 발생
→ express : 이 시스템에서 스크립트를 실행할 수 없으므로 파일을 로드할 수 없습니다.
해결 (Window)
- Powershell을 관리자로 접속하여 실행 후 다음 코드 작성.
- Powershell 아이콘을 우클릭 후, 관리자로 실행 클릭.
- Get-ExecutionPolicy 입력하면 Restricted라고 뜰 것이다.
- Set-ExecutionPolicy RemoteSigned 입력하여 변경을 y로 허락하고
- Get-ExecutionPolicy 다시해보면 RemoteSigned로 변경된 것을 확인할 수 있다.
Get-ExecutionPolicy //Restricted 결과값 Set-ExecutionPolicy RemoteSigned /* 실행 규칙 변경 실행 정책은 신뢰하지 않는 스크립트로부터 사용자를 보호합니다. 실행 정책을 변경하면 about_Execution_Policies 도움말 항목(https://go.microsoft.com/fwlink/?LinkID=135170)에 설명된 보안 위험에 노출될 수 있습니다. 실행 정책을 변경하시겠습니까? [Y] 예(Y) [A] 모두 예(A) [N] 아니요(N) [L] 모두 아니요(L) [S] 일시 중단(S) [?] 도움말 (기본값은 "N"): y */ Y Get-ExecutionPolicy //RemoteSigned 로 변경 완료
- Powershell 아이콘을 우클릭 후, 관리자로 실행 클릭.
- express를 입력하면 다음과 같이 뜨고, 📁bin, public,routes, views 📄app.js, package.json 이 생성되었을 것이다.
express
warning: the default view engine will not be jade in future releases
warning: use `--view=jade' or `--help' for additional options
create : public\
create : public\javascripts\
create : public\images\
create : public\stylesheets\
create : public\stylesheets\style.css
create : routes\
create : routes\index.js
create : routes\users.js
create : views\
create : views\error.jade
create : views\index.jade
create : views\layout.jade
create : app.js
create : package.json
create : bin\
create : bin\www
install dependencies:
> npm install
run the app:
> SET DEBUG=express-demo:* & npm start
📁bin 📄www.js
var app = require('../app');
var debug = require('debug')('express-demo:server');
var http = require('http');
/* express에서 node.js의
http내장 모듈을 사용함을 알 수 있음 */
//포트 설정
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
/**
* Create HTTP server.
*/
var server = http.createServer(app);
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
📄app.js
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
//웹사이트가 사용자 정보를 저장하고 불러올 때 사용하는 "쿠키"를 다룰 수 있게 해주는 모듈
var logger = require('morgan');
//morgan: 웹 서버에 요청이 들어올 때마다 그 정보를 로그로 기록하게 해주는 모듈
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
/*
views
: HTML 파일 같은 템플릿 파일이 어디에 있는지 설정/
여기서는 views 폴더에 있다고 설정함
view engine
: 뷰 엔진은 템플릿 파일을 실제 HTML로 변환해주는 역할
Jade라는 뷰 엔진을 사용
*/
//미들웨어 설정
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
/*
logger('dev')
: 요청이 들어올 때마다 그 정보를 콘솔에 출력해주는 역할
express.json()
: JSON 형식으로 된 요청의 데이터를 처리할 수 있게 도와줌.
express.urlencoded({ extended: false })
: 폼(form)으로 제출된 데이터를 처리할 수 있게 도움.
cookieParser()
: 쿠키를 다룰 수 있게 해주는 미들웨어
express.static(path.join(__dirname, 'public'))
: public 폴더에 있는 파일들을 정적 파일(이미지, CSS 파일 등)로 제공
*/
app.use('/', indexRouter);
app.use('/users', usersRouter);
/* 경로를 연결하여 각각 라우터로 처리
users.js
-----------------
var express = require('express');
var router = express.Router();
/* GET users listing. */
router.get('/', function(req, res, next) {
res.send('respond with a resource');
});
module.exports = router;
*/
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
})
// 요청한 페이지를 못 찾을 때 404 에러를 발생
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
라우터?
웹 애플리케이션에서 특정 URL 경로에 따라 어떤 동작을 할지 결정해주는 기능.웹사이트에서 주소(경로)를 입력했을 때 그 주소에 맞는 페이지를 보여주거나, 특정 작업을 수행하는 역할을 함.
미들웨어? (express)
- 웹 프레임워크(Express) 에서 서버로 들어오는 요청(request)과 서버가 응답(response)을 보내기 전에 중간에서 그 요청과 응답을 처리하는 함수
- ex) 사용자가 로그인했는지 확인하거나, 데이터를 가공하거나, 요청에 대한 로그를 남기는 등 다양한 작업을 수행함. <사용자가 서버에 요청한 후, 그에 대한 응답을 보내기 전에 행하는 작업들. >
- 일반적인 미들웨어의 역할
-
데이터 변환 및 통신: 서로 다른 시스템이 데이터를 주고받을 때, 그 데이터 형식을 맞추고 올바르게 전달되도록 하는 역할.
ex) a시스템이 XML 형식, B시스템이 JSON 형식을 사용하면, 미들웨어가 이들 간의 형식 변환을 담당함.
- 서비스 통합: 여러 개의 독립적인 시스템이나 애플리케이션을 하나의 통합된 서비스로 묶어줌 ex) 고객 관리 시스템(CRM)과 주문 관리 시스템(OMS)을 통합하여 하나의 포털에서 접근g하게 함.
- 보안 관리: 데이터가 안전하게 전송되도록 암호화, 접근 제어를 통해 권한이 없는 사용자가 데이터에 접근하지 못하도록 함.
- 로깅 및 모니터링: 시스템 간의 통신이나 작업을 기록하여 추적하거나, 시스템 상태를 모니터링하는 기능을 하기도 함.
- 메시지 큐: 시스템 간 메시지 전달을 관리하는 메시지 큐를 제공함. ex) A 시스템이 작업을 요청 시, 미들웨어가 그 메시지를 대기열에 추가하고, B 시스템이 그 메시지를 처리할 수 있게 관리 함.
-