전체 글

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을 만들자. 그리고 아래 패키지를..
hvv_an
이미난