본문 바로가기

Node.js

(25)
Node.js - 몽구스 (Mongoose, 몽고디비 작업 라이브러리) 몽구스는 노드와 몽고디비를 연동해줄 뿐만 아니라 쿼리까지 만들어준다. 몽고디비 자체도 자바스크립트 쿼리를 사용하긴 하지만 이 라이브러리를 이용하면 더 쉽게 만들 수 있다. 몽구스는 시퀄라이즈와는 달리 ODM (Object Document Mapping) 이라고 불린다. 몽고디비는 릴레이션이 아닌 도큐멘트를 사용하므로 ORM이 아니라 ODM이다. 몽고디비 자체가 이미 자바스크립트인데 왜 굳이 자바스크립트 객체와 매핑하는 것일까? 이는 몽고디비에 없어서 불편한 점들을 몽구스가 보완해주기 때문이다. 먼저 스키마라는 것이 생겼다. 몽고디비는 테이블이 없어 자유롭게 데이터를 넣을 수 있지만, 오히려 이게 독이될 수도 있다. 실수로 잘못된 자료형의 데이터를 넣거나 다른 도큐멘트에는 없는 필드의 데이터를 넣을 수도 ..
Node.js - 시퀄라이즈 (Sequelize, SQL 데이터베이스 작업 라이브러리) 노드에서 MySQL 작업을 쉽게 할 수 있도록 도와주는 라이브러리가 있다. 바로 시퀄라이즈 (Sequelize) 이다. 시퀄라이즈는 ORM (Object-relational Mapping) 으로 분류되며, ORM은 자바스크립트 객체와 데이터베이스의 릴레이션을 매핑해주는 도구이다. 시퀄라이즈는 MySQL 외에도 MariaDB, PostgreSQL 등등 다른 데이터베이스에도 쓸 수 있다. 문법이 어느 정도 호환되므로 프로젝트를 다른 SQL 데이터베이스로 전환할 때도 편리하다. 시퀄라이즈를 쓰는 이유는 자바스크립트 구문을 알아서 SQL로 바꿔주기 때문이다. 따라서 SQL 언어를 직접 사용하지 않더라도 자바스크립트만으로 MySQL을 조작할 수 있고, 따라서 SQL 언어를 몰라도 MySQL을 어느 정도 다룰 수 ..
Express - 템플릿 엔진 (Template Engine) 템플릿 엔진 웹페이지 구성 시 가장 기본적으로 쓰이는 마크업 언어인 HTML은 정적인 언어이다. 주어진 기능만 사용할 수 있으며, 직접 기능을 추가할 수 없다. 그러나 자바스크립트와 함께라면 가능하다. 예를 들어 HTML로 1,000개의 데이터를 모두 표현하고 싶다고 해보자. HTML만 사용한다면 일일이 직접 써서 넣어야 할 것이다. 그러나 자바스크립트로 표현하면 반복문으로 아주 간단하게 처리할 수 있다. 템플릿 엔진은 자바스크립트를 사용하여 HTML을 렌더링할 수 있게 해준다. 따라서 기존 HTML과 문법이 살짝 다를 수도 있고, 자바스크립트 문법이 들어가기도 한다. 템플릿 엔진에는 대표적으로 퍼그 (Pug), 넌적스 (Nunjucks), EJS, Handlebars 등이 있다. 퍼그는 사용법이 아주 ..
Express - req, res 객체 익스프레스의 req, res 객체는 기본적으로 http 모듈의 req, res 객체를 확장한 것이다. 기존 http 모듈의 메서드는 물론 익스프레스가 추가한 메서드나 속성을 이용할 수도 있다. 예를 들어 res.writeHead, res.write, res.end 메서드를 그대로 사용할 수 있으면서도 res.send 또는 res.sendFine 등의 메서드도 쓸 수 있다. 다만 익스프레스의 메서드가 워낙 편리하기 때문에 기존 http의 메서드들은 잘 사용되지 않는다. 익스프레스가 많은 속성과 메서드를 추가했지만, 자주 쓰이는 것 위주로 살펴보자. 먼저 req 객체를 살펴보자. req.app: req 객체를 통한 app 객체로의 접근이다. 예를 들어 req.app.get('port')와 같은 식으로 사용할..
Express - 라우터 (Router) 익스프레스를 사용하는 이유 중 하나가 라우팅을 깔끔하게 관리할 수 있다는 점이다. 예를 들어, app.js에서 app.get 같은 메서드가 라우터 부분이다. 그러나 라우터를 많이 연결하면 app.js 코드가 매우 길어진다. 익스프레스에서는 라우터를 분리할 수 있는 방법을 제공한다. routes 폴더를 만들고 그 안에 index.js와 user.js를 다음과 같이 작성해주자. // routes/index.js const express = require('express'); const router = express.Router(); router.get('/', (req, res) => { res.send('Hello, Express'); }); module.exports = router; // routes/..
Express - 미들웨어 (Middleware) 미들웨어 기본 미들웨어는 익스프레스의 핵심이다. 미들웨어는 요청과 응답의 중간에 위치한다 하여 미들웨어라고 불린다. 후에 다룰 라우터와 에러 핸들러 또한 미들웨어의 일종이며, 미들웨어가 곧 익스프레스의 전부라고 해도 과언이 아니다. 미들웨어는 요처오가 응답을 조작하여 기능을 추가하기도 하며 나쁜 요청을 걸러내기도 한다. 미들웨어는 app.use와 함께 사용된다. app.use(미들웨어) 꼴로 사용된다. 저번에 만들었던 서버에 미들웨어를 연결해보자. const express = require('express'); const app = express(); app.set('port', process.env.PORT || 3000); app.use((req, res, next) => { console.log('..
Express - 익스프레스 프로젝트 시작하기 (Start Express Project) 익스프레스는 웹 서버 프레임워크이며, Node.js를 기반으로 구동되는 웹 서버 프레임워크이다. 익스프레스는 http 모듈의 요청과 응답 객체에 추가 기능들을 부여한다. 또한, 코드를 분리하기 쉽게 만들어 관리하기도 용이하다. 그리고 더 이상 if 문으로 요청 메서드와 주소를 구별하지 않아도 된다. 이제 익스프레스 프로젝트를 시작해보자. 먼저 learn-express 라는 폴더를 만들고, package.json 파일을 생성하여 정보들을 입력해준다. npm init으로 해도 좋다. 그 후, express와 nodemon을 설치해주자. nodemon은 개발용 패키지로 설치해주는게 좋다. 그 후, package.json의 항목 중 scripts의 start 항목에 nodemon app이라는 명령어를 입력해주자..
Node.js - 노드 패키지 매니저 (Node Package Manager, npm) 노드 패키지 매니저 기본 사용법 (패키지 설치) 노드의 패키지 매니저인 npm (Node Package Manager) 에 대해 알아보자. 먼저 패키지의 관리를 알아보자. 패키지의 관리는 package.json 이라는 파일에서 한다. 서비스에 필요한 패키지를 하나씩 추가하다 보면 일일이 관리하기 어려워질 수도 있다. 또한 패키지는 버전마다 그 기능이 달라질 수 있다. 따라서 패키지의 버전을 어딘가에 기록해두어야 한다. 따라서 노드 프로젝트를 시작하기 전에는 폴더 내부에 무조건 package.json부터 만들고 시작해야 한다. npm은 이를 만드는 명령어 (npm init) 를 제공한다. 콘솔에 npm init을 쳐서 package.json 파일을 만들어보자. npm init을 입력하면 여러 정보들을 입력..