4장 http모듈로 웹 서버만들기

정규준·2020년 5월 19일
0

4.1 요청과 응답의 이해

=>요청과 응답을 하기 위해 각각의 작업을 처리하는 곳을 서버와 클라이언트라고 함.
일반적으로, 클라이언트에서 서버로 요청을 보내고 클라이언트에서 읽은 뒤 응답을 보내는 형식이다.

server1.js

const http = require('http')

http.createServer((req, res) => {
	res.write('<h1>Hello Node..</he1>')
  res.end('<p>Hello Server..</p>')
 }).listen(8080, () => {
 	console.log('8080포트에서 서버 대기중...')
 })

http모듈을 사용해서 웹브라우저의의 요청을 처리할 수 있음.

http모듈의 createServer 메서드가 있고, request(요쳥)/response(응답) 매개변수를 받을 수 있음.

listen 메서드에 공개할 포트를 넘겨주면 연결이되어 콜백함수에서 결과를 받을 수 있음.

res.write, res.end의 메서드 경우는 write는 클라이언트로 보낼 데이터이며 end는 클라이언트에 응답을 종료하는 것을 말함.

다음 실행 결과 문서에 출력되는 것을 확인할 수 있음.

다음은 html 파일을 읽어서 응답하는 코드이다.

server2.html

<!DOCTYPE html>
<html>
	<head>
    	<meta charset = "utf-8"/>
        <title>Node.js 웹 서버</title>
    </head>
    <body>
    	<h1>Node.js 웹 서버</h1>
        <p>~~~~~~</p>
    </body>
</html>

server2.js

const http = require('http')
const fs = require('fs')

http.createServer((req, res) => {
	fs.readFile('./server2.html', (e, d) => {
    if(e) {
    throw err
    }
    res.end(d)
  })
}).listen(8081, () => {
  console.log('8081번 포트에서 대기중..')
})

요청이 들어오면 fs 모듈로 html 파일을 읽음.

data 변수로 받은 버퍼를 그대로 end 메서드로 넘겨주면 됨.

4.2 쿠키와 세션 이해

복수의 클라이언트를 기억하여 서로 다르게 응답하는 것을 확인할 수 있음. 그것을 간단한 용어로 쿠키 '키-값' 쌍으로 표시함.

쿠키는 요청과 응답의 각각 헤더 부분에 저장됨.

서버에서 쿠키가 오면 브라우저는 쿠키를 저장하였다가 요청 시 쿠키를 보내줌. 서버는 요청의 쿠키를 읽어서 클라이언트를 파악함.

따라서 클라이언트는 따로 처리를 하지 않고, 서버에서는 브라우저로 보낼때만 사용함.

server3.js

const http = require('http')

const parseCookies = (cookie ='') => {
	return cookie.split(';')
    	.map(v => v.split('='))
        .map(([k, ...vs]) => [k, vs.join('')])
        .reduce((acc, [k, v]) => {
        	acc[k.trim()] = decodeURIComponent(v)
            return acc
            }, {})
}

const server = http.createServer((req, res) => {
	const cookies = parseCookies(req.headers.cookie)
    console.log(req.url, cookies)
    
    res.writeHead(200, {'Set-Cookie': 'mycookie=tests'})
    res.end('Hello Cookie')
}).listen(8082)

server.on("listening", () => {
	console.log("listen 8082");
});

parseCookies 함수 같은 경우 name=jeong; age=27처럼 문자열 형식으로 오는 쿠키를 객체로 바꾸어주는 함수이다.

응답 시에는 헤더에 쿠키를 기록해야하므로 res.writeHead 메서드를 사용함.

200은 서버 통신의 상태값을 의미함. 404는 그와 반대의 의미를 지님. 그다음 인자는 헤더의 내용을 입력함.

'Set-Cookie'는 브라우저한테 임의 값의 쿠키를 저장하라는 의미를 뜻함.

여기서 브라우저 파비콘이 html에 정의되지 않으면 서버로 파비콘 정보요청을 추가로 보냄.

  • 파비콘(favicon)
    웹페이지에 접속했을때, 상단 탭에 보여지는 아이콘을 말함. 즐겨찾기에 웹피이지를 등록할때도 사용됨. 간단하게 웹사이트를 대표하는 로고 개념과 비슷하여 사이트의 성격이 보여짐.

이후 내용들은 다음 시간에..

profile
JeongGJ__K

0개의 댓글