• MySQL 계층형 구조 테이블 작성해서 JSON데이터로 확인하기

    테이블 구조는 간단합니다. Products 테이블에 있는 cat_id가 Categories 테이블에 있는 cat_id를 참조합니다. 현재 Categories 테이블을 참조한 상태로 조인한 쿼리는 다음과 같습니다. CREATE TABLE Products ( prod_id INT, prod_name VARCHAR(128), prod_price INT, cat_id INT PRIMARY KEY (prod_id), FOREIGN KEY (cat_id) REFERENCES Categories(cat_id) ); CREATE TABLE Categories ( cat_id INT, cat_name VARCHAR(64),...


  • Koa JWT 두가지 방법으로 전송하기

    헤더에 실어서 보내는 방법 ctx.set(name, value); name: 헤더 이름 value: 토큰 값을 여기에 작성한다. 응답헤더에 토큰을 넣어 보내게 되면 브라우저에서 헤더에 있는 토큰을 가져다 브라우저의 localStorage로 집어넣어 토큰을 유지시킵니다. 이후 토큰의 유효기한이 되기 전에 요청헤더에 토큰을 넣어 서버에 보내면 디코딩후 유효성 검증을 거친 후 토큰을 새로 발급해 앞선 방법과 똑같은...


  • Passport 구글 로그인 가져오기

    작업환경은 NodeJS, KoaJS, koa-passport, passport-google-oauth-jwt입니다. passport-google-oauth-jwt모듈 가이드에 따라 작성을 했습니다. 제 개인적인 패스포트에 대한 이해는 이렇습니다. 다른 사이트에서(예를 들어 구글) 로그인된 유저의 정보를 가져온다. db에 유저의 회원정보가 있나 조회한다. 있으면 로그인시킨다. 없으면 가져온 유저의 정보로 회원 생성을 시킨다. 생성시킨후 로그인시킨다. 로그인할때 세션에 정보를 저장시킨다. 혹은 쿠키에 jwt를 담아 저장한다. 로컬...


  • Koa 가독성 좋게 재작성하기

    작업환경은 Node.js v8, Koa.js, Sequelize.js(MySQL)입니다. API 작성전 모듈을 작성합니다. // services/user.js const Users = require('../db/models').User; 먼저 sequelize 폴더에서 Users테이블을 가져옵니다. cli를 사용해서 작성했기 때문에 파일명이 자동생성되어 단수 로 생성됨을 참고 바랍니다. 테이블이름은 복수 입니다. // services/user.js const addUser = user => Users.create(user); const getUserByUserId = userId => Users.findOne({ where: {...


  • Sequelize 모델 정의하기

    본 포스팅은 sequelize-cli를 사용하였습니다. 디렉토리 구조는 아래와 같습니다. ├─config │ └─config.json ├─migrations │ (...) ├─models │ └─index.js └─seeders (...) 이 글을 쓰는 목적은 sequelize가 v4로 업데이트 되면서 바뀐 사항들이 꽤나 있습니다만, 포스팅이나 튜토리얼을 보면 예전방식으로 쓰여진 곳이 많더라구요. 대부분 deprecated메시지를 띄울뿐 에러는 띄우지 않는데 models폴더에서 테이블 정의할때 기본키(PK), 외래키(FK) 지정에...