간단한 웹 서버 만들기
http 모듈
을 사용하면 웹 서버 기능을 담당하는 서버 객체를 만들 수 있다.
const http = require('http');
const server = http.createServer();
const port = 3000;
server.listen(port, () => {
console.log('started server by node.js');
});
- 서버 실행 및 대기에는
listen()
, 종료에는close()
메소드를 호출한다.
웹 서버 요청 이벤트 처리하기
- 연결(
connection
) > 요청(request
) > 종료(close
)
// server가 생성 되었다고 가정 ...
const server = http.createServer();
// ...
server.on('connection', (socket) => {
// ...
});
server.on('request', (req, res) => {
// ...
});
server.on('close', () => {
// ...
});
※ Error: listen EADDRINUSE ~~~
오류는 이미 해당 포트를 사용 중 일 때 발생한다.
- res 객체의
writeHead()
,write()
,end()
메소드로 응답을 보낼 수 있다. (05.example_01.js) - 웹 문서 이외에도 MIME Type 을 설정하면, 이미지나 파일을 브라우저상에 보여줄 수 있다.
- 파일 응답 시, 스트림을 이용하면 더 간단하게 작성할 수 있다. (05.example_02.js)
http 모듈
에 클라이언트 기능도 제공한다. GET과 POST방식 제공. (05.example_03.js)
익스프레스로 웹 서버 만들기
새로운 익스프레스 서버 만들기
express
는 node.js 웹 애플리케이션 프레임워크이다.- 미들웨어 와 라우터 의 조합이다.
외장 모듈
을 이용하여 설치한다.- 05.basic_express - app1.js
> npm init
> npm install express --save
new express()
는 익스프레스 서버 객체 이다.set()
는 웹 서버의 환경을 설정하는 메소드이다. 사용자 정의 속성을 정의할 수 있고, 미리 정해진 속성(port, env, views, view engine)에 의해 설정에 영향을 끼칠 수 도 있다.
미들웨어로 클라이언트에 응답 보내기
use()
를 이용하여 미들웨어를 설정한다.- 노드에서는 미들웨어를 사용하여 필요한 기능을 순차적으로 실행한다.
- ex)
- 요청 -> 미들웨어 0 -> 미들웨어 1 -> 미들웨어 2 -> … -> 미들웨어 n -> 라우터 -> 응답
- 라우터 는 클라이언트의 요청 패스를 보고 요청 정보를 처리할 수 있는 곳으로 기능을 전달해 주는 역할을 한다.
- 05.basic_express - app2.js
여러 개의 미들웨어를 등록하여 사용하는 방법 알아보기
- 여러 개의 미들웨어 사용하고 싶은 경우,
next()
를 호출하여 다음 미들웨어로 처리 결과를 넘겨주어야 한다. - 미들웨어 안에서는 기본적으로 요청을 받는
req 객체
와 응답을 하는res 객체
를 파라미터로 전달받아 사용할 수 있다.
익스프레스의 요청 객체와 응답 객체 알아보기
- 익스프레스에서 사용하는 요청 객체와 응답 객체는 http 모듈에서 시용되는 객체와 동일하다. (But, 몇 가지 메소드가 더 추가되었다.)
메소드 이름 | 설명 |
---|---|
send | HTML, Buffer, JSON 객체, JSON 배열 |
status | 상태 코드 |
sendStatus | 상태 코드 + 상태 메시지 |
redirect | 웹 페이지 강제 이동 |
render | 뷰 엔진에 의한 웹 문서 |
익스프레스에서 요청 객체에 추가한 헤더와 파라미터 알아보기
이름 | 설명 |
---|---|
query | GET 방식으로 전송된 요청 파라미터 |
body | POST 방식으로 전송된 요청 파라미터(body-parser 외장 모듈 추가) |
header | 헤더 |
- 기본적인 요청 파라미터에 대한 확인 여부는 여러 줄이 필요하지만, 익스프레스에서는 간단하게 확인 할 수 있다.
미들웨어 사용하기
- 익스레이스에서 여러 가지 미들웨어를 제공한다.
static 미들웨어
- 특정 폴더의 파일들을 특정 패스로 접근하도록 매핑 해준다.
- 05.basic_express - app6.js
> npm install serve-static --save
body-parser 미들웨어
- POST 방식 요청 시, 파라미터를 확인할 수 있도록 도와준다.
- 05.basic_express - app7.js
> npm install body-parser --save
요청 라우팅 하기
- 요청 url에 대해서 일일이 검증할 필요없이
라우터 미들웨어
를 이용한다.
라우터 미들웨어 사용하기
- 익스프레스 객체에 라우터 객체를 참조하여 사용한다.
- 05.basic_express - app8.js
URL 파라미터 사용하기
- URL 파라미터 : URL 주소의 일부로 들어가는 값
:
키워드를 이용합니다. 이것을 토큰 이라고 부른다.- 05.basic_express - app9.js
오류 페이지 보여 주기
- 특정 페이지가 없다면, 맨 뒤에
all()
메소드를 추가하여 처리하도록 한다. - 05.basic_express - app10.js
express-error-handler 미들웨어로 오류 페이지 보내기
- 예상치 못한 오류가 발생했을 때 처리해주는 미들웨어이다.
- 05.basic_express - app11.js
> npm install express-error-handler --save
토큰과 함께 요청한 정보 처리하기
쿠키와 세션 관리하기
- 로그인 여부 판단에 쿠키 와 세션 을 사용한다.
쿠키 처리하기
쿠키
는 클라이언트 웹 브라우저에 저장되는 정보로서 일정 기간 동안 저장하고 싶을 때 사용한다.- 익스프레스에서는
cookie-parser 미들웨어
를 사용한다. - 05.basic_express - app12.js
> npm install cookie-parser --save
세션 처리하기
세션
은 쿠키 와 달리 서버에 저장된다.세션
에 따른 제한된 페이지를 설정하기에 적합하다.세션
이 만들어지면, connect.sid 쿠키 가 만들어진다.- express-session API 참고
- 05.basic_express - app13.js
> npm install express-session --save
파일 업로드 기능 만들기
- 외장 모듈 을 사용하여 파일을 업로드 할 수 있다.
멀티 파트 포멧
으로 된 파일 업로드 기능을 사용하여 파일 업로드 상태 등을 확인 가능하다.multer 미들웨어
로 파일을 업로드 할 수 있다.
> npm install multer --save
- POST방식으로 보내기 때문에 body-parser 미들웨어 를 함께 사용한다.
- 05.basic_express - app14.js
속성 | 설명 |
---|---|
destination | 폴더 지정 |
filename | 파일 이름 변경 |
limits | 파일 크기나 갯수 제한 설정 |
multer 미들웨어
사용 시, 미들웨어 순서가 중요하다. ( body-parser -> multer -> route )