Node.js
-
3-6. 노드 세션(Session) 이해하고 사용하기Node.js 2023. 4. 14. 11:29
I. 세션 사용하기 쿠키의 정보는 노출되고 수정되는 위험이 있음 - 중요한 정보는 서버에서 관리하고 클라이언트에는 세션 키만 제공하는 것이 좋다 - 서버에 세션 객체(session) 생성 후, uniqueInt(키)를 만들어 속성명으로 사용 - 속성 값에 정보 저장하고 uniqueInt 를 클라이언트에 보냄 // session.js const http = require('http'); const fs = require('fs').promises; const url = require('url'); const qs = require('querystring'); const parseCookies = (cookie = '') => cookie .split(';') .map(v => v.split('=')) .r..
-
3-5. 노드 쿠키의 모든 것Node.js 2023. 4. 13. 16:04
I. 쿠키의 필요성 1. 요청에는 한 가지 단점이 있음 - 누가 요청을 보냈는지 모름(IP 주소와 브라우저 정보 정도만 알 수 있음) - 로그인을 구현하면 되지만, 그러려면 쿠키와 세션이 필요 2. 쿠키 : 키=값의 쌍 - name=junu - 매 요청마다 서버에 동봉해서 보냄 - 서버는 쿠키를 읽어 누구인지 파악 II. 쿠키 서버 만들기 1. 쿠키 넣는 것을 직접 구현 - writeHead : 요청 헤더에 입력하는 메서드 - Set-Cookie : 브라우저에게 쿠키를 설정하라고 명령 2. 쿠키 : 키=값의 쌍 - name=junu - 매 요청마다 서버에 동봉해서 보냄 // cookie.js const http = require('http'); http.createServer((req, res) => {..
-
3-4. 노드 POST, PUT, DELETE 요청 보내기 / HTTP status 코드(상태코드)Node.js 2023. 4. 13. 14:46
I. POST, PUT, DELETE 요청 보내기 이전 게시글에서 GET 메서드 요청에 대해서 알아봤다면, 이번 게시글에서는 같은 예제 속의 POST, PUT, DELETE 요청에 대해서 알아보자. // about.html Home About 소개 페이지입니다. 사용자 이름을 등록하세요! // restFront.html Home About 등록 // restFront.js async function getUser() { // 로딩 시 사용자 가져오는 함수 try { const res = await axios.get('/users'); const users = res.data; const list = document.getElementById('list'); list.innerHTML = ''; // 사용..
-
3-3. 노드 REST API 서버 만들기Node.js 2023. 4. 13. 13:46
I. REST API 1. 서버에 요청을 보낼 때는 주소를 통해 요청의 내용을 표현 - /index.html 이면 index.html 을 보내달라는 뜻 - 항상 html 을 요구할 필요는 없음 - 서버가 이해하기 쉬운 주소가 좋음 2. REST API (Representational State Transfer) - 서버의 자원을 정의하고 자원에 대한 주소를 지정하는 방법 - /user 이면 사용자 정보에 관한 정보를 요청하는 것 - /post 면 게시글에 관련된 자원을 요청하는 것 3. HTTP 요청 메서드 ① GET : 서버 자원을 가져오려고 할 때 사용 ② POST : 서버에 자원을 새로 등록하고자 할 때 사용 (또는 뭘 써야할 지 애매할 때) ③ PUT : 서버의 자원을 요청에 들어있는 자원으로 치..
-
3-2. 노드 fs로 HTML 파일 읽어서 제공하기Node.js 2023. 4. 13. 11:35
I. fs로 HTML 파일 읽기 // server1.js const http = require('http'); http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); res.write('Hello Node!'); res.end('Hello Server!'); }) .listen(8080, () => { // 서버 연결 console.log('8080번 포트에서 서버 대기 중입니다!'); }); 예를 들어서, 위와 같은 코드가 있다고 가정해보자. 위와 같이 HTML 내용을 쭉 작성 할 수는 있지만, 아래와 같이 코드가 굉장히 길어지기 때문에 가독성이 현저히 떨어진다. // serv..
-
3-1. 노드 HTTP 서버와 클라이언트Node.js 2023. 4. 13. 11:02
I. 서버와 클라이언트 ① 클라이언트가 서버로 요청(request) 을 보냄 ② 서버는 요청을 처리 ③ 처리 후 클라이언트로 응답(response) 을 보냄 II. HTTP 란? Hyper Text Transfer Protocol 의 약자로, 클라이언트와 서버 사이에 이루어지는 요청/응답(request/response) 프로토콜, 하나의 통일된 규약이다. 예를 들면, 클라이언트인 웹 브라우저가 HTTP를 통하여 서버로부터 웹페이지(HTML)나 그림 정보를 요청하면, 서버는 이 요청에 응답하여 필요한 정보를 해당 사용자에게 전달하게 된다. 이 정보가 모니터와 같은 출력 창치를 통해 사용자에게 나타나는 것이다. III. 노드로 HTTP 서버 만들기 HTTP 요청에 응답하는 노드 서버 - createServe..
-
2-16. 노드 에러 처리하기(예외 처리하기)Node.js 2023. 4. 12. 17:37
I. 예외 처리 노드에서, 예외 = 에러 라고 볼 수 있다. 1. 예외(Exception) : 처리하지 못한 에러 - 노드 스레드를 멈춤 - 노드는 기본적으로 싱글 스레드라 스레드가 멈춘다는 것은 프로세스가 멈추는 것 - 에러 처리는 필수 II. try, catch문으로 예외 처리 1. 에러가 발생할 만한 곳을 try, catch 로 감쌈 // error1.js setInterval(() => { console.log('시작'); try { throw new Error('서버를 고장내주마!'); } catch (err) { console.error(err); } }, 1000); 2. 노드 비동기 메서드의 에러는 따로 처리하지 않아도 됨 - 콜백 함수에서 에러 객체 제공 - 따라서, 에러가 발생해도 프로..
-
2-15. 노드 스레드풀과 커스텀 이벤트Node.js 2023. 4. 12. 17:13
I. 스레드풀 알아보기 fs, crypto, zlib 모듈의 메서드를 실행할 때는 백그라운드에서 동시에 실행됨 - 스레드풀이 동시에 처리해줌 - 무턱대고 동시에 실행되는 것이 아니라, 4개씩 동시에 실행됨 const crypto = require('crypto'); const pass = 'pass'; const salt = 'salt'; const start = Date.now(); crypto.pbkdf2(pass, salt, 1000000, 128, 'sha512', () => { console.log('1:', Date.now() - start); }); crypto.pbkdf2(pass, salt, 1000000, 128, 'sha512', () => { console.log('2:', Date..