Node 54

static,express-session 미들웨어

Static 정적인 파일들을 제공하는 미들웨어 인수로 정적 파일의 경로를 제공한다 파일이 있을 때 fs.readFile로 직접 읽을 필요 없다 요청하는 파일이 없으면 알아서 next를 호출해 다음 미들웨어로 넘어간다 파일을 발견했다면 다음 미들웨어는 실행되지 않는다(next를 호출하지 않는다) 따라서 미들웨어 위치를 적절한 곳에 두는것이 중요하다. 대게 morgan 밑에 두거나, cookie-parser, session 밑에 둔다 컨텐츠 요청 주소와 실제 컨텐츠의 경로를 다르게 만들 수 있다 요청 주소 localhost:3000/stylesheets/style.css 실제 컨텐츠 경로 /public/stylesheets/style.css 서버의 구조를 파악하기 어려워져서 보안에 도움이 된다 express..

morgan, bodyParser, cookieParser 미들웨어

const express = require("express"); const path = require("path"); const app = express(); const morgan = require("morgan"); const cookieParser = require("cookie-parser"); app.set("port", process.env.PORT || 3000); app.use(morgan("dev")); //요청과 응답을 기록하는 라우터, 운영에서는 combined 사용 //app.use(morgan("combined")); app.use(cookieParser()); app.use(cookieParser("junhokimpassword")); app.use(express.json());..

미들웨어

미들웨어 익스프레스는 미들웨어로 구성된다. 요청과 응답의 중간에 위치하여 app.use(미들웨어)로 장착할 수 있다. 위에서 아래로 순서대로 실행된다 미들웨어는 req, res, next가 매개변수인 함수이다. req: 요청, res: 응답 조작 가능 next()로 다음 미들웨어로 넘어감 익스프레스 미들웨어들도 다음과 같이 축약 가능 static 미들웨어에서 파일을 찾으면 next를 호출 안 하므로 json, urlencoded, cookieParser는 실행되지 않음 순서가 중요 에러 처리 미들웨어 app.use((err, req, res, next) => { //에러 미들웨어는 반드시 4개를 모두 써야한다. console.error(err); res.status(500).send("에러가 발생했습니다..

express 서버 사용해보기

express가 가장 다운로드 수도 많고, 사용양이 많다 http 모듈로 웹 서버를 만들 때 코드가 보기 좋지 않고, 확장성도 떨어진다. 프레임워크로 해결할 수 있다. 대표적인 것이 Express(익스프레스), Koa(코아), Hapi(하피) 코드 관리도 용이하고 편의성이 많이 높아진다. Package.json 만들기 직접 만들거나 npm init 명령어 생성해 준다 nodemon이 소스 코드 변경 시 서버를 재시작해준다 app.js 작성하기 서버 구동의 핵심이 되는 파일 app.set(‘port’, 포트)로 서버가 실행될 포트 지정할 수 있다(전역 설정) app.get('') 명령어로, 전역 설정한 데이터도 가지고 올 수 있다. app.get(‘주소’, 라우터)로 GET 요청이 올 때 어떤 동작을 할지..

npm 배포하기

https://www.npmjs.com/ npm Bring the best of open source to you, your team, and your company Relied upon by more than 11 million developers worldwide, npm is committed to making JavaScript development elegant, productive, and safe. The free npm Registry has become the center of Java www.npmjs.com 1. 회원 가입하기 2. index.js파일 작성(package.json과 main 부분과 배포할 파일 경로명이 일치해야 함) 3. npm publish 입력 (이름이 겹치면 안 ..

npm 명령어들 알아보기

https://docs.npmjs.com npm Docs Documentation for the npm registry, website, and command-line interface docs.npmjs.com 공식 문서에서 확인하는 것이 가장 좋다 많이 사용하는 npm npm outdated: 어떤 패키지에 기능 변화가 생겼는지 알 수 있음 npm update: package.json에 따라 패키지 업데이트 npm uninstall 패키지명: 패키지 삭제(npm rm 패키지명으로도 가능) npm search 검색어: npm 패키지를 검색할 수 있음(npmjs.com에서도 가능) npm info 패키지명: 패키지의 세부 정보 파악 가능 npm login: npm에 로그인을 하기 위한 명령어(npmjs...

SemVer

노드 패키지의 버전은 SemVer(유의적 버저닝) 방식을 따름 Major(주 버전), Minor(부 버전), Patch(수 버전) 노드에서는 배포를 할 때 항상 버전을 올려야 함 Major는 하위 버전과 호환되지 않은 수정 사항이 생겼을 때 올림 Minor는 하위 버전과 호환되는 수정 사항이 생겼을 때 올림 Patch는 기능에 버그를 해결했을 때 올림 버전 앞에 기호를 붙여 의미를 더함 ^1.1.1: 패키지 업데이트 시 minor 버전까지만 업데이트 됨(2.0.0버전은 안 됨) ~1.1.1: 패키지 업데이트 시 patch버전까지만 업데이트 됨(1.2.0버전은 안 됨) >=, ,

Package.json

Node Package Manager(NPM) 노드의 패키지 매니저 다른 사람들이 만든 소스 코드들을 모아둔 저장소 남의 코드를 사용하여 프로그래밍 가능 이미 있는 기능을 다시 구현할 필요가 없어 효율적 오픈 소스 생태계를 구성중 모듈이 다른 모듈을 사용할 수 있듯 패키지도 다른 패키지를 사용할 수 있다(의존 관계라고 부른다) 패키지 = npm에 업로드된 노드 모듈 Package.json 현재 프로젝트에 대한 정보와 사용 중인 패키지에 대한 정보를 담은 파일 같은 패키지라도 버전별로 기능이 다를 수 있으므로 버전을 기록해두어야 함 동일한 버전을 설치하지 않으면 문제가 생길 수 있음 노드 프로젝트 시작 전 package.json부터 만들고 시작함(npm init) npm init package name: ..

cluster

기본적으로 싱글 스레드인 노드가 CPU 코어를 모두 사용할 수 있게 해주는 모듈(놀고 있는 스레드가 없다) 포트를 공유하는 노드 프로세스를 여러 개 둘 수 있다 요청이 많이 들어왔을 때 병렬로 실행된 서버의 개수만큼 요청이 분산된다 서버에 무리가 덜 간다 코어가 8개인 서버가 있을 때: 보통은 코어 하나만 활용한다 cluster로 코어 하나당 노드 프로세스 하나를 배정 가능하다 성능이 8배가 되는 것은 아니지만 개선된다 단점: 컴퓨터 자원(메모리, 세션 등) 공유 못 한다 -> 로그인을 구현하기 힘들다(새로 고침시 다른 서버로 접속이 가능할 수 있기때문) Redis 등 별도 서버로 해결한다 여러 서버를 하나의 포트를 사용해 실행시킬수 있는 장점이 있다. const cluster = require('clu..

https, http2

Https 웹 서버에 SSL 암호화를 추가하는 모듈 오고 가는 데이터를 암호화해서 중간에 다른 사람이 요청을 가로채더라도 내용을 확인할 수 없다 해커가 중간에 가로채더라도, 암호화가 되어 있기 때문에 할 수 있는것이 없다 요즘에는 https 적용이 필수(개인 정보가 있는 곳은 특히) http 서버를 https 서버로 암호화를 위해 인증서가 필요한데 발급받아야 함 createServer가 인자를 두 개 받음 첫 번째 인자는 인증서와 관련된 옵션 객체, 두 번째 인자는 서버 로직 인증 기관에서 인증된 곳에서만 cert,key,ca 값을 전달받을 수 있고, 이를 https 모듈에 넣어주면된다 https 설정은 초기 설정에 동작하므로, sync로 되어 있다. Http2 SSL 암호화와 더불어 최신 HTTP 프로..