서버리스 이해하기 이 장에서는 서버리스 아키텍처와 노드를 함께 사용하는 방법을 소개한다. 이미지를 업로드한 후, 리사이징해서 클라우드 저장소에 업로드할 것이다. 서버리스는 서버가 없다는 뜻이지만, 사실 서버가 없는 것은 아니다. 서버를 클라우드 서비스가 대신 관리해주므로 개발자나 운영자가 서버를 관리하는 데 드는 부담이 줄어든다는 의미다. 즉, 개발자는 자신의 서비스 로직을 작성하는 데만 집중할 수 있게 되는 것이다. AWS는 람다, API 게이트웨이, S3등의 서비스가 유명하고, GCP에서는 앱 엔진, 파이어베이스, 클라우드 펑션스, 클라우드 스토리지 등의 서비스가 유명하다. 이 장에서는 NodeBird에서 업로드하는 이미지를 리사이징하거나 저장한다. AWS에서는 람다와 S3를, GCP에서는 클라우드 ..
서비스 운영을 위한 패키지 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..