Node.js 교과서'라는 책을 통하여 공부.
22.01.09(일) ~ 22.01.011(화)까지 공부한 내용을 기록.
170p ~ 198p
요즘 멘토링 수업이랑 파트타임때문에 바빠서 공부할 시간이 별로 없었지만 최대한 시간을 내보려고 노력해 봤다. 저번까지는 기본적인 개념과 모듈들을 배웠는데 4장부터 직접 서버를 열어보기 때문에 무척 기대됐는데, 기대만큼 공부 할 수 없어서 조금 아쉬웠다. 지금도 일 끝나고 왔는데 무척 피곤하지만 후딱 정리해놓고 자야지 마음이 편할 것 같다!
# 요청과 응답, 본격적인 http 시작
##http모듈을 이용하여 서버 만들기
const http = require('http');
http.creatServer( (req,res) => {
})
.listen(8080, ()=> {
console.log("서버 열었음! 요청 기다리는 중")
}):
말 그대로 http모듈을 이용해서 위와 같이 코드를 작성하면 서버가 만들어진다. 나만의 작은 서버라고 할까..? 당연스럽게도 req(request)는 클라이언트가 서버로 요청을 보내는 것이고, res(response)는 서버가 클라이언트로 응답을 하는 것이다. 한 요청에는 반드시 하나의 응답을 보내줘야한다고 얼핏 들은 것 같다. 이제 저 안에다가 코드를 적을때는 req.[####]를 활용해서 클라이언트가 보낸 것에 대한 여러 정보를 가져 올 수 있었다. 그리고 res.[####]을 사용하여 다시 응답을 내보냈다.
이제 listen을 통하여 포트번호를 할당하면 된다.
## 요청에 응답하기
const http = require('http');
http.creatServer( (req,res) => {
res.writeHead(200, {'Content-Type' : 'text/html; charset=utf-8' }); //응답에 헤드에는 응답에 대한 여러 정보가 들어있다.
res.write('<h1>Hello Node~</h1>');
res.end("<div> last tag! </div>"); // 항상 end를 통해서 마지막임을 알려야 한다고 한다.
// 이렇게 하나하나 보내면 어느세월에 보낼까~ 앞에서 fs모듈을 이용한 것처럼 파일 시스템을 이용하여 html파일을 통째로 보내줄 수 있다.
})
.listen(8080, ()=> {
console.log("서버 열었음! 요청 기다리는 중")
}):
## 파일을 통째로 보내버리기
const http = require('http');
const fs = require('fs').promise;
http.creatServer( (req,res) => {
try {
const data = awiat fs.readFile('./server2.html'); // 파일이 받아지면 다음이 실행 될 수 있도록 awiat사용!
res.writeHead(200, { 'Content-Type' : 'text/html; charset=utf-8'});
res.end(data); // 이렇게 받아서 보내버리면 된다.
} catch (error) { // try-catch로 에러 처리 생활화!! 특히 노드에서는 중요
res.writeHead(500, { 'Content-Type' : 'text/plain; charset=utf-8'}); //에러를 알리고
res.end(error.message);
}
})
.listen(8080, ()=> {
console.log("서버 열었음! 요청 기다리는 중")
}):
이런 식으로 파일을 한번에 보내버리면 된다. html코드를 서버에 따로 작성해보고 ! 개발자 도구에서 Network를 찍어보면 파일이 넘어오는걸 볼 수 있다!
#RESTful 하게 서버 만들기
##req.method와 req.url을 통해 분기처리하기!
이쪽은 코드가 너무 길어져서, 조금 조금 요약해서 써보겠다. 전체 코드는 적지 않을 예정!
사실 옛날에 장고 얼추 만져보고, node진짜 조금 해봤을때 여기부터 손 놨던 것 같다. 아는데 모르겠고 헷갈렸는데 이게 처음부터 차근이 보니까 사실 별거 아닌거 같더라는 생각이 든다.
try {
if(req.method === 'GET') { // 어떤 요청인지를 1번으로 확인 후 if문으로 분기처리
if ( req.url === '/' ) { // GET이고 메인페이지이면
const data = await fs.readFile('./myWebPage.html');
res.writeHead(200, { 'Content-Type' : 'text/html; charset-utf-8'}); //헤드에 정보 적고
res.end(data); // 보내버리기
} else if( req.url === '/about') { // about페이지 이면 ?!
const data =await fs.readFile('./about.html');
res.writeHead(200, { 'Content-Type' : 'text/html; charset-utf-8'}); //헤드에 정보 적고
res.end(data); // 보내버리기
// 이런식으로 분기처리해주면 됨.. 진자 별거 없었다!
}
} else if( req.method === 'POST') {
// ...
// ...
} else if ( req.method === "DELETE") {
// ...
// ...
}
res.writeHead(404);
return res.end('NOT FOUND');
} catch(err) {
}
이렇게 아직은 간단한 거여서 그런지 모르겠지만 method가 뭔지 한번 봐주고 url 주소 봐주고 그에 맞는 것을 작업해주면 되는거 같다.
사실 그 다음 예제는 POST PUT DELETE를 어떻게 다루는지도 나오는데, 그냥 알맞은 작업을 해주면 되는거 같아서 이것만 정리한다.
#Cookie와 Session알아보기
쿠키랑 세션이 뭔지는 얼추 알았다. 그냥 너무 한번 보낸 정보들 또 보낼 필요없으니까 가지고 있는 개념...? 아니면 로그인 유지시켜주거나 뭐 그렇게 사용되는걸로 알고 있었다. 학교포털도 맨날 1시간쯔음 되면 세션 만료 됐다고 재로그인 할거냐고 물었는데 그것도 대충 어떻게 돌아가는지 알았다. 위대한 node가 간단히 해주는거였다!!
## 코드로 봐보기 , 'Set-Cookie'
큰틀은 res헤더에 쿠키를 넣어 보내면 이제 클라이언트는 그 다음부터 서버랑 네트워킹할때 쿠키를 알아서 혼자 보내준다. 그리고 서버에서는 그 쿠키의 만료시간을 정할 수 있다. 초단위도 가능했다! Max-age를 사용하면!
const http = require('http');
http.creatServer( (req,res) => {
res.writeHead(200, { 'Set-Cookie' : 'mycookie=test' }); // [하고싶은거] = [하고싶은거] 로 셋 쿠키에 넣어주면 됐다!
res.end("WOW COOKIE!");
})
.listen(8080, ()=> {
console.log("서버 열었음! 요청 기다리는 중")
}):
이제 다음 응답 부터는 쿠키에서 찾아 원하는 값 뽑아오면 된다!
cookies.[원하는값]
'Set-Cookie': `name=${encodeURIComponent(name)}; Max-age=1; Expires=${expires.toGMTString()}; HttpOnly; Path=/`
이제 이렇게 쿠키에 속성을 주는데 Expires는 분단위로 시간 줄 수 있는거 같았고, Max-age는 초단위다 그리고 우선순위는 Max-age여서 위와같이 적으면 Max-age만 적용된다. 실제로 저렇게 해봤더니 1초 후에 쿠키가 풀려버린다!
## session, 세션
세션은 진짜 별거 없다. 쿠키 저렇게 보내면 보안이 안좋으니까 암호화 해주는 개념인데 돌아가는 논리는 비슷하다! 그래서 따로 안적겠다. 물론 쓰이는 함수랑 코드는 다른데, 아마 헷갈려서 이글 읽으면 다시 생각날듯 하다
너무 졸리다. 일단 내일 아침에 또 멘토링 때문에 일찍 일어나야하기 때문에 이제 자야겠다. 이번주는 헬스 몇번 갈 수 있을까.. 운동 하고싶다 ㅠㅠ 목요일은 알바안가니까 무조건 갈거다! 멘토링 한것도 블로그에 올려야겠다. 노드 진짜 열심히하고 장고도 해보고 스프링해보고 백엔드 하나둘씩 해보고싶다. 처음엔 결과가 바로 보이는 프론트엔드가 재밌었는데 뭔가 css 스트레스 받고... 백엔드가 더 재밌는거 같다. 뭔가 뒤에 숨어서 이것저것 하는 느낌이다.
'• 개발 > node.js' 카테고리의 다른 글
[node.js] Passport를 이용한 local-login 전략 (0) | 2022.01.23 |
---|---|
[node.js] 익스프레스(express) 사용하기, 미들웨어란, 미들웨어 순서 (0) | 2022.01.17 |
[node.js] npm 기본개념 및 package.json 과 package-lock.json에 대해서 (0) | 2022.01.14 |
[node.js] 노드 기본개념, JS(ES2015+)문법, 노드 기능 알아보기 (0) | 2022.01.09 |
[node.js] 공부 시작에 앞서 (0) | 2022.01.09 |