본문 바로가기

Programing/NodeJs

Do it! NodeJs 프로그래밍 - Day 3

제목 가이드 :  [Day3] Do it! NodeJs 프로그래밍 05장

ex) [1일차] Do it! 첫 파이썬 - 01. 컴퓨터야 반가워!

 

1. 공부한 책DB를 검색하여 넣어 주세요.

https://book.naver.com/bookdb/book_detail.nhn?bid=11738465

 

2. 공부한 페이지 : p135 ~ p198

 

3. 공부한 내용 : 

 

05-1. 간단한 웹 서버 만들기

 

먼저 require('http')메소드로 http를 불러온다.

createServer()메소드를 호출하여 웹 서버 객체를 만들고, 그 객체의 listen()메소드를 호출하여 특정 

포트에서 대기하도록 설정한다.

 

[클라이언트가 웹 서버에 요청할 때 발생하는 이벤트 처리하기]

connection :클라이언트가 접속하여 연결이 만들어질 때 발생하는 이벤트

request: 클라이언트가 요청할때 발생하는 이벤트

close: 서버를 종료하는 메소드이다.

 

writeHead(statusCode[,statusMessage][,headers]) : 응답으로 보낼 헤더릏 남든다

write(chunk[,encoding][,callbak]) :응답 본문 데이터를 만든다. 여러번 호출 할 수 있다

end([data][,encoding][,callback]):클라이언트로 응답을 전송한다 파라미터에 데이터가 들어있다면 이 데이터를 

포함시켜 응답을 전송한다. 클라이언트의 요청이 있을 떼 한 번은 호출되어야 응답을 보낸다.

 

[클라이언트에서 요청이 있을때 파일 읽어 응답하기]

require()함수로 fs모듈을 읽어 readFile()메소드로 파일을 읽어들인다. 콜백함수 안에서는 write()메소드를

사용해서 파일 내용을 클라이언트로 전송한다

 

[파일을 스트림으로 읽어 응답보내기]

pipe()메소드로 응답 객체와 연결하여  보낸다

 

[서버에서 다른 웹 사이트의 데이터를 가져와 응답하기]

웹 서버에 요청을 보내는 방식은 get, post,put, delete가 있다.

 

05-2 익스프레스로 웹 서버 만들기

node js에서 서버를 만들 때 http 모듈을 사용하여 만드는 것보다 익스프레스 모듈을 사용하는 것이 편하다

익스프레스의 use 메소드를 사용하면 미들웨어를 등록하여 사용할수 있다.

미들웨어를 통하여 요청이 들어오면 클라이언트로 응답을 할수 있다.

미들웨어는 여러개를 등록할 수 있으며 응답의 여러 메소드를 통해 원하는 값을 전달 하거나 원하는 동작을 할 수 있다.

 

05-3 미들웨어 사용하기

 - static 미들웨어 : 특정 폴더의 파일들을 특정 패스로 접근할 수 있도록 만들어 줌

   예) public 폴더에 있는 모든 파일을 웹 서버의 루트 패스로 접근할 수 있도록 만들고 싶다면

    1) app.use('/public', static(path.join(__dirname, 'public')));

      -> 접속 url : local:포트/public/파일명.html

   2) app.use(static(path.join(__dirname, 'public')));  

      -> 접속 url : local:포트/파일명.html

 - body-parser 미들웨어 : POST로 요청했을 때 요청 파라미터를 파싱하여 요청객체의 body 속성에 넣어줌

   본문인 Body 영역에 요청파라미터가 들어가게됨

 - 라우터 미들웨어 : 요청 url이 무엇인지 일일이 확인해야 하는 번거로운 문제를 해결하는 것

   예) /public/login.html 에서 action="/process/login" 설정한 경우 submit 하면,

      router.route('/process/login').post(function(req, res) { 실행문 } 구문으로 서버에서 응답함

 

 

05-5. 쿠키와 세션 관리하기

 

사용자가 로그인한 상태인지 아닌지 확인하고 싶을 때는 쿠키나 세션을 사용한다.

쿠키는 클라이언트 웹 브라우저에 저장되는 정보이며, 세션은 웹 서버에 저장되는 정보이다.

쿠키 처리하기

쿠키는 클라이언트 웹 브라우저에 저장되는 정보로서 일정 기간 동안 저장하고 싶을 때 사용하고 싶을 때 사용한다.

익스프레스에선 cookie-parser 미들웨어를 사용하면 쿠키를 설정하거나 확인할 수 있다.

클라이언트의 쿠키 정보는 cookies 객체에 들어 있는데 사용자가 응답문서를 조회할 때 쿠키 정보를 볼 수 있도록 처리하는 함수에서 이 쿠키 객체를 응답으로 보낸다. 그러면 클라이언트에서는 쿠키객체를 그대로 전달받게 된다.

세션 처리하기

세션도 상태 정보를 저장하는 역할을 하지만, 쿠키와 달리 서버쪽에 저장된다. 세션을 사용하는 대표적인 예로는 로그인을 했을 때 저장되는 세션을 들 수 있다. 익스프레스에서는 세션을 지원하기 위해 express-session 모듈을 사용한다. 세션을 사용할 때는 쿠키도 같이 사용하므로 cookie-parser모듈도 함께 불러들인다.

로그인 화면에서 로그인하여 세션이 만들어지면 connect.sid 쿠키가 브라우저에 저장된다. connect.sid쿠키는 웹 브라우저에서 세션 정보를 저장할 때 만들어진 것이다. 브라우저마다 이름이 다를 수 있지만 쿠키를 사용해 세션정보를 저장하는 방식은 같다.

 

05-6 파일 업로드 기능 만들기

 

파일을 업로드 할때는 멀티파트(Multipart) 포맷을 사용한다. 

노드에서 multipart를 사용하려면 multer 미들웨어를 사용하고,

POST방식으로 데이터를 전송하므로 body-parser 미들웨어와 파일시스템을 사용하므로 fs모듈을 함께 사용한다. 

npm install multer --save  명령어로 설치.

cors 모듈은 CORS라고 불리는 다중 서버 접속 지원을 위해 사용된다.

multer 미들웨어를 사용할때 미들웨어 사용순서가 중요하다.

body-parser -> multer -> router

 

multer 미들웨어의 주요 메소드는 다음과 같다.

destination(req, file, callback) : 업로드한 파일이 저장될 폴더 지정

filename(req, file, callback) : 업로드한 파일의 이름을 수정

limits : 파일 크기나 파일 개수 등 제한 속성을 설정

 

업로드된 파일은 req.files에 배열로 저장된다.

req.files[index].속성(originalname, filename, mimetype, size 등) 으로 접근이 가능하다.

 

 

## 실습코드 : https://github.com/dlckdgjs89/NodeJS