프로젝트 생성 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..
몽고 DB 몽고디비는 대표적인 NoSQL이다. NoSQL이란 SQL을 사용하지 않는다는 말이다. SQL과 차이점은 다음과 같다. NoSQL에는 고정된 테이블이 없다. 따라서 컬럼을 따로 정의하지는 않는다. 예를 들어 MySQL은 users 테이블을 만들 때, name, age, married 등의 컬럼과 자료형, 옵션을 정의한다. 몽고디비는 그냥 users 컬렉션을 만들고 끝낸다. 또한, 몽고디비에는 JOIN기능이 없다. 하지만, 확장성과 가용성이 뛰어나 많이 사용되고 있다. MySQL에서의 테이블, 로우, 컬럼은 몽고디비에서 컬렉션, 다큐먼트, 필드라고 부른다. 또한, 자바스크립트 문법을 사용한다. 노드도 자바스크립트를 사용하므로 데이터베이스마저 몽고디비를 사용한다면 자바스크립트만 사용하여 웹 애플리케..
CRUD CRUD란 Create, Read, Update, Delete의 첫 글자를 딴 두문자어이다. 우선 CRUD를 하려면 테이블이 있어야 하니 테이블을 만들자. Create 데이터를 생성해서 데이터베이스에 넣는 작업이다. users 테이블에 데이터를 몇 개 넣어보자. INSERT INTO users (name, age, married, comment) VALUES ('홍길동', 24, 0, '자기소개1'); INSERT INTO users (name, age, married, comment) VALUES ('김철수', 32, 1, '자기소개2'); comments 테이블에도 넣어보자. 워크벤치를 사용하면 위와 같이 테이블에 직접 적고 하단에 apply를 누르면 insert가 완료된다. Read 조회는..
express server learn-express 프로젝트를 하고 express 모듈을 이용한 server를 만들어보자. npm i express npm i -D nodemon express와 편의를 위해 nodemon을 설치하자. const express = require('express'); const app = express(); app.set('port', process.env.PORT || 3000); app.get('/', (req, res) => { res.send('Hello, Express'); }); app.listen(app.get('port'), () => { console.log(app.get('port'), '번 포트에서 대기중...'); }); express 모듈을 실행해 a..
npm 세상에는 무수히 많은 자바스크립트 프로그래머가 있다. 그런 사람들이 미리 작성해놓은 코드들도 있다. 그리고 이를 공개해 놓은 코드도 많다. 우리는 이런 코드들을 잘 사용할 줄 알아야 한다. 이런 코드들이 공개되어 있는 서버인 npm을 알아보자. npm은 Node Package Manager의 약어로, 이름 그대로 노드 패키지 매니저이다. 대부분의 자바스크립트 프로그램은 패키지라는 이름으로 npm에 등록되어있고 특정 기능을 하는 패키지가 필요하면 npm에서 찾아 설치하면 된다. npm에 업로드된 노드 모듈을 패키지라고 부르며 패키지가 다른 패키지를 사용할 수도 있다. 이런 관계를 의존 관계라고 부른다. package.json 서비스에 필요한 패키지를 하나씩 추가하다 보면 어느새 패키지 수가 100개..
쿠키와 세션 클라이언트에서 보내는 요청에는 한 가지 큰 단점이 있다. 바로 누가 요청을 보내는지 모른다는 것이다. 물론 요청을 보내는 IP 주소나 브라우저의 정보를 받아올 수는 있다. 하지만 여러 컴퓨터가 공통으로 IP 주소를 가지거나, 한 컴퓨터를 여러 사람이 사용할 수도 있다. 그렇다면 로그인을 구현하여 관리하면 된다. 하지만 로그인을 구현하려면 쿠키와 세션에 대해 알고 있어야 한다. 로그인한 후에는 새로고침을 해도 로그아웃이 되지 않는다. 클라이언트가 서버에 누구인지 지속적으로 알려주고 있기 때문이다. 누구인지 기억하기 위해 서버는 요청에 대한 응답을 할 때 쿠키라는 것을 같이 보낸다. 쿠키는 유효 기간이 있으며 name=GR8와 같이 단순한 '키-값'의 쌍이다. 서버로부터 쿠키가 오면 웹 브라우저..
요청과 응답 클라이언트에서 서버로 요청(request)을 보내고, 서버에서는 요청의 내용을 읽고 처리한 뒤 클라이언트에 응답(respoense)을 보낸다. 따라서 서버에는 요청을 받는 부분과 응답을 보내는 부분이 있어야 한다. 요청과 응답은 이벤트 방식이라 생각하면 된다. 클라이언트로부터 요청이 왔을 때 어떤 작업을 수행할지 이벤트 리스너를 미리 등록해두어야 한다. const http = require('http'); http.createServer( (req, res) => { //응답 내용 }); http 서버가 있어야 웹 브라우저의 요청을 처리할 수 있다. createServer 메서드를 사용하여 콜백 함수에 요청에 대한 응답 내용을 적으면 요청이 들어올 때마다 콜백 함수가 실행된다. createS..
setInterval(() => { console.log('시작'); try{ throw new Error('down server!!'); }catch(err){ console.error(err); } }, 1000); 파일 시스템 접근하기 fs 모듈은 파일 시스템에 접근하는 모듈이다. 즉, 파일을 생성하거나 삭제하고, 읽거나 쓸 수 있다. 폴더도 만들거나 지울 수 있다. const fs = require('fs'); fs.readFile('./read.txt', (err, data) => { if(err){ throw err; } console.log(data); console.log(data.toString()); }); fs는 기본적으로 콜백 형식의 모듈이므로 실무에서 사용하기 불편하다. 따라서 f..
ES2015+ 2015년 자바스크립트 문법에 매우 큰 변화가 있었다. ES6가 등장한 것이다. 현재는 ES2020까지 나왔다. 우선 ES6 내용을 정리하고 나머지도 정리해보자. const, let 자바스크립트를 배울 때는 var로 변수를 선언하는 방법부터 배운다. 하지만 이제 const와 let이 대체한다. const와 let이 공통적으로 가지는 특징은 블록 스코프이다. 블록 스코프란 해당 블록에서만 접근할 수 있다는 것이다. 함수 스코프 대신 블록 스코프를 사용함으로써 호이스팅 같은 문제도 해결되고 코드 관리도 수월해졌다. const는 한 번 값을 할당하면 다른 값을 할당할 수 없다. 또한, 초기화할 때 값을 할당하지 않으면 에러가 발생한다. 템플릿 문자열 백틱을 이용한 문자열이다. 중간에 변수를 사용..