Yangeok
Development Blog
-
깃헙 저장소 이슈 페이지를 댓글로 쓰기
작업환경은 Github Page Blog, Jekyll, Centrarium Theme입니다. 정적페이지에서는 db를 사용할 수 없기때문에 일반적인 방법으로는 댓글을 구현하지 못합니다. 그래서 대다수 깃헙페이지 블로거들이 사용하는 서비스가 disqus인데요. 깔끔하지 못한 ui와 마크다운을 사용하지 못한다는 단점이 있음에도 가장 유명하고 한글문서가 많다는 이유로 저도 사용하게 됐습니다. 아직까진 블로그에 댓글이 없긴 하지만 그래도 깔끔한게 좋잖아요^^ 구글링 중에... -
Docker 빌드중 에러 메시지가 뜰때 해결하기
작업환경은 윈도우10, VSC를 이용했습니다. 도커 버전은 다음과 같습니다. $ docker version Client: Docker Engine - Community Version: 18.09.0 API version: 1.39 Go version: go1.10.4 Git commit: 4d60db4 Built: Wed Nov 7 00:47:51 2018 OS/Arch: windows/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 18.09.0 API version: 1.39 (minimum version... -
굿바이 2018
친구1 프로그래밍의 전부는 웹이고 HTML, CSS, jQuery인줄 알았던 나에게 프로그래밍 입문을 도와줬다. jQuery가 Javascript의 라이브러리인지도 몰랐던 시절이 떠오른다. 생활코딩을 보며 나의 개발공부를 시작하게 된 터닝포인트가 바로 친구1이었다. Github: 커밋 확인 용도가 가장 컸다. 아직 협업을 하는 단계가 아니었기 때문에 브랜치를 쳐서 새로운 버전을 만드는 용도까지는 아니었다. 그리고 이때까지는 중요한 기능을... -
Sequelize 중첩모델 쿼리 작성하기
부모 밑에 자식이 자식 밑에 손자가 있는 구조로 JSON데이터를 뽑아줄겁니다. 여기서 정렬을 거는 방법을 확인해볼겁니다. 먼저 모델을 정의하고 제약을 걸어줍니다. // 모델 정의 const Parent = sequelize.define('parent', { id: { Sequelize.INTEGER, primaryKey: true }, name: Sequelize.STRING, parent: Sequelize.INTEGER }); const Child = sequelize.define('parent', { id: { Sequelize.INTEGER, primaryKey: true },... -
Sequelize 테이블 별명 사용하기
Categories 테이블을 만들었는데 셀프조인을 할 예정입니다. 왜냐면 테이블 하나만 가지고 트리구조를 만들거거든요. sequelize-cli를 사용해서 디렉토리가 models, migrations, seeders 이렇게 3개가 존재합니다. 아래 코드는 models 폴더 안에 생성된 단수 파일명으로 생성된 category.js입니다. migrations/****-create-category.js 파일도 아래와 똑같은 구조로 수정해주어야 합니다. DataTypes만 Sequelize로 수정해주면 두 파일간의 내용이 똑같아지니 다른 튜토리얼을 보고 따라하시면 됩니다.... -
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) 지정에...