Let's Write_ 프론트엔드

TIL _ node.js & express & mongoDB

TIL

 

http 는 노드거임
노드 명령어를 써서 서버를 실행하는 구문...
노드에 있는 http 객체의 createServer 를 써서 원하는 서버에 

jade = pug (이름 바뀐거임)

버전에서 ^ 있으면 지금꺼 써도 상관 ㄴㄴ
~여기까지 쓸수 있엉?

//app.js
logger - morgan : http 통신에 대한 로그를 찍어줌.

우리는 BodyParser 를 써서 josn 을 썼는데 express.json 으로 써도 된다. (왜냐면 express 에 내장되어있는 미들웨어이기때문에 바디파서에 접근 가능)
request.body에 접근할 수 있게 된다.

https://caniuse.com/#search=input // 갑툭튀 : 태그들 크롬버전 등 등 사용범위 알려주는~~~


그리고 cookieParser() <- 인증쪽 가면 쓰는 
express.static (정적폴더 지정)
미들웨어는 리퀘스트가 들어오면 모든 미들웨어를 쭈욱- 지나온다 (위에서부터)
 그래서 req,res,next인자를 받을 수 있다.

제일먼저 들어온 미들웨어에서 한 일 다 적고 다른 라우터로 넘길려면 next()로 끝낸다.

app.locals.pretty < - 로컬스로 받았으니깐 퍼그가 받는거당

왜 bin폴더껄로 시작시키는지??? A) 최상위 파일이 여기에 지정되어있다. app.js 보면 또 연결되어있음~~
npm app ㄴㄴ?
package.json 보면 script: {start: 'node ./bin/www' } 가 있어서 npm start 명령어로 node 를 실행시킬수 있다.

//seeder - 한방에 기본 파일들 참고
//
#bin/www : 시작지점
//config/
//sequelize-cli 검색,npm 에서 보면 여기서 커맨드가 있다.  sequalize db:migrate 

각종 미들웨어 설치

npm i -g sequelize-cli // 한번만 설치하는 global module => sequelize init 으로 설치한다. => 그러고나면 폴더가 몇개 생겨용
//config
//migrations
//models
//seeder

실제 배포할때는 supervisor 가 아닌 pm2 : 모든 노드의 상태를 확인하는 프로그램


npm i morgan //기본설치
npm i http-errors //기본설치
npm i mysql2 sequelize
npm i rotating-file-stream
npm i multer
npm i express-session session-file-store
(cookie parser 는 기본으로 깔려있음)

cli 는 글로벌 환경으로 깔아야합니다.ㅇ(배포할 때 나갈필요가 없져)
+ POOL 옵션을 추가해준다.

config.json - 접속에 관한 정보를 담고있어여
models  - index.js : 7번째줄 여기 있는 NODE_ENV 값을 안바꿔주면 development 으로 들어간다 <- 나중에 이걸 production 으로 바꾸면 배포모드가 됨.
config 에 객체정보를 다 넣어둔다.

폴더명까지만 쓰면 index 를 명시 안해도 그걸 먼저 찾는다.

node - cluster 
node의 서버로서의 단점 : single thred
보통 코어가 8 개 !
다른 언어들은..
클러스터는 모든 코어에 모두 복사해둔다.
그래서 분산처리가 됨
이 자바같은 데 있는 멀티스레드랑은 개념이좀달라요
얘는 포트가 8개 카피되는거

crypto : 암호화 

globals 에 있는 객체는 그냥 쓰면 돼
 ex) __filename, __dirname

개발하면서 시간을 측정해야하는 경우가 있다!!!

console.time("측정") <-
for(var i=0; i<1000000; i++){

}
console.timeEnd("측정") <-

플래그를 일치시키면 시간이 측정된다.

console.dir : 함수 등을 받을 때 나오는거

글로벌객체는 require 할 필요 없다. 그냥 쓰면 돼~~~

javascript 이벤트 모델 알아둬야함

노드는 cpu 에 직접 접근이 가능하다. 

http <- 80
https <- 443
아무것도 안적고 들어갔을때 접그하는 기본 포트들임

pathname <- req.params 로 접근
query - req.query (? search 항목)


boilerPlate

node vue axios 인데 셋팅하기 귀찮을때 + boilerplate 라고 검색하면
해당 기본 셋팅이 올라와있다고 한다.
본인의 보일러 플레이트 만들어 놓기

gitClone - origin 날리고 - 내 깃 붙이기

데이터를 조각내서 쌓이는게 버퍼 , 버퍼링임
그래서 한세트가 만들어지면 보냅니다.

파일이 클 때는 웹에서 스트리밍 하겠져~~~~~

Multer - killer app
이걸 사용하면 쉽게 파일 업로드/ 다운로드 할 수 있다.

cluster 는 master와 worker 가 있다. 

fork 복제임

클러스터는 미들웨어 아니고 모듈임
npm 에 포함되어있으므로 굳이 따로 설치할 필요 없음
배포할 때 이부분만 래핑하면 된당~~
>> 재시작<<
폴더 만든 후에 들어갈때에는 express --view=pug 만 쳐주면 되고
폴더도 만들어주려면 express 폴더명 --view=pug
npm i
sequelize init
config 에서 계정 정보를 셋팅해준다. <- 깃 등에 올라가면 안된다!!!!
npx sequelize-cli db:migrate

 

---------------------------
PM2  가 좋은점 - 자체 클러스트를 내장 하고 있습니다.
pm2 start ./bin/www -i 0
 -i : 클러스터를 켠다
 2 : cpu 2개
 0 : cpu 갯수만큼 

얘로 데몬을 띄워놓고 
pm2가 있다는거 알아두세욤

pm2 kill

npmjs - multer : 

amazon은 s3
multer 는 busboy 라는 미들웨어로 만들어졌다.
멀티데이터의 폼데이터에 대해 처리해 준거
그거를 좀더 패키징 해준 애가 멀터다.

폴더가 있으면
express --view=pug
npm i
npm i sequelize mysql2
sequelize init -> 폴더가 생긴다!
npm i multer
셋팅 끗

package.json 에서 npm 실행 명령어르 우리가 설정해줬을때에는
npm run 설정한명령어
//start 는 default 라서 npm start 로 됨

multer 업로드할 때  '/'를 붙여주면 퍼블릭 안에서 찾을테다.

upload.single


existsSync - fs 로부터 패쓰가 있는지를 찾는거

ㅡㅕㅣㅅㄷㄱmulter가 storage로 저장하면서 file에 (멀터가 전달해주는 키값들 이 nodejs 에서 설명이 있다)
미들웨어에 저장하고
저장된 파일 정보를 file이라는 인자에 심어서 보내준다.

----session 09
폴더부터 만들기
express --view=pug 09.session

cookie : 저장위치 - 사용자 브라우저
session :  저장위치 - 서버에 저장되는 쿠키

우린 쿠키, 세션 모듀 컨트롤 해야해
그래서 npm 에서는 2가지가 있어용
1. cookie-parser : killer module
cookieParser express로 설치하면 기본으로 가지고 있당.

node i express-sesssion (기본 아님)
node i session-file-store : 세션을 폴더에 저장할 때 쓴다.
2. 보통은 redis같은 데이터에 저장한다. :  메모리에 저장되는 데이터 베이스ㅡ 레디스를 깔아야만 운영이 된다 . 
대개 레디스를 믾이 쓴다. 

레디스를 써야 cpg 접속전환할 때 세션을 유지된다. (편하게 구현)
레디스에도 많이 저장하는 추세입니당 - 메모리 많이 머겅

우리는 1 로 진행해보니당

보통 로그인한 사용자의 정보를 세션에 남긴다.
express-session 
secret - 복호화할때 쓰는거
resave - 같은 값일때 저장할까?
saveUninitialized - 생성과 동시에 값을 줄까?
 cookie: { secure: true } - 쿠키를 쓸 때는 이렇게 쓰면 된다. 근데 우리는 store에 저장할거다.

pug 에서 - 쓰면 다음엔 자바스크립트 문법입
그래서 - 를 쓰려면 조치를 취해야 한다.ㅇ.

유저 저장하려면 sequelize 를 붙여야 한다.
1.sequelize init
config/config 설정 
models/index.js 를 app에서 부른당.
하단 db.sequelize = sequelize 로 셋팅하고 있으므로 
3.내꺼를 붙이려면 하단에 생성한 모델을 불러오면 된다. 
2.models/폴더에 만들 거 파일 생성

db.User = require("./User")(sequelize, Sequelize); //꼭 상대좌표로 찾아야합니다. ./ 안넣으면 node_modules에서 찾습니다.

4. app.js 에서 모델을 붙여주면 된다.
// sequelize init
var sequelize = require('./models').sequelize;
sequelize.sync();

index 보면 하단에서 db를 exports 하고있다. 그래서 . 붙ㅇ서 호출

res.session.destroy() 는 세션 자체를 없애는거임. - 콜백임
콜백을 받은 이후에 실행되도록 해야한다.


mongoDB 좋은점 : json 으로 저장된다.

nosql = not only sql
요즘은 또 graphql

mongodb sharding 이밎

몽고디비에서 
테이블 -> 컬랙션
로우 -> 
각각 데이터 베이스르 독립적으로 움직인다.

g환경변수 등록후에 
원하는 위치에 폴더 만들고나서
mongod --port 15000 --dbpath c:\mongoDB\db1(위치)
하면 커서가 깜박히게 된다 이거 데몬 켠거임
또다른 창을 켜서

mongo --port15000
로 접속한다
show dbs
use sample
db.sample.insert({name: "aa"})
show collections
db.sample.find()