본문 바로가기

Node.js공부/예제를 통한 Node.js 공부

Node.js 공부 6 - EJS

반응형

공부 참고 URL: https://velopert.com/379


이번 공부에서는, data/user.json 추가와 views/ 내부 파일 변경이 이루어졌습니다 :)



1. 의존 모듈 추가 

저번 Node.js 공부 5에서는 페이지 라우팅에 대해서 공부했었는데, 이번 페이지에서는 EJS엔진과 RESTful API, 그리고, 세션을 다룰 것이므로 추가적으로 필요한 의존 모듈들을 넣어주었습니다.


- body-parser: POST 데이터 처리

- express-session: 세션 관리


$ npm install body-parser 

$ npm install express-session 


위의 두가지 명령어를 터미널에서 입력하셔도 되고, package.json에서 직접 입력한 후, $ npm install을 입력하셔도 됩니다.


추가한 모듈들을 server.js에서 불러오겠습니다. 불러올 때는 require() 기억하시죠?

>>server.js


var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var session = require('express-session');
var fs = require("fs");



app.set('views',__dirname+'/views');
app.set('view engine','ejs');
app.engine('html', require('ejs').renderFile);

var server = app.listen(3000, function(){
console.log("Express server has started on port 3000")
})

app.use(express.static('public'));

app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(session({
secret: '@#@$MYSIGN#@$#$',
resave: false,
saveUninitialized: true
}));

var router = require('./router/main')(app,fs);


 


Express의 이전버전에서는 cookie-parser 모듈을 가져와야했지만, express-session모듈이 직접 쿠키에 접근하기 때문에, cookie-parser가 필요하지 않습니다

또한, Node.js 안에 내장되어있는 fs 모듈은 나중에 파일을 열기 위한 모듈입니다.


router코드를 맨 밑으로 내린 이유는 router코드가 bodyParser 설정 아래부분에 있다면 제대로 작동하지 않기 때문입니다. 

또한 router에서 fs 모듈을 사용할 수 있도록 매개변수로 추가해 주었습니다.



router/main.js에서 첫번째 줄 update

module.exports = function(app,fs)

//..생략


** session 

- secret: 쿠키를 임의로 변조하는 것을 방지하기 위한 sign값. 임의의 값 가능

- resave: 세션을 언제나 저장할 지 (변경하지 않아도) 정하는 값. (express-session documentation에서는 이 값을 false로 하는 것을 권장하고 필요에 따라 true로 설정)

- saveUninitialized: uninitialized 세션이란 새로 생겼지만 변경되지 않은 세션을 의미. true를 권장.


1-2. 왜 router 코드가 bodyParser설정 아래부분에 있다면 제대로 작동하지 않을까?

참고한 문서는 여기에 있습니다. 자세한 설명은 여기를 눌러주세요 :)


Express 4 로 업데이트 되면서, 이제 앱은 라우팅 미들웨어를 암시적으로 로드하기 때문에, 더 이상 router 미들웨어에 대한 미들웨어 로드 순서에 대해 걱정할 필요가 없다고 나옵니다.

라우트를 정의하는 방법은 변경되지 않았지만, 라우트의 구성을 돕기 위하여 라우팅 시스템에는 다음과 같은 2개의 기능이 추가되었습니다.


1. app.route() : 라우트 경로에 대하여 체인 가능한 라우트 핸들러를 작성할 수 있습니다. 경로는 한 곳에 지정되어 있으므로, 모듈식 라우트를 작성하면 중복성과 오타가 감소하여 도움이 됩니다. 


2. express.Router: 라우트의 구성을 돕는 다른 기능은 새롭게 추가된 클래스인 express.Router이며, 이를 이용해 모듈식 마운팅 가능한 라우트 핸들러를 작성할 수 있습니다. Router 인스턴스는 완전한 미들웨어이자 라우팅 시스템이며, 따라서 미니 앱(mini-app)이라 불리는 경우가 많습니다.

- var router = express.Router()를 통하여 라우터를 모듈로서 작성

- router.use(function(){...}) 을 통하여 라우터 모듈에서 미들웨어 로드 가능

- router.get('/', function(req, res){...}); 을 통하여 기본 앱의 한 경로에 라우터 모듈을 마운트 가능


*용어정리

1. 미들웨어: 미들웨어는 양 쪽을 연결하여 데이터를 서로 주고 받을 수 있도록 중간에서 매개 역할을 하는 소프트웨어, 네트워크를 통해서 연결된 여러 개의 컴퓨터에 있는 많은 프로세스들에게 어떤 서비스를 사용할 수 있도록 연결해주는 소프트웨어를 말한다. 웹 브라우저에서 데이터베이스로부터 데이터를 저장하거나 읽어올 수 있게 중간에 미들웨어가 존재하게 된다. 라우팅 미들웨어라고 표현한 것은 app.use() 에서 use()를 이용하여 미들웨어로 등록하였기 때문입니다.

2. 마운트: 계속해서 나오는 마운트 용어란, 쉽게 말하자면 경로(url뒤에 /[name]/...)에 함수를 적용한다는 용어로 쓰였다고 생각하시면 될 것 같습니다.


2.  Cookie & Session 이란?

쿠키와 세션을 이용하는 이유는 HTTP 프로토콜의 특징이자 약점을 보완하기 위해서 사용합니다.

HTTP 프로토콜의 특징을 얘기하자면, 1. 비연결지향(Connectionless), 2. 상태정보유지안함(Stateless)인데요, 비연결지향은 클라이언트가 서버에게 request를 보내고 서버는 클라이언트 요청에 맞는 response를 보내고 접속을 끊는 특성입니다. 상태정보유지안함 특성은 연결을 끊는 순간 클라이언트와 서버의 통신이 끝나면 상태 정보는 유지하지 않는 특성을 말하는데요, 이 두가지 특성덕분에 계속해서 통신연결을 유지하지 않아서 리소스 낭비가 줄어들지 않는 매우 큰 장점을 지니고 있습니다. 그러나, 새로 커넥션을 열기 때문에 클라이언트는 내가 누구인지 계속해서 인증해야하는데 이를테면 어떤 페이지를 옮겨다닐 때마다 로그인을 해야하는 것이죠 :)


1. Cookie

쿠키는 클라이언트 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일입니다. 쿠키안에는 '이름, 값, 만료날짜(쿠키 저장기간), 경로' 정보가 들어있습니다. 쿠키는 일정시간 동안 데이터를 저장할 수 있기 때문에 이를 통하여 로그인 상태 유지에 활용이 가능한 것입니다. 예를 들면, 클라이언트에서 로그인을 하면 쿠키는 클라이언트 정보를 로컬에 저장하고 참조하게 되는 것입니다.


쿠키 사용사례: 자동로그인, 팝업체크, 쇼핑몰 장바구니


2. Session

일정 시간동안 같은 브라우저로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 유지하는 기술

클라이언트가 request를 보내면, 해당 서버의 엔진이 클라이언트에게 유일한 ID를 부여하는데 이것이 세션 ID 이다.

웹 브라우저를 통해 웹 서버에 접속한 이후로 브라우저를 종료할 때까지 유지되는 상태


세션 사용사례: 로그인 정보 유지


3. EJS 템플릿 엔진


ejs문법은 여기를 참고하시면 됩니다



반응형

'Node.js공부 > 예제를 통한 Node.js 공부' 카테고리의 다른 글

Node.js 공부 8 - express-session  (0) 2019.02.07
Node.js 공부 7 - RESTful API  (0) 2019.02.05
Node.js 공부 5 - express  (0) 2019.01.31
node.js 공부 4- Callback function  (0) 2019.01.31
Node.js 공부 3 - npm  (0) 2019.01.31