JWT 토큰 인증 API 서비스를 제공하는 입장에서 다른 클라이언트가 NodeBird의 데이터를 가져갈 수 있게 해야 하는 만큼 별도의 인증과정이 필요하다. JWT는 JSON Web Token의 약어로, JSON 형식의 데이터를 저장하는 토큰이다. 구성요소는 다음과 같다. 헤더(HEADER): 토큰 종류와 해시 알고리즘 정보가 들어 있다. 페이로드(PAYLOAD): 토큰의 내용물이 인코딩 된 부분이다. 시그니처(SIGNATURE): 일련의 문자열이며, 시그니처를 통해 토큰 변조 여부를 확인한다. 페이로드 부분은 노출된다. 이는 토큰의 내용을 모두 감춘다면 매 요청마다 권한을 체크해야 한다. 따라서 비밀키를 숨긴다. 비밀키는 시그니처와 다른 의미이다. JWT 토큰의 단점은 용량이 크다는 것이다. 내용물이 ..
전체 글
API 서버 API는 Application Programming Interface의 두문자어로, 다른 애플리케이션에서 현재 프로그램의 기능을 사용할 수 있게 허용하는 접점을 의미한다. 서버에 API를 올려서 URL을 통해 접근할 수 있게 만든 것을 웹 API 서버라고 한다. 프로젝트 생성 이전에 만든 NodeBird와 데이터베이스를 공유하는 서버를 만들자. { "name": "nodebird-api", "version": "1.0.0", "description": "NodeBird API 서버", "main": "app.js", "scripts": { "start": "nodemon app", "test": "echo \"Error: no test specified\" && exit 1" }, "auth..
이미지 업로드 multer 패키지로 이미지 업로드를 구현해보자. npm i multer 이미지를 어떻게 저장할 것인지는 서비스의 특성에 따라 달라진다. 이번 프로젝트에서는 input 태그를 통해 이미지를 선택할 때 바로 업로드를 진행하고, 업로드된 사진 주소를 다시 클라이언트에 알릴 것이다. db에는 경로만 저장한다. 우선 라우터를 작성하자. const express = require('express'); const multer = require('multer'); const path = require('path'); const fs = require('fs'); const {Post, Hashtag} = require('../models'); const{ isLoggedIn } = require('./..
데이터베이스 세팅 로그인 기능을 구현하기 위해 사용자 테이블이 필요하고, 게시글을 저장할 게시글 테이블도 필요하다. 해시태그를 사용하기 때문에 해시태그 테이블도 필요하다. models 폴더 안에 정의해보자. const Sequelize = require('sequelize'); module.exports = class User extends Sequelize.Model{ static init(sequelize){ return super.init({ email: { type: Sequelize.STRING(40), allowNull: true, unique: true, }, nick: { type: Sequelize.STRING(15), allowNull: false, }, password: { type:..
프로젝트 생성 140자의 단문 메시지를 보내고 공유하는 서비스를 따라 해 보자. nodebird라는 프로젝트를 만들자. { "name": "nodebird", "version": "1.0.0", "description": "sns service using express", "main": "index.js", "scripts": { "start": "nodemon app", "test": "echo \"Error: no test specified\" && exit 1" }, "author": "hvvan", "license": "MIT" } npm i sequelize mysql2 sequelize-cli npx sequelize init 그리고 views, route, public, passport 폴더..
쿼리 수행하기 views 폴더 안에 html을 만들어 보자. 사용자 등록 결혼 여부 등록 아이디 이름 나이 결혼여부 {% for user in users %} {{ user.id }} {{ user.name }} {{ user.age }} {{ '기혼' if user.married else '미혼' }} {% endfor %} 댓글 등록 등록 아이디 작성자 댓글 수정 삭제 views/mongoose.html {{ message }} {{ error.status }} {{ error.stack }} views/error.html 이제 js파일을 만들어서 서버를 돌려보자. //사용자 이름을 클릭할 때 댓글 로딩 document.querySelectorAll('#user-list tr').forEach((el..
프로젝트 생성 { "name": "learn-mongoose", "version": "1.0.0", "description": "learn mongoose", "main": "index.js", "scripts": { "start": "nodemon app", "test": "echo \"Error: no test specified\" && exit 1" }, "author": "hvvan", "license": "MIT", "dependencies": { "express": "^4.17.1", "mongoose": "^5.11.17", "morgan": "^1.10.0", "nunjucks": "^3.2.3" } } 프로젝트를 하나 생성해 위와 같이 packge.json을 만들자. 그리고 아래 패키지를..