bin/www
http모듈에 express 모듈을 연결하고, 포트 지정하는 부분
콘솔 명령어로도 만들 수 있으며 그때, 주석처리된 #!/usr/bin/env node이 사용됨
전역 설치 후 rimraf와 같이 명령어로도 실행할 수 있음
var app=require('../app');
var debug=require('debug')('learn-express:server');
var http=require('http');
app, debug, http 모듈 가져옴
var port=normalizePort(process.env.PORT || '3000');
app.set('port',port);
실행될 포트 지정, 기본 값 3000
데이터를 app.set으로 지정하고, app.get으로 가져올 수 있음
var server=http.createServer(app);
http.createServer에 불러온 app 모듈을 넣어 app 모듈이 createServer 메서드의 콜백 함수 역할을 하게 함
server.listen(port);
server.on('error',onError);
server.on('listening',onListening);
listen은 http 웹 서버와 동일, 포트 연결 후 서버 실행
미들 웨어
- 요청과 응답의 중간에 위치하며, 라우터와 에러 헨들러가 일종의 미들웨어
- Express의 전부인 셈이며, 요청과 응답을 조작해 기능을 추가하고 Bad Request를 걸러낼 수 있음
- 주로 app.use와 함께 사용되며 app.use의 인자로 들어 있는 함수가 미들웨어
- 미들웨어는 use 메서드로 app에 장착하여, logger('dev')부터 시작해 다른 미들웨어들을 순차적으로 거치고 라우터에서 클라이언트에 응답을 보냄
- 커스텀 미들웨어를 만들 경우 반드시 next()를 해줘서 다음 미들웨어로 넘겨야 함
- 기존의 미들웨어는 내부적으로 next(0를 호출하여 넘어가고 있으며, 이 next()를 통해 흐름을 제어 가능
- next의 인자로는 route나 다른 인자를 넣을 수 있는데 route를 넣으면 특수한 기능 수행
- 이외의 값은 다른 미들웨어를 건너 뛰고 바로 error handler로 이동
- 콘솔의 출력 결과로 나오는 요청 주소, 상태 코드, 응답속도, 응답 바이트 등은 morgan 미들웨어에서 나옴
- 파일이나 데이터베이스에 로그를 남기는 것을 morgan에서도 할 수 있지만, winston 모듈을 더 많이 사용
body-parser
폼 데이터, AJAX를 주로 처리하는 미들웨어
모든 본문을 해석해주는 것은 아니며 multipart/form-data 같은 폼을 통해 전송된 데이터는 해석 불가
cookie-parser
Request에 동봉된 쿠키 해석
static
정적인 파일 제공
Request에 부합하는 정적 파일을 발견한 경우 Response로 해당 파일을 전송
파일을 넘기면 다음 라우터가 실행되지 않고, 에러가 나오면 라우터로 넘김
정적 파일 라우터 기능을 수행하므로, 최대한 위에 배치하여 서버가 쓸데없는 미들웨어 작업을 하는 것을 방지 가능
서비스에 따라서 알맞은 위치를 선택하면 됨
express-session
세션 관리용 미들웨어
로그인 등의 기능 때문에 세션 구현 시 유용
express-session으로 직접 설치하여 사용
인자로 세션에 대한 설정을 받음
세션 관리 시 클라이언트에 세션 쿠키를 보내며, 안전 전송을 위해서는 서명이 필요
쿠키에 대한 옵션은 일반적인 쿠키 옵션과 동일하게 설정 가능
- resave - 요청이 왔을 때 세션에 수정사항이 없더라도 세션 저장 여부 설정
- saveUninitialized - 세션에 저장할 내역이 없더라도 세션 저장 여부 설정, 방문자 추적용으로 종종 사용
- secret - 필수항목, cookie-parser의 비밀키와 동일한 역할
connect-flash
일회성 메세지들을 웹 브라우저에 나타날 때 좋은 편, 직접 설치 필요
cookie-parser, express-session을 사용하므로 이들보다 뒤에 위치
Router 객체
app.js
- 라우터도 일종의 미들웨어로 볼 수 있고, 다른 미들웨어와 다르게 앞에 주소가 붙어 있음
- 라우팅 미들웨어는 첫 인자로 주소를 받고, 특정 주소에 해당 요청이 왔을 때 동작하게 할 수 있음
- use 대신, HTTP 메서드인(get, post, put, patch, delete) 등을 사용 가능하며, 주소와 요청 메서드가 동일할 때 실행됨
route 디렉토리 내부의 js 파일 들의 라우터
- app.use처럼 router 역시 use가 아닌 HTTP 메서드 활용 가능
- router 하나에 여러 미들웨어 부착 가능
- 라우터를 사용하지 않고 app.js에서 기능은 동일하게 사용할 수 있으나, 코드 관리를 위해 라우터를 분리하는 것
- 라우터는 반드시 request에 대한 response나 error handler로 request를 넘겨야 함
- response가 없으면 브라우저가 계속 응답을 기다려서 로딩 로고가 떠 있음
- 라우터를 통해 쿼리스트링 처리도 용이
- response 메서드는 여러 형태가 있음
'Computer Science > Web' 카테고리의 다른 글
무엇이 다른가? HTTP/1.1 vs HTTP/2 (0) | 2021.12.12 |
---|---|
Redirect와 Forward에 대한 간단 비교 (0) | 2020.10.28 |
URI, URL, URN 비교 및 정리 (0) | 2020.05.07 |
PHP] mysql_query와 mysqli_query의 차이, 그리고 mysqli (0) | 2019.05.26 |
HTTP 상태 코드 종류 (0) | 2019.01.26 |