서비스 운영을 위한 패키지 NodeBird 수정 app.js if (process.env.NODE_ENV === 'production') { app.use(morgan('combined')); } else { app.use(morgan('dev')); } const sessionOption = { resave: false, saveUninitialized: false, secret: process.env.COOKIE_SECRET, cookie: { httpOnly: true, secure: true, }, }; if (process.env.NODE_ENV === 'production') { sessionOption.proxy = true; // sessionOption.cookie.secure=true;..
명령줄 인터페이스(CLI : Command Line Interface)는 콘솔 창을 통해 프로그램을 수행하는 환경을 뜻한다. 이와 반대되는 개념으로는 그래픽 사용자 인터페이스(GUI : Graphic User Interface)가 있다. 간단한 콘솔 명령어 만들기 index.js #!/usr/bin/env node 주석이라 의미 없는 문장이라고 생각할 수도 있지만, 리눅스, 맥 같은 유닉스 기반 운영체제에서는 실행하라는 뜻이다. package.json { "name": "node-cli", "version": "0.0.1", "description": "nodejs cli program", "main": "index.js", "author": "min", "license": "ISC", "bin": { ..
서버센트 이벤트 사용하기 npm i sse socket.io sse.js const SSE = require('sse'); module.exports = (server) => { const sse = new SSE(server); sse.on('connection', (client) => { // 서버센트 이벤트 연결 setInterval(() => { client.send(Date.now().toString()); }, 1000); }); }; app.js const sse = require('./sse'); const webSocket = require('./socket'); webSocket(server, app); sse(server); main.html 네트워크 탭 auction.html {% ..
웹 소켓 이해하기 웹 소켓은 HTML5에 새로 추가된 스펙으로 실시간 양방향 데이터 전송을 위한 기술이며, HTTP와 다르게 WS라는 프로토콜을 사용한다. 처음에 웹 소켓 연결이 이루어지고 나면 그다음부터는 계속 연결된 상태로 있으므로 따로 업데이트가 있는지 요청을 보낼 필요가 없다. 업데이트할 내용이 생겼다면 서버에서 바로 클라이언트에 알린다. HTTP 프로토콜과 포트를 공유할 수 있으므로 다른 포트에 연결할 필요도 없다. 웹 소켓이 나오기 이전에는 HTTP 기술을 사용하여 실시간 데이터 전송을 구현했다. 그중 한 가지가 폴링. HTTP가 클라이언트에서 서버로 향하는 단방향 통신이므로 주기적으로 서버에 새로운 업데이트가 있는지 확인하는 요청ㅇ르 보낸 후, 있다면 새로운 내용을 가져오는 단순 무식한 바법..
NodeBird 서비스에 테스팅을 적용해보겠다. 실제 서비스를 개발 완료한 후, 개발자나 QA들은 자신이 만든 서비스가 제대로 동작하는지 테스트해본다. 이번 장에서는 여러 가지 테스트 기법 중 유닛 테스트, 통합 테스트, 부하 테스트, 테스트 커버리지 체크를 살펴본다. 테스트에 사용할 패키지는 jest이다. npm i -D jest package.json "scripts": { "start": "nodemon app", "test": "jest" }, 테스트용 파일은 파일명과 확장자 사이에 test나 spec을 넣으면 된다. => npm test middleware.test.js test('1+1은 2입니다.', () => { expect(1 + 1).toEqual(2); }); test 함수의 첫번째 ..
이 장에서는 NodeBird 앱의 REST API 서버를 만든다. API 서버는 프런트엔드와 분리되어 운영되므로 모바일 서버로도 사용할 수 있다. 노드를 모바일 서버로 사용하려면 이번 장과 같이 서버를 REST API 구조로 구성하면 된다. 특히 JWT 토큰은 모바일 앱과 노드 서버 간에 사용자 인증을 구현할 때 자주 사용된다. API(Application Programming Interface) : 다른 애플리케이션에서 현재 프로그램의 기능을 사용할 수 있게 허용하는 접점 웹 API는 다른 웹 서비스의 기능을 사용하거나 자원을 가져올 수 있는 창구. 위와 같은 서버에 API를 올려서 URL을 통해 접근할 수 있게 만든 것을 웹 API 서버라고 한다. 크롤링 : 웹 사이트가 자체적으로 제공하는 API가 ..
npx sequelize init N:M 관계 이거는 유저대유저야 신기하지 static associate(db) { db.User.hasMany(db.Post); db.User.belongsToMany(db.User, { foreignKey: 'followingId', as: 'Followers', through: 'Follow', }); db.User.belongsToMany(db.User, { foreignKey: 'followerId', as: 'Followings', through: 'Follow', }); } hasMany에 옵션 안넣으면 반대편 post에서 UserId로 생성 유저 팔로워, 팔로잉 볼거야 through로 생성할 모델 이름을 정한다. foreignKey 옵션에 followerId..
윈도우 몽고디비 실행할려면 c:\data\db 폴더가 있어야 돼. 먼저 만들어. 몽고디비 서버 실행 cd C:\Program Files\MongoDB\Server\4.4\bin mongod or ./mogod 기본적으로 27017번 포트에서 실행된다. mysql은 3306이였나?? 매번 실행하기 귀찮다면 명령 프롬프트를 관리자 권한으로 실행한 뒤 (버전 4.2는 버전에따라 바꿔요) mongod --dbpath "C:\data\db" --logpath "C:\Program Files\MongoDB\Server\4.2\log\mongod.log" -- install --serviceName "MongoDB" 명령어 입력 후 윈도 작업 표시줄 검색창에서 services.msc 파일을 검색하여 실행 mongod..